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:
- La string del prompt viene stampata nel terminale senza un a capo — il cursore si posiziona subito dopo il
?. - Il valore restituito è sempre di tipo
str, anche se l'utente digita42.
Se chiami input() senza argomenti, non mostra alcun prompt ma attende comunque l'input:
value = input() # silent promptConvertire 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 35Input float
price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")Enter the price: 19.99
Tax: $1.60Input 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: 13Puoi 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: 23Gestire 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 : 30Python 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
| Errore | Cosa va storto | Soluzione |
|---|---|---|
age = int(input(...)) senza try/except | Si interrompe con input non numerico | Racchiudi in try/except ValueError |
Dimenticare .strip() | " admin" non è uguale a "admin" | Applica sempre strip all'input testuale |
| Confrontare l'input grezzo con un intero | input() == 5 è sempre False | Converti prima: int(input(...)) == 5 |
Usare input() per le password | I caratteri sono visibili sullo schermo | Usa getpass.getpass() |
Aspettarsi che bool(input(...)) funzioni | Qualsiasi string non vuota è truthy | Analizza 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
- Python Variables — memorizzare e nominare i valori
- Python Data Types — string, interi, float e altro ancora
- Python Casting — conversione tra tipi
- Python Strings — metodi come
.strip(),.lower(),.split() - Python Try Except — catturare e gestire le eccezioni
- Python While Loops — ripetere finché una condizione è soddisfatta
- Format Strings — costruire string di output con le f-string