Lezione 6 Python Iterazione

      Nessun commento su Lezione 6 Python Iterazione

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

page78image2008
# 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:

  1. Valuta la condizione controllando se essa è vera (1) o falsa (0).
  2. Se la condizione è falsa esci dal ciclo while e continua l’esecuzione dalla prima istruzione che lo segue.
  3. 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.