W3docs

Input dell'utente in Python

Impara a leggere l'input dell'utente in Python con input(), convertire tipi, validare dati, gestire errori e creare programmi interattivi da riga di comando.

La funzione integrata input() di Python consente ai tuoi programmi di mettersi in pausa e attendere che l'utente digiti qualcosa. Questo capitolo copre tutto ciò che ti serve per leggere, validare e convertire l'input dell'utente — da un semplice prompt in una riga a cicli di input robusti che rifiutano dati non validi.

Cosa imparerai:

  • Come funziona input() e cosa restituisce sempre
  • Convertire l'input string in numeri e altri tipi
  • Richiedere più valori su una sola riga
  • Validare l'input con cicli e try/except
  • Leggere password senza mostrare i caratteri digitati
  • Errori comuni e come evitarli

La funzione input()

input() mostra un prompt opzionale, attende che l'utente prema Invio, e restituisce tutto ciò che l'utente ha digitato come string.

name = input("What is your name? ")
print("Hello, " + name + "!")

Esempio di sessione:

What is your name? Alice
Hello, Alice!

Due cose da notare:

  1. La string del prompt viene stampata nel terminale senza un a capo — il cursore si posiziona subito dopo il ?.
  2. Il valore restituito è sempre di tipo str, anche se l'utente digita 42.

Se chiami input() senza argomenti, non mostra alcun prompt ma attende comunque l'input:

value = input()  # silent prompt

Convertire l'input in altri tipi

Poiché input() restituisce sempre una string, devi convertire il valore quando hai bisogno di un numero o di un altro tipo. Le funzioni di conversione integrate di Python rendono questo processo semplice.

Input intero

age = int(input("Enter your age: "))
print("In ten years you will be", age + 10)
Enter your age: 25
In ten years you will be 35

Input float

price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")
Enter the price: 19.99
Tax: $1.60

Input in stile boolean

Python non ha una scorciatoia bool() per il testo "sì/no", quindi controlla la string direttamente:

answer = input("Continue? (yes/no): ").strip().lower()
if answer == "yes":
    print("Continuing...")
else:
    print("Stopping.")

Per un riferimento completo al sistema di tipi di Python, consulta i capitoli Python Data Types e Python Casting.


Leggere più valori contemporaneamente

A volte gli utenti devono inserire più valori su una sola riga. str.split() divide la string di input in una lista.

# Read three space-separated integers
a, b, c = input("Enter three numbers separated by spaces: ").split()
a, b, c = int(a), int(b), int(c)
print("Sum:", a + b + c)
Enter three numbers separated by spaces: 4 7 2
Sum: 13

Puoi anche usare un separatore personalizzato:

first, last = input("Enter your full name (first,last): ").split(",")
print(f"Hello, {first.strip()} {last.strip()}!")
Enter your full name (first,last): Alice,Smith
Hello, Alice Smith!

map() è un modo conciso per convertire tutte le parti in una volta sola:

numbers = list(map(int, input("Enter numbers: ").split()))
print("Numbers:", numbers)
print("Total:", sum(numbers))
Enter numbers: 3 1 4 1 5 9
Numbers: [3, 1, 4, 1, 5, 9]
Total: 23

Gestire l'input non valido con try/except

Se l'utente digita qualcosa di inaspettato — lettere dove era atteso un numero — la conversione genera un ValueError e il programma si interrompe a meno che non venga gestito.

Gestione di base degli errori

try:
    age = int(input("Enter your age: "))
    print("Valid age:", age)
except ValueError:
    print("That is not a valid number. Please enter digits only.")
Enter your age: twenty
That is not a valid number. Please enter digits only.

Consulta il capitolo Python Try Except per una guida completa alla gestione delle eccezioni.

Ripetere il prompt finché non viene fornito un input valido

Un ciclo while True combinato con break è il pattern standard per "continuare a chiedere finché l'utente non inserisce dati corretti":

while True:
    try:
        age = int(input("Enter your age: "))
        if age < 0 or age > 130:
            print("Please enter a realistic age (0-130).")
        else:
            break  # valid input received
    except ValueError:
        print("That is not a valid number. Please try again.")

print(f"Your age is {age}.")

Esempio di sessione:

Enter your age: abc
That is not a valid number. Please try again.
Enter your age: -5
Please enter a realistic age (0-130).
Enter your age: 28
Your age is 28.

Questo pattern — ciclo, try/except, controllo dell'intervallo, break — copre la grande maggioranza delle necessità di validazione dell'input nel mondo reale.

