Lezione 4: Input da tastiera e output in Python

🔁 Avanzamento corso: Lezione 3 di Base – Python


🎯 Obiettivi didattici

  • Capire come funziona l’input da tastiera con input() e quando usarlo.
  • Eseguire la conversione di tipi con int(), float() e str() in modo sicuro.
  • Presentare l’output con print() e formattazione (concatenazione, format(), f-string).
  • Prevenire e gestire errori comuni (ValueError, EOFError) con try/except e validazioni.

📚 Indice del corso (estratto)

  1. Introduzione a Python, print e variabili
  2. Tipi di dati fondamentali (int, float, str, bool)
  3. Input da tastiera e output in Python (questa lezione)
  4. Operatori aritmetici, logici e di confronto (prossima lezione)

🧭 Introduzione

Per rendere i tuoi programmi interattivi, devi saper leggere input da tastiera e mostrare un output chiaro. In questa lezione vedrai come usare input() per raccogliere dati e come convertirli correttamente con int(), float() e str(). Inoltre, imparerai tecniche pratiche per formattare l’output in modo leggibile, evitando errori comuni.

✨ Obiettivo pratico: al termine, saprai creare piccoli script che chiedono dati all’utente, li validano, li elaborano e stampano un output formattato.


📖 Sezione teorica – Input da tastiera e output in Python

🔹 input()

input(prompt) mostra un messaggio (opzionale) e attende che l’utente digiti del testo e prema Invio. Il valore restituito è sempre una stringa (str).
Esempio minimale:

name = input("Enter your name: ")
print("Hello, " + name + "!")

👉 Nota: se l’utente invia EOF (ad es. Ctrl+D su Linux/macOS o Ctrl+Z su Windows) senza inserire testo, viene sollevato EOFError.

🔹 Conversione di tipo: int(), float(), str()

Dato che input() restituisce stringhe, per eseguire calcoli devi convertire:

age_str = input("Enter your age: ")
age = int(age_str)          # converte "21" → 21
print("Next year you will be " + str(age + 1))
  • int("42") → 42
  • float("3.14") → 3.14
  • str(3.14) → "3.14"

💡 Suggerimento: preferisci la validazione prima della conversione; in alternativa usa try/except per intercettare ValueError.

🔹 Output con print() e formattazione

Tre modi comuni per costruire stringhe:

  1. Concatenazione: "Hello, " + name
  2. str.format(): "Hello, {}".format(name)
  3. f-string (consigliato): f"Hello, {name}"
    Le f-string sono più leggibili e performanti nella maggior parte dei casi.

Esempi di formattazione numerica:

price = 5.5
qty = 3
print(f"Total: {price * qty:.2f} €")        # 2 decimali
print("Total: {:.2f} €".format(price * qty))

💬 Domanda per te: in quali casi useresti format() al posto delle f-string?


🔶 Esempi pratici guidati

1) Echo interattivo

message = input("Write a message: ")
print("You said:", message)

2) Somma di due numeri interi

a = int(input("Insert first number: "))
b = int(input("Insert second number: "))
print("Sum =", a + b)

3) Media di due decimali

x = float(input("First decimal: "))
y = float(input("Second decimal: "))
average = (x + y) / 2
print("Average =", average)

4) BMI con formattazione (f-string)

name = input("Name: ")
weight = float(input("Weight in kg: "))
height = float(input("Height in meters: "))
bmi = weight / (height ** 2)
print(f"{name}, your BMI is {bmi:.2f}.")

5) Input robusto con try/except

while True:
    age_str = input("Enter your age: ")
    try:
        age = int(age_str)
        if 1 <= age <= 120:
            break
        else:
            print("Please enter an age between 1 and 120.")
    except ValueError:
        print("Invalid input. Please enter a whole number.")
print("Thanks, you are", age)

⚠️ Errore comune da evitare

Errore tipico: sommare direttamente stringhe e numeri

age_str = input("Enter your age: ")
age = age_str + 1     # ❌ TypeError: str + int

Soluzione: eseguire la conversione prima dell’operazione numerica (age = int(age_str)).

Errore tipico: usare la virgola come separatore decimale ("1,75") quando Python si aspetta il punto ("1.75"). Converti o sostituisci: float(height_str.replace(",", ".")).

Errore tipico: f-string con espressioni non desiderate o non sicure. Evita di interpolare input non validati in comandi di shell/SQL.


📝 Esercizio finale

Crea uno script che:

  1. Chieda nome, età e altezza in metri (es. 1.75).
  2. Validi i dati: età ∈ [1, 120], altezza ∈ [0.5, 2.5].
  3. Stampi:
    "Hello {name}, in one year you’ll be {age+1} and your height is {height:.2f} m."
  4. Extra: se l’utente inserisce altezza con la virgola, gestiscila correttamente sostituendo "," → ".".

🧠 Quiz a scelta multipla

Domande

  1. input() restituisce originariamente un valore di tipo…
    a) int · b) str · c) float
  2. Qual è il modo corretto di sommare due numeri chiesti all’utente?
    a) input()+input() · b) int(input())+int(input()) · c) str(input())+str(input())
  3. Quale riga formatta il totale a due decimali?
    a) print("Total:", total) · b) print(f"Total: {total:.2f}") · c) print("Total: {}".format(total))
  4. Cosa potrebbe sollevare EOFError?
    a) input() quando l’utente invia EOF · b) print() · c) str()
  5. Cosa fa float("3,14") senza gestione preventiva?
    a) Converte a 3.14 · b) Solleva ValueError · c) Ritorna None

Risposte (non guardare prima di provare!):

  1. b · 2) b · 3) b · 4) a · 5) b

❓ FAQ

1) Posso usare input() senza prompt?
Sì, ma è meno chiaro per l’utente. Meglio includere un testo breve.

2) Come limito l’input a numeri positivi?
Valida con condizioni o ripeti la richiesta in un ciclo while finché non ricevi un valore valido.

3) Come stampo sempre due decimali?
Usa f"{val:.2f}" oppure "{:.2f}".format(val).

4) Come gestisco ValueError in conversione?
Racchiudi int() o float() in un try/except e mostra un messaggio chiaro.

5) input() blocca il programma?
Sì, finché l’utente non invia una riga o EOF.

6) Posso leggere più valori con un solo input()?
Sì, leggi una riga e fai split(), poi converti ciascun pezzo (a, b = map(int, input().split())).

7) Come stampo su file?
Usa print(data, file=open("out.txt", "w")) oppure gestisci esplicitamente lo stream con with open(...) as f: f.write(...).



📚 Glossario tecnico

  • input(): legge una riga dallo standard input e la restituisce come str (può sollevare EOFError).
  • int(), float(), str(): funzioni di conversione dei tipi di base.
  • print(): invia testo allo standard output, con opzioni sep, end, file, flush.
  • f-string: notazione f"...{expr}..." per formattare stringhe in modo leggibile.
  • ValueError: eccezione comune quando la conversione fallisce.


🔁 Collegamento alla lezione successiva

➡️ Prosegui alla Lezione 5: Operatori aritmetici, logici e di confronto

Hai dubbi? Vuoi il PDF della lezione?
🗨️ Lascia un commento qui sotto · 📩 Scrivici per ricevere il PDF · 🔗 Condividi la lezione con un compagno di corso

📅 Aggiornato il 09/08/2025 –

Lascia un commento