Subsections

4. Conta da 1 a 10

4.1 Cicli While

Ecco qui finalmente la nostra prima struttura di controllo. Solitamente il computer legge il nostro programma cominciando dalla prima linea per poi scendere da lì fino alla fine del codice. Le strutture di controllo influiscono sul programma cambiando l'ordine d'esecuzione dei comandi o decidendo se un determinato comando verrà eseguito o meno. A voi il sorgente di un primo esempio che utilizza la struttura di controllo while:

a = 0
while a < 10:
        a = a + 1
        print a

Quindi il risultato dell'esecuzione:

1
2
3
4
5
6
7
8
9
10
Cosa fa il programma? Prima di tutto vede la linea a = 0 e assegna il valore zero alla variabile numerica a. Dopodiché vede il comando while a < 10: che ordina a Python di controllare se la variabile a è minore di 10, in questo caso a corrisponde al valore zero quindi è minore di 10, per questo motivo Python eseguirà tutte le istruzioni rientrate sotto la struttura while. In poche parole finché la variabile numerica a è minore di dieci Python esegue tutte le istruzioni tabulate sotto while.

Ecco un'altro esempio dell'uso di while:

a = 1
s = 0
print 'Enter Numbers to add to the sum.'
print 'Enter 0 to quit.'
while a != 0 :
        print 'Current Sum:',s
        a = input('Number? ')
        s = s + a
print 'Total Sum =',s

Appena eseguito questo script l'output è stato questo:

  File "sum.py", line 3
    while a != 0 
                ^
SyntaxError: invalid syntax
Ho dimenticato il : dopo il while. Python avverte dell'errore e mostra all'utente dov'è il problema, segnando la linea di codice incriminata con un utile ^. Dopo aver risolto il problema il programma funziona a meraviglia ed ecco finalmente il risultato:
Enter Numbers to add to the sum.
Enter 0 to quit.
Current Sum: 0
Number? 200
Current Sum: 200
Number? -15.25
Current Sum: 184.75
Number? -151.85
Current Sum: 32.9
Number? 10.00
Current Sum: 42.9
Number? 0
Total Sum = 42.9

Come puoi vedere print 'Total Sum =',s è eseguito solamente alla fine. Questo perché la struttura di controllo while influisce solamente sulle istruzioni tabulate (rientrate, indentate). Il simbolo != significa diverso: while a != 0 : finché a è diverso da zero, vengono eseguite le istruzioni tabulate sotto il while.

Ora che abbiamo capito il ciclo while, possiamo programmare uno script che venga eseguito all'infinito. Una via molto facile per farlo è, ad esempio, questa:

while 1 == 1:
     print "Help, I'm stuck in a loop."

L'output di questo programma sarà una continua ripetizione della frase Help, I'm stuck in a loop. all'infinito, a meno che non lo fermiate premendo i tasti Control (o 'Ctrl') e 'c' (la lettera) contemporaneamente. Questo manderà un segnale di terminazione al programma (Nota: Talvolta è necessario premere anche enter dopo il Control-c).

4.2 Esempi

Fibonacci.py

# Questo programma calcola la sequenza di Fibonacci.
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
    count = count + 1
    # Occorre tenere traccia finché ci sono cambiamenti
    old_a = a
    old_b = b
    a = old_b
    b = old_a + old_b
    # Attenzione che la virgola alla fine di un istruzione print 
    # prosegue la stampa sulla stessa linea.
    print old_a,
print

Output:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Password.py

# Attende sino a quando non viene inserita la giusta password. 
# Usate Control-C per fermare il programma senza password.

# Notate che se non viene inserita la giusta password, il ciclo 
# while prosegue all'infinito.
password = "foobar"

# Notate il simbolo != (diverso).
while password != "unicorn":
    password = raw_input("Password:")
print "Welcome in"

Esecuzione:

Password:auo
Password:y22
Password:password
Password:open sesame
Password:unicorn
Welcome in