Raccogliere l'input

Completato

Finora sono stati appresi vari costrutti del linguaggio di programmazione Python. Sono stati anche creati alcuni programmi. Tuttavia, i programmi operano sui dati e i dati provengono da qualche parte. In questa unità si esaminerà in modo più approfondito come è possibile raccogliere input dalla riga di comando e dall'input dell'utente.

Input della riga di comando

Quando si avvia un programma usando python3, si assegna il nome del file da avviare. È anche possibile assegnare un set di argomenti: i dati a cui il programma avrà accesso durante l'esecuzione. Ecco come può apparire:

python3 backup.py 2023-01-01

Nel codice precedente la stringa "2023-01-01" può essere usata come istruzione per il programma backup.py per avviare un backup da tale data. Usando gli argomenti della riga di comando si ottiene flessibilità. Il programma può comportarsi in modo diverso a seconda del relativo input esterno.

Argomenti della riga di comando

Come vengono acquisiti questi comandi sul lato di codifica delle cose? Usando il modulo sys è possibile recuperare gli argomenti della riga di comando e usarli nel programma. Esaminare il codice seguente:

import sys

print(sys.argv)
print(sys.argv[0]) # program name
print(sys.argv[1]) # first arg

sys.argv è una matrice o una struttura di dati che contiene molti elementi. La prima posizione, indicata come 0 nella matrice, contiene il nome del programma. La seconda posizione, 1, contiene il primo argomento. Si presuppone che il programma backup.py contenga il codice di esempio e si procede all'esecuzione nel modo seguente:

python3 backup.py 2023-01-01

Il programma restituisce quindi il risultato seguente:

['backup.py', '2023-01-01'] 
backup.py
2023-01-01

Input utente

Un altro modo per passare i dati al programma è chiedere all'utente di immetterli. È possibile codificarlo in modo che il programma indichi all'utente di immettere informazioni. Si salvano i dati immessi nel programma e quindi si agisce su di essi.

Per acquisire informazioni dall'utente, si userà la funzione input(). Ecco un esempio:

print("Welcome to the greeter program")
name = input("Enter your name: ")
print("Greetings " + name)

Si presuppone che il programma input.py contenga il codice di esempio e si procede all'esecuzione nel modo seguente:

python3 input.py

L'esecuzione del programma invita a immettere il nome, ad esempio:

Welcome to the greeter program
Enter your name: 

Dopo l'immissione di un valore e la selezione di INVIO, viene restituito il saluto:

Welcome to the greeter program
Enter your name: Picard
Greetings Picard

Uso dei numeri

La funzione input() archivia un risultato come stringa, pertanto il codice seguente potrebbe non eseguire ciò che si vuole:

print("calculator program")
first_number = input("first number: ")
second_number = input("second number: ")
print(first_number + second_number)

L'esecuzione di questo programma invita l'utente a inserire il primo numero, ad esempio 3:

calculator program
first number: 3

Dopo la selezione di INVIO, è possibile immettere il secondo numero, ad esempio 4:

calculator program
first number: 3
second number: 4

Se si preme INVIO, si ottiene il risultato seguente:

calculator program
first number: 3
second number: 4
34

Probabilmente si intendeva che questo programma rispondesse con 7 invece di 34. Dunque, che cosa non ha funzionato?

La spiegazione è che first_number e second_number sono stringhe. Per il corretto funzionamento del calcolo, è necessario modificare tali stringhe in numeri usando la funzione int(). Modificando l'ultima riga del programma perché usi int(), è possibile risolvere il problema:

print(int(first_number) + int(second_number))

Se si esegue di nuovo il programma con gli stessi valori, viene ora restituito 7 come risposta:

calculator program
first number: 3
second number: 4
7