Consulta Python While Loops per ulteriori informazioni sul controllo dei cicli.


Rimuovere gli spazi bianchi

Gli utenti spesso aggiungono accidentalmente uno spazio iniziale o finale. Chiama sempre .strip() sull'input testuale prima di confrontarlo o memorizzarlo:

username = input("Username: ").strip()
if username == "admin":
    print("Welcome, administrator!")
else:
    print(f"Welcome, {username}!")

.lower() o .upper() aiuta nei confronti senza distinzione tra maiuscole e minuscole:

city = input("Enter your city: ").strip().lower()
if city == "new york":
    print("You are in the Big Apple!")

Validazione dell'input con condizioni

Per scelte o pattern, controlla il valore direttamente dopo aver rimosso gli spazi e normalizzato:

color = input("Choose a color (red/green/blue): ").strip().lower()
valid_colors = {"red", "green", "blue"}

if color not in valid_colors:
    print(f"'{color}' is not a valid choice. Pick red, green, or blue.")
else:
    print(f"You chose {color}.")

Validazione con espressioni regolari

Il modulo re consente di verificare che l'input corrisponda a un pattern specifico:

import re

email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"

email = input("Enter your email address: ").strip()
if re.match(email_pattern, email):
    print("Valid email address.")
else:
    print("Invalid email address. Please include '@' and a domain.")
Enter your email address: [email protected]
Valid email address.

Nota: L'espressione regolare sopra è semplificata a scopo dimostrativo. I sistemi in produzione in genere utilizzano una libreria dedicata (come email-validator) o la validazione lato server per gli indirizzi email.


Leggere le password in modo sicuro

La funzione standard input() mostra i caratteri nel terminale mentre l'utente digita. Per le password e altri dati sensibili, usa getpass.getpass() dalla libreria standard — nasconde i caratteri digitati:

import getpass

password = getpass.getpass("Enter your password: ")
print("Password received (length:", len(password), "characters).")

getpass.getpass() accetta la stessa string di prompt opzionale di input(). Il terminale nasconde i caratteri; il valore restituito è una semplice string.


Output formattato dall'input

Una volta ottenuti i dati dell'utente, le f-string di Python rendono facile presentarli in modo chiaro. Consulta il capitolo Format Strings per i dettagli.

name = input("Name: ").strip().title()
birth_year = int(input("Birth year: "))
current_year = 2025
age = current_year - birth_year

print(f"\n--- Profile ---")
print(f"Name      : {name}")
print(f"Born      : {birth_year}")
print(f"Age       : {age}")
Name: alice smith
Birth year: 1995

--- Profile ---
Name      : Alice Smith
Born      : 1995
Age       : 30

Python 2 vs Python 3

Se incontri codice Python 2 più vecchio, tieni presente che la funzione equivalente si chiamava raw_input(). In Python 2, input() valutava l'espressione digitata dall'utente (simile a eval()), il che rappresentava un rischio per la sicurezza. In Python 3, input() restituisce sempre una semplice string e raw_input() non esiste più.

# Python 2 (legacy — do not use)
# name = raw_input("Your name: ")

# Python 3 (correct)
name = input("Your name: ")

Errori comuni

ErroreCosa va stortoSoluzione
age = int(input(...)) senza try/exceptSi interrompe con input non numericoRacchiudi in try/except ValueError
Dimenticare .strip()" admin" non è uguale a "admin"Applica sempre strip all'input testuale
Confrontare l'input grezzo con un interoinput() == 5 è sempre FalseConverti prima: int(input(...)) == 5
Usare input() per le passwordI caratteri sono visibili sullo schermoUsa getpass.getpass()
Aspettarsi che bool(input(...)) funzioniQualsiasi string non vuota è truthyAnalizza la string: == "yes"

Riferimento rapido

# String input
name = input("Name: ").strip()

# Integer input with validation
while True:
    try:
        n = int(input("Enter a number: "))
        break
    except ValueError:
        print("Integers only, please.")

# Float input
price = float(input("Price: "))

# Multiple values on one line
x, y = map(int, input("Enter x y: ").split())

# Password (hidden input)
import getpass
pwd = getpass.getpass("Password: ")

# Choice validation
choice = input("(yes/no): ").strip().lower()
if choice not in ("yes", "no"):
    print("Please type yes or no.")

Argomenti correlati

Esercitazione

Pratica
Which of the following are valid ways to get user input in Python?
Which of the following are valid ways to get user input in Python?
Was this page helpful?