Input dell’utente e conversione dei tipi

Bentornato.
Nella lezione precedente hai imparato variabili e tipi di dato.
Hai imparato a salvare valori come:
name = "Anna"
age = 25
price = 19.99
is_student = True
Molto bene.
Ora i tuoi programmi possono ricordare valori.
Ma c’è ancora un problema.
I valori sono scritti direttamente dentro il codice.
Questo significa che il programma usa sempre gli stessi dati.
Utile.
Ma non molto interattivo.
Un programma reale spesso deve chiedere informazioni all’utente.
Per esempio:
Come ti chiami?
Quanti anni hai?
Quanti prodotti vuoi?
Qual è il prezzo?
Ed è qui che entra in scena input().
input() permette al programma di fare domande.
L’utente risponde.
Python salva la risposta.
Poi il programma può usarla.
All’improvviso il programma non sta solo parlando.
Sta ascoltando.
Upgrade pericoloso.
Ma utile.
Cosa imparerai
In questa lezione imparerai:
- cosa fa
input(); - come chiedere testo all’utente;
- come salvare l’input in variabili;
- perché
input()restituisce sempre una stringa; - come convertire testo in numeri;
- come usare
int(); - come usare
float(); - come combinare
input()con le f-string; - come costruire semplici programmi interattivi;
- errori comuni dei principianti;
- come creare una piccola calcolatrice.
Alla fine di questa lezione i tuoi programmi potranno parlare con gli utenti.
Non intelligentemente.
Non come un chatbot.
Ma abbastanza per fare una domanda e usare la risposta.
Piccola interazione.
Grande passo.
Molto Python.
Cos’è input()?
input() è una funzione Python che chiede informazioni all’utente.
Esempio:
name = input("What is your name? ")
print(f"Hello, {name}!")
Quando esegui il programma, Python mostra:
What is your name?
Poi l’utente scrive qualcosa.
Per esempio:
Anna
Python salva "Anna" dentro la variabile name.
Dopo, il programma stampa:
Hello, Anna!
Molto bello.
Molto educato.
Il programma ha chiesto.
L’utente ha risposto.
Python ha ricordato.
Nessuno ha pianto.
Ottimo progresso.
Il tuo primo programma con input()
Crea un file:
input_example.py
Scrivi:
name = input("What is your name? ")
print(f"Hello, {name}!")
Eseguilo:
python input_example.py
oppure:
python3 input_example.py
Vedrai:
What is your name?
Scrivi il tuo nome e premi Invio.
Esempio:
Viktor
Poi il programma stampa:
Hello, Viktor!
Congratulazioni.
Il tuo programma ora è interattivo.
Chiede.
Aspetta.
Risponde.
Molto semplice.
Molto importante.
Molto “il mio programma ha imparato le buone maniere”.
Il testo dentro input()
Il testo dentro input() si chiama prompt.
Esempio:
input("What is your name? ")
Il prompt è ciò che l’utente vede.
Prompt buono:
name = input("What is your name? ")
Prompt cattivo:
name = input()
Questo funziona, ma l’utente non vede nulla.
Il programma resta semplicemente in attesa.
L’utente potrebbe pensare che il programma sia rotto.
E sinceramente, comprensibile.
Scrivi sempre un prompt chiaro.
I computer non si spiegano da soli naturalmente.
Devi aiutarli.
Come piccoli bambini metallici confusi.
Salvare input in una variabile
Di solito salvi l’input in una variabile.
Esempio:
city = input("Where do you live? ")
print(f"You live in {city}.")
Se l’utente scrive:
Rome
Output:
You live in Rome.
Il flusso è:
Fai una domanda.
L’utente scrive una risposta.
Salva la risposta in una variabile.
Usa la variabile.
Questo schema è molto comune.
Lo userai ancora e ancora.
Come fare il caffè.
Ma con più sintassi.
Più domande
Puoi fare più di una domanda.
Esempio:
name = input("What is your name? ")
city = input("Where do you live? ")
language = input("What programming language are you learning? ")
print(f"Hello, {name}!")
print(f"You live in {city}.")
print(f"You are learning {language}.")
Esempio di interazione:
What is your name? Anna
Where do you live? Rome
What programming language are you learning? Python
Output:
Hello, Anna!
You live in Rome.
You are learning Python.
Ora il tuo programma raccoglie più informazioni.
Questo è già utile.
Piccolo form.
Piccola sensazione da database.
Ma senza database.
Per ora.
input() restituisce sempre una stringa
Dettaglio molto importante:
input() restituisce sempre una stringa.
Anche se l’utente scrive un numero.
Esempio:
age = input("How old are you? ")
print(type(age))
Se l’utente scrive:
25
Python lo salva come:
"25"
Non come:
25
Output:
<class 'str'>
Questo è importante.
Molto importante.
Python vede l’input dell’utente come testo.
Perché dalla tastiera tutto arriva come testo.
Python non indovina.
Python non dice:
Questo sembra un numero, quindi sarò creativo.
No.
Python dice:
Testo.
Sicuramente testo.
Buona fortuna.
Molto severo.
Molto onesto.
Il problema con i numeri da input()
Prova questo:
age = input("How old are you? ")
next_year = age + 1
print(next_year)
Se l’utente scrive:
25
Potresti aspettarti:
26
Ma Python dà un errore.
Perché?
Perché age è una stringa.
Questo significa che Python vede:
"25" + 1
Cioè testo più numero.
Python rifiuta.
E sinceramente fa bene.
È come provare ad aggiungere una banana a una calcolatrice.
Interessante.
Ma non valido.
Convertire input in int
Se vuoi un numero intero, usa int().
Esempio:
age_text = input("How old are you? ")
age = int(age_text)
next_year = age + 1
print(f"Next year you will be {next_year}.")
Se l’utente scrive:
25
Output:
Next year you will be 26.
Qui:
int(age_text)
converte la stringa "25" nell’intero 25.
Ora Python può fare matematica.
Molto bene.
La banana della calcolatrice è stata rimossa.
Versione più corta
Puoi convertire l’input direttamente:
age = int(input("How old are you? "))
next_year = age + 1
print(f"Next year you will be {next_year}.")
Questo è comune.
Ma per principianti, la versione più lunga a volte è più facile da capire:
age_text = input("How old are you? ")
age = int(age_text)
Entrambe sono corrette.
Usa quella che ti sembra più chiara.
Il codice chiaro è meglio del codice che sembra intelligente ma fa uscire il cervello dall’edificio.
Convertire input in float
Se ti serve un numero decimale, usa float().
Esempio:
price = float(input("Product price: "))
quantity = int(input("Quantity: "))
total = price * quantity
print(f"Total: {total}")
Esempio:
Product price: 19.99
Quantity: 3
Output:
Total: 59.97
Usa:
int()
per numeri interi.
Usa:
float()
per numeri decimali.
Regola semplice.
Regola utile.
Regola che salva molti mal di testa.
I numeri decimali usano il punto
In Python, i numeri decimali usano il punto:
19.99
Non la virgola:
19,99
Input corretto:
19.99
Input sbagliato:
19,99
Se l’utente scrive:
19,99
e il programma usa float(), Python si lamenterà.
Python si aspetta un punto.
Python non si preoccupa del fatto che molti paesi usino la virgola per i prezzi.
Python ha scelto il punto.
Il punto è legge.
Punto minuscolo.
Autorità enorme.
Programma semplice di saluto
Crea un file:
greeting.py
Scrivi:
name = input("What is your name? ")
city = input("Where do you live? ")
print(f"Hello, {name}!")
print(f"{city} sounds like a nice place.")
Eseguilo.
Esempio:
What is your name? Anna
Where do you live? Rome
Output:
Hello, Anna!
Rome sounds like a nice place.
Questo programma non fa molto.
Ma usa una vera interazione.
Input.
Variabili.
Output.
Questo è uno schema utile.
Molti programmi più grandi sono solo questo schema con più passaggi e più caffè.
Programma semplice con età
Crea un file:
age_program.py
Scrivi:
name = input("What is your name? ")
age = int(input("How old are you? "))
next_year = age + 1
print(f"Hello, {name}.")
print(f"Next year you will be {next_year} years old.")
Esempio:
What is your name? Anna
How old are you? 25
Output:
Hello, Anna.
Next year you will be 26 years old.
Ora il tuo programma usa:
- input testuale;
- input numerico;
- conversione di tipo;
- calcolo;
- output con f-string.
Piccolo programma.
Concetti reali.
Molto bene.
Programma semplice da negozio
Crea un file:
shop_input.py
Scrivi:
customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))
total = price * quantity
print("----- Receipt -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price}")
print(f"Quantity: {quantity}")
print(f"Total: {total}")
Esempio di interazione:
Customer name: Anna
Product name: Keyboard
Product price: 70
Quantity: 2
Output:
----- Receipt -----
Customer: Anna
Product: Keyboard
Price: 70.0
Quantity: 2
Total: 140.0
Questo è molto più interessante.
L’utente fornisce i dati.
Il programma calcola il risultato.
È così che iniziano molti script utili.
Non con fuochi d’artificio.
Con input.
E una quantità sospetta di pazienza.
Rendere l’output più pulito
A volte i float stampano più decimali di quanti ne vuoi.
Per il denaro, spesso vuoi due cifre decimali.
Usa:
print(f"Total: {total:.2f}")
Esempio:
price = 19.99
quantity = 3
total = price * quantity
print(f"Total: {total:.2f}")
Output:
Total: 59.97
La parte:
:.2f
significa:
mostra questo numero con 2 cifre decimali
È utile per i prezzi.
Molto utile.
Perché il denaro con decimali casuali sembra un documento fiscale in crisi nervosa.
Programma negozio più pulito
Aggiorna shop_input.py:
customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))
total = price * quantity
print("----- Receipt -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price:.2f}")
print(f"Quantity: {quantity}")
print(f"Total: {total:.2f}")
Ora l’output appare più pulito:
----- Receipt -----
Customer: Anna
Product: Keyboard
Price: 70.00
Quantity: 2
Total: 140.00
Molto meglio.
L’output leggibile conta.
Un programma non deve solo funzionare.
Deve anche non sembrare assemblato da un procione stanco.
A meno che quello sia il tema.
Di solito no.
Errore comune: dimenticare int()
Sbagliato:
age = input("How old are you? ")
next_year = age + 1
print(next_year)
Questo fallisce perché age è testo.
Corretto:
age = int(input("How old are you? "))
next_year = age + 1
print(next_year)
Se vuoi fare matematica, converti l’input in numero.
Ricorda:
input() dà testo.
La matematica ha bisogno di numeri.
Semplice.
Importante.
Molto Python.
Errore comune: usare int() per numeri decimali
Sbagliato:
price = int(input("Product price: "))
Se l’utente scrive:
19.99
Python si lamenterà.
Perché int() si aspetta un numero intero.
Usa:
price = float(input("Product price: "))
Regola:
Età, quantità, numero di oggetti -> int
Prezzo, peso, temperatura -> float
Non è sempre perfetta.
Ma va bene per principianti.
Errore comune: scrivere testo quando Python aspetta un numero
Se il programma dice:
age = int(input("How old are you? "))
e l’utente scrive:
banana
Python andrà in errore.
Perché:
int("banana")
non ha senso.
Python non può convertire banana in un numero.
Questo non è Python che fa il difficile.
È Python che è ragionevole.
Più avanti impareremo a gestire gli errori correttamente.
Per ora scrivi il tipo di dato che il programma chiede.
Se chiede l’età, non rispondere con frutta.
Di solito è anche un buon consiglio di vita.
Errore comune: spazio mancante nel prompt
Questo non è rotto:
name = input("What is your name?")
Ma l’utente scriverà subito dopo la domanda:
What is your name?Anna
Meglio:
name = input("What is your name? ")
Nota lo spazio prima della virgoletta finale:
"? "
Così l’input è più leggibile:
What is your name? Anna
Dettaglio minuscolo.
Esperienza migliore.
La programmazione è piena di dettagli minuscoli che fingono di essere piccoli.
Errore comune: non salvare il file
Modifichi il codice.
Esegui il programma.
Non cambia nulla.
Perché?
Spesso perché il file non è stato salvato.
Classico.
Molto classico.
Quasi tradizionale.
Prima di eseguire il programma, salva il file.
Il tuo editor potrebbe mostrare un punto o un segnale quando il file ha modifiche non salvate.
Salva.
Esegui.
Controlla.
Questo ritmo conta:
modifica
salva
esegui
Non:
modifica
panico
esegui vecchia versione
ancora più panico
input() con risposte vuote
L’utente può premere Invio senza scrivere nulla.
Esempio:
name = input("What is your name? ")
print(f"Hello, {name}!")
Se l’utente preme solo Invio, name diventa una stringa vuota:
""
Output:
Hello, !
Non bellissimo.
Ma valido.
Più avanti impareremo a controllare input vuoti.
Per ora sappi solo che può succedere.
Gli utenti sono creativi.
A volte troppo creativi.
Mini programma: minuti in secondi
Crea un file:
minutes_to_seconds.py
Scrivi:
minutes = int(input("Minutes: "))
seconds = minutes * 60
print(f"{minutes} minutes is {seconds} seconds.")
Esempio:
Minutes: 5
Output:
5 minutes is 300 seconds.
Questo programma chiede un numero.
Lo converte.
Calcola.
Stampa il risultato.
Semplice.
Utile.
Una piccola calcolatrice è entrata nella stanza.
Mini programma: Celsius in Fahrenheit
Crea un file:
temperature.py
Scrivi:
celsius = float(input("Temperature in Celsius: "))
fahrenheit = (celsius * 9 / 5) + 32
print(f"{celsius:.1f}°C is {fahrenheit:.1f}°F.")
Esempio:
Temperature in Celsius: 20
Output:
20.0°C is 68.0°F.
Questo usa:
float();- matematica;
- formattazione con f-string.
Ottima pratica.
Utile anche se un giorno devi capire il meteo in un altro sistema di misura.
Perché apparentemente l’umanità ama la varietà.
Mini programma: calcolatrice semplice
Crea un file:
calculator.py
Scrivi:
first_number = float(input("First number: "))
second_number = float(input("Second number: "))
sum_result = first_number + second_number
difference = first_number - second_number
product = first_number * second_number
division = first_number / second_number
print(f"Sum: {sum_result}")
print(f"Difference: {difference}")
print(f"Product: {product}")
print(f"Division: {division}")
Esempio:
First number: 10
Second number: 5
Output:
Sum: 15.0
Difference: 5.0
Product: 50.0
Division: 2.0
Questo è un vero progetto da principiante.
Piccolo.
Ma reale.
Chiede input.
Converte input.
Esegue calcoli.
Stampa risultati.
Questa è la base di molti programmi.
Solo con meno pulsanti e meno riunioni.
Attenzione alla divisione per zero
Se l’utente inserisce:
0
come secondo numero, questa riga fallirà:
division = first_number / second_number
Perché la divisione per zero non è permessa.
Python mostrerà un errore:
ZeroDivisionError
Per ora evita di usare zero come secondo numero.
Più avanti, quando impareremo le condizioni, sistemeremo questa cosa correttamente.
La lezione futura ci salverà.
Per ora evitiamo educatamente esplosioni matematiche.
Pratica
Crea un file:
practice_input.py
Chiedi all’utente:
- nome;
- città;
- linguaggio preferito;
- età;
- anno corrente.
Poi calcola:
anno di nascita = anno corrente - età
Esempio:
name = input("Name: ")
city = input("City: ")
favorite_language = input("Favorite programming language: ")
age = int(input("Age: "))
current_year = int(input("Current year: "))
birth_year = current_year - age
print(f"Hello, {name}!")
print(f"You live in {city}.")
print(f"You like {favorite_language}.")
print(f"You were born around {birth_year}.")
Eseguilo.
Cambia le risposte.
Eseguilo di nuovo.
Il programma deve adattarsi all’input dell’utente.
Questo è il punto.
Stesso codice.
Dati diversi.
Output diverso.
Bellissimo.
Mini sfida
Crea un file:
order_total.py
Il programma deve chiedere:
- nome cliente;
- nome prodotto;
- prezzo prodotto;
- quantità;
- costo spedizione.
Poi calcola:
subtotal = prezzo prodotto * quantità
total = subtotal + costo spedizione
Stampa un riepilogo così:
----- Order Summary -----
Customer: Anna
Product: Keyboard
Price: 70.00
Quantity: 2
Subtotal: 140.00
Shipping: 5.00
Total: 145.00
Soluzione esempio:
customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))
shipping = float(input("Shipping cost: "))
subtotal = price * quantity
total = subtotal + shipping
print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price:.2f}")
print(f"Quantity: {quantity}")
print(f"Subtotal: {subtotal:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Total: {total:.2f}")
Dopo che funziona, cambia i valori.
Prova prodotti diversi.
Prova quantità diverse.
Prova prezzi decimali.
Ma non scrivere banana dove Python si aspetta un numero.
Python non è ancora pronto per il commercio della frutta.
Checklist per principianti
Quando il tuo programma con input fallisce, controlla:
Ho salvato il file?
Sto eseguendo il file corretto?
Ho chiuso tutte le parentesi?
Ho chiuso tutte le virgolette?
Ho convertito gli input numerici con int() o float()?
Ho scritto un numero quando il programma si aspettava un numero?
Ho usato il punto per i numeri decimali?
Ho diviso per zero?
Ho scritto correttamente i nomi delle variabili?
La maggior parte degli errori è piccola.
Piccolo non significa innocuo.
Una virgoletta mancante può fermare un intero programma.
Molto drammatico.
Molto educativo.
Molto Python.
Riassunto
Oggi hai imparato:
input()chiede informazioni all’utente;- il testo dentro
input()è il prompt; - l’input dell’utente di solito si salva in una variabile;
input()restituisce sempre una stringa;- i numeri da input devono essere convertiti prima della matematica;
int()converte testo in numero intero;float()converte testo in numero decimale;- le f-string aiutano a stampare chiaramente i dati dell’utente;
:.2fformatta i numeri con due cifre decimali;- i programmi interattivi chiedono, salvano, calcolano e rispondono;
- scrivere il tipo sbagliato di input può causare errori;
- dividere per zero causa
ZeroDivisionError.
Questo è un grande passo.
Ora i tuoi programmi sono interattivi.
Possono fare domande.
Possono usare risposte.
Possono calcolare risultati dai dati dell’utente.
È così che iniziano molti script utili.
Non enormi.
Non eleganti.
Ma utili.
E utile è potente.
Prossima lezione
Nella prossima lezione impareremo le condizioni.
Imparerai a prendere decisioni con:
if
else
elif
Il tuo programma potrà fare domande come:
L’utente è abbastanza grande?
La password è corretta?
Il numero è positivo o negativo?
Il prodotto è disponibile?
Qui i programmi iniziano a fare scelte.
Molto importante.
Molto potente.
Leggermente pericoloso.
Perfetto.