Input e output da console
In questa pagina 5
Flussi standard
Ogni programma ha tre flussi aperti dal sistema operativo:
| Flusso | Python | C | Di default |
|---|---|---|---|
| standard input | sys.stdin |
stdin |
tastiera |
| standard output | sys.stdout |
stdout |
schermo |
| standard error | sys.stderr |
stderr |
schermo |
Da terminale si possono reindirizzare: python prog.py < dati.txt > risultati.txt legge da file e scrive su file senza cambiare il codice.
Lettura: input
input(prompt) stampa il prompt, legge una riga fino all'invio e la restituisce senza il carattere di a capo, sempre come str.
nome = input("Nome: ")
n = int(input("Quanti? ")) # conversione esplicita
x = float(input("Valore: "))Più valori sulla stessa riga:
a, b = input("Due interi: ").split() # "3 7" -> '3', '7'
a, b = int(a), int(b)
valori = [int(t) for t in input().split()] # numero qualunque di interi
a, b = map(int, input().split()) # map applica int a ogni pezzoLeggere fino alla fine dell'input (utile con il reindirizzamento):
import sys
for riga in sys.stdin:
riga = riga.rstrip("\n")
...Scrittura: print
print(*oggetti, sep=" ", end="\n", file=sys.stdout) converte ogni oggetto con str(), li separa con sep e termina con end.
print("a", "b", "c") # a b c
print("a", "b", "c", sep="") # abc
print("senza a capo", end="")
print(1, 2, 3, sep=", ") # 1, 2, 3
print("errore!", file=sys.stderr) # messaggi di errore su stderr
print(*[1, 2, 3]) # 1 2 3: la lista spacchettata in argomentiPer controllare il formato dei numeri si usano le f-string (vedi Stringhe in Pythonstr come sequenza immutabile di caratteri Unicode; indici e slicing; operatori; metodi principali (split, join, strip, find, replace...); f-string e formattazione; confronto lessicografico.Stringhe in Python →):
print(f"{'Nome':<10}{'Voto':>5}")
for nome, voto in [("Ada", 30), ("Alan", 28)]:
print(f"{nome:<10}{voto:>5}")Input non valido
Se l'utente scrive abc dove serve un numero, int() solleva ValueError e il programma termina. Per richiedere di nuovo il dato si combina il ciclo di validazione del Ciclo whileCiclo while, cicli controllati da contatore, da sentinella e da condizione; break, continue, else; terminazione e invariante di ciclo.Ciclo while → con try/except (Eccezioni in PythonEccezioni e traceback, eccezioni predefinite più comuni, try/except/else/finally, raise per segnalare errori, propagazione lungo le chiamate.Eccezioni in Python →):
while True:
try:
n = int(input("Intero positivo: "))
if n > 0:
break
except ValueError:
pass
print("Riprova.")Errori tipici
- Confrontare o sommare il risultato di
input()senza convertirlo:input() + 1→TypeError,input() == 5sempre falso. int("3.5")→ValueError: per decimali usarefloat.- Lasciare spazi o righe vuote non gestite:
.strip()e controllo della stringa vuota.