HOWTO · Python

Come leggere l'input dell'utente come interi in Python

Leggi l'input dell'utente come numeri interi in Python 3: converti un singolo valore con int(input()), leggi più numeri interi da una sola riga con split() e map() e gestisci l'input non valido con try-except.

In questa pagina

In Python 3, la funzione input() restituisce sempre una stringa. Per usare il valore inserito come numero, converti quella stringa con int(). Questo articolo mostra come leggere un singolo numero intero, come gestire un input che non è un numero intero valido e come leggere più numeri interi da una sola riga.

Questo articolo tratta Python 3. Python 2 utilizzava raw_input() per lo stesso scopo ed è giunto a fine vita nel 2020, quindi gli esempi seguenti usano input() in tutto il testo.

Leggere un numero intero con int(input())

Leggi prima l’input come stringa, poi convertilo:

user_input = input("Please enter an integer: ")
integer_value = int(user_input)

print("You entered:", integer_value)
print(type(integer_value))

Output:

Please enter an integer: 42
You entered: 42
<class 'int'>

La conversione e la lettura vengono spesso combinate in un’unica riga, che si comporta esattamente allo stesso modo:

integer_value = int(input("Please enter an integer: "))

Se l’utente inserisce qualcosa che non è un numero intero, come hello o 3.5, int() solleva un ValueError e il programma si interrompe. La sezione seguente mostra come gestire questo caso.

Gestire l’input non valido con try-except

Avvolgi la conversione in un blocco try-except per intercettare il ValueError e chiedere di nuovo invece di terminare con un errore:

while True:
    user_input = input("Please enter an integer: ")
    try:
        integer_value = int(user_input)
        print("You entered:", integer_value)
        break
    except ValueError:
        print("That's not a valid integer. Please try again.")

Il ciclo continua a chiedere finché la conversione non riesce. Solo allora break termina il ciclo.

Output:

Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10

Convalidare l’input in questo modo è una buona pratica per i programmi interattivi: un errore di battitura dovrebbe costare all’utente solo una richiesta in più, non l’intera esecuzione.

Leggere più numeri interi da una sola riga

Quando un programma ha bisogno di più numeri contemporaneamente, lascia che l’utente li digiti su una sola riga separati da spazi. split() divide la riga in parti sotto forma di stringhe e map() converte ogni parte con int():

numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))

print(numbers)
print("Sum:", sum(numbers))

Output:

Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108

Anche una list comprehension svolge lo stesso compito ed è altrettanto comune:

numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]

Se ti serve un numero fisso di valori, spacchetta direttamente il risultato. Qui l’utente deve inserire esattamente due numeri interi:

a, b = map(int, input("Enter two numbers: ").split())

print("a =", a)
print("b =", b)

Output:

Enter two numbers: 3 17
a = 3
b = 17

Inserire più o meno valori del previsto solleva un ValueError, quindi combina questo schema con il ciclo try-except della sezione precedente quando il conteggio è importante.

Cosa accetta int() e cosa rifiuta

int() è più tollerante di quanto molti si aspettino. Ignora gli spazi bianchi iniziali e finali, accetta un segno + o - facoltativo e consente i caratteri di sottolineatura tra le cifre:

print(int(" 42 "))
print(int("+7"))
print(int("1_000"))

Output:

42
7
1000

Rifiuta tutto ciò che non è un letterale di numero intero in forma di stringa, inclusi "3.5", "12a" e la stringa vuota "" — tutti questi casi sollevano ValueError. Se l’input può contenere valori decimali, converti invece con float(), oppure usa int(float(text)) quando è accettabile scartare la parte frazionaria.

Conclusione

Leggere numeri interi in Python 3 si riduce a un unico schema: input() fornisce una stringa e int() la trasforma in un numero intero. Usa un ciclo try-except in modo che le voci non valide vengano richieste di nuovo invece di far terminare il programma con un errore, e ricorri a split() con map() o a una list comprehension quando ti servono più numeri interi da una sola riga.

FAQ

  1. Come leggo l’input dell’utente come numero intero in Python 3?
    Usa int(input()): input() legge una riga come stringa e int() la converte in un numero intero.

  2. Come leggo più numeri interi da una sola riga?
    Dividi la riga e converti ogni parte, ad esempio list(map(int, input().split())) o [int(x) for x in input().split()].

  3. Cosa succede se l’utente inserisce un valore non intero?
    int() solleva un ValueError. Intercettalo con un blocco try-except e chiedi di nuovo.

  4. Perché non posso fare operazioni aritmetiche direttamente sul risultato di input()?
    Perché input() restituisce una stringa, non un numero. Sommare una stringa e un numero intero solleva un TypeError finché non converti la stringa con int().

  5. Qual è la differenza tra Python 2 e Python 3 nella lettura dell’input?
    Python 2 leggeva l’input di testo con raw_input(), mentre Python 3 usa input(). La conversione con int() funziona allo stesso modo in entrambi, ma Python 2 non è più mantenuto, quindi il codice nuovo dovrebbe usare Python 3.