Assegnazione e confronto
Come potete avere già scoperto è possibile assegnare più valori ad una stessa variabile, con la variabile che assume sempre l’ultimo valore assegnato:
Numero = 5 print Numero, Numero = 7 print Numero
La stampa di questo programma è 5 7, perch ́e la prima volta che Numero è stampato il suo valore è 5, la seconda 7. La virgola dopo la prima istruzione print evita il ritorno a capo dopo la stampa così che entrambi i valori appaiono sulla stessa riga.
Questo è il diagramma di stato per quest’assegnazione:
Nel caso di assegnazioni ripetute è particolarmente importante distinguere tra operazioni di assegnazione e controlli di uguaglianza. Python usa (=) per l’assegnazione e si potrebbe essere tentati di interpretare l’istruzione a = b come un controllo di equivalenza, ma non lo `e!
In primo luogo l’equivalenza è commutativa mentre l’assegnazione non lo è: in matematica se a = 7 allora 7 = a; in Python l’istruzione a=7 è legale mentre 7=a produce un errore di sintassi.
Inoltre in matematica un’uguaglianza `e sempre vera: se a = b, a sarà sempre uguale a b. In Python un’assegnazione può rendere due variabili uguali ma raramente l’uguaglianza sarà mantenuta a lungo:
a=5 b = a a = 3
# a e b sono uguali # ora a e b sono diversi
La terza riga cambia il valore di a ma non cambia il valore di b. In qualche linguaggio di programmazione sono usati simboli diversi per l’assegnazione, tipo <- o :=, per evitare ogni malinteso.
L’istruzione while
I computer sono spesso usati per automatizzare compiti ripetitivi: il noiosissimo compito di ripetere operazioni identiche o simili un gran numero di volte senza fare errori è qualcosa che riesce bene ai computer.
Dato che l’iterazione è così comune, Python fornisce vari sistemi per renderla più semplice da implementare. Il primo sistema è l’istruzione while.
Ad esempio il programma ContoAllaRovescia viene scritto usando l’istruzione while:
def ContoAllaRovescia(n): while n > 0: print n n=n-1 print "Partenza!"
La chiamata ricorsiva è stata rimossa e quindi questa funzione ora non è più ricorsiva.
Puoi leggere il programma con l’istruzione while come fosse scritto in un linguaggio naturale: “Finchè (while) n è più grande di 0 stampa il valore di n e poi diminuiscilo di 1. Quando arrivi a 0 stampa la stringa Partenza!”.
In modo piu` formale ecco il flusso di esecuzione di un’istruzione while:
- Valuta la condizione controllando se essa è vera (1) o falsa (0).
- Se la condizione è falsa esci dal ciclo while e continua l’esecuzione dalla prima istruzione che lo segue.
- Se la condizione è vera esegui tutte le istruzioni nel corpo del while e torna al passo 1.
Il corpo del ciclo while consiste di tutte le istruzioni che seguono l’intestazione e che hanno la stessa indentazione.
Questo tipo di flusso è chiamato ciclo o loop. Nota che se la condizione è falsa al primo controllo, le istruzioni del corpo non sono mai eseguite.
Il corpo del ciclo dovrebbe cambiare il valore di una o piu` variabili cos`ı che la condizione possa prima o poi diventare falsa e far cos`ı terminare il ciclo. In caso contrario il ciclo si ripeterebbe all’infinito, determinando un ciclo infinito.