Input e output da console
In questa pagina 5
In questa pagina 5
Flussi standard
Ogni programma ha tre flussi aperti dal sistema operativo:
Definizione (flussi standard)
Flusso Python C Di default standard input sys.stdinstdintastiera standard output sys.stdoutstdoutschermo standard error sys.stderrstderrschermo
Esempio. print("errore!", file=sys.stderr) scrive su stderr: con python prog.py > out.txt il messaggio resta sullo schermo e non finisce in out.txt.
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
Definizione (input).
input(prompt)stampa il prompt, legge una riga fino all'invio e la restituisce senza il carattere di a capo, sempre comestr.
Esempio. Se l'utente scrive 42, input("Quanti? ") restituisce la stringa '42' e int(input("Quanti? ")) restituisce l'intero 42.
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
Definizione (print).
print(*oggetti, sep=" ", end="\n", file=sys.stdout)converte ogni oggetto constr(), li separa consepe termina conend.
Esempio. print(1, 2, 3, sep=", ") stampa 1, 2, 3 e print("a", "b", "c", sep="") stampa abc.
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.
Versione ripasso
Flussi standard
| Flusso | Python | C | Di default |
|---|---|---|---|
| standard input | sys.stdin |
stdin |
tastiera |
| standard output | sys.stdout |
stdout |
schermo |
| standard error | sys.stderr |
stderr |
schermo |
Reindirizzamento: python prog.py < dati.txt > risultati.txt.
Lettura: input
input(prompt) legge una riga e restituisce sempre str (senza a capo).
n = int(input("Quanti? ")) # conversione esplicita
a, b = map(int, input().split()) # map applica int a ogni pezzo
valori = [int(t) for t in input().split()] # numero qualunque di interiLeggere fino a fine input:
import sys
for riga in sys.stdin:
riga = riga.rstrip("\n")Scrittura: print
print(*oggetti, sep=" ", end="\n", file=sys.stdout)
print("a", "b", "c", sep="") # abc
print("senza a capo", end="")
print("errore!", file=sys.stderr) # messaggi di errore su stderr
print(*[1, 2, 3]) # spacchetta la listaFormattazione con 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}").
Input non valido
Combinazione di Ciclo whileCiclo while, cicli controllati da contatore, da sentinella e da condizione; break, continue, else; terminazione e invariante di ciclo.Ciclo while → e 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
- Dimenticare di convertire
input()(input() + 1dàTypeError). int("3.5")dàValueError(usarefloat).