Guida a Python - Corso base - Capitolo 10: controllo del flusso: cicli for e while. Break, continue, pass.
Capitolo 10: Controllo del flusso: cicli for e while. Le istruzioni break, continue, pass.
Il costrutto for ci consente di effettuare dei CICLI, ossia di ripetere un insieme di istruzioni per un certo numero di volte.
La sintassi è:
for [indice] in [sequenza]:
# istruzioni (attenzione all'indentazione !
Attenzione ai : (due punti) alla fine della dichiarazione del for.
Nella sua forma base, for viene creato mediante il costrutto range, disponibile in tre versioni:
Esegue il ciclo n-volte. Il valore di [indice], ad ogni iterazione, sarà pari al valore di n. Il valore iniziale di n sarà 0.
Esempio:
>>> for n in range(4): print n 0 1 2 3
Esegue il ciclo (fine-inizio)-volte. Ad ogni iterazione, il valore di n sarà pari a (inizio + numeroIterazione).
Esempio:
>>> for n in range(3, 6): print n 3 4 5
- range(inizio, fine, passo);
Esegue il ciclo ((fine-inizio) / passo)-volte. Il valore di n varierà da inizio a fine con incremento pari a passo (appunto...) ad ogni iterazione.
Esempio:
>>> for n in range(10, 2, -1): print n 10 9 8 7 6 5 4 3
E' possibile comunque generare un for "scorrendo" un qualsiasi dato iterabile; in questo caso, la sintassi sarà :
for [indice] in [oggetto iterabile]:
# istruzioni (attenzione all'indentazione !
Esempio:
>>> for lettera in "stringa": print lettera s t r i n g a >>>
Il costrutto for ci offre, inoltre, l'interessante possibilità di scorrere contemporaneamente più oggetti iterabili, depositando i valori correnti di ciascun oggetto ad ogni passo in un indice differente; per usufruire di tale opzione, dovremo utilizzare il costrutto zip, come mostrato nella regola della sintassi e nell'esempio:
for indice1, indice2, ..., indiceN in zip(iterabile1, iterabile2, ..., iterabileN):
# Corpo istruzioni, attenzione all'indentazione
Esempio:
>>> lista1 = [1, 2, 3] >>> lista2 = ["Ciao", "come", "stai"] >>> lista3 = [True, False, None] >>> for indice1, indice2, indice3 in zip(lista1, lista2, lista3): print indice1, indice2, indice3 1 Ciao True 2 come False 3 stai None >>>
Il costrutto while, invece, effettua le operazioni specificate fintantochè si verifica una condizione; sintassi:
while condizione:
[operazioni]
Attenzione, quindi, al segno : (due punti) posto subito dopo la condizione da verificare e all'indentazione che identifica il corpo del metodo.
NOTA --- Ricordarsi che il while, a differenza del for, non raggiungerà mai la sua condizione di terminazione se non verrà specificato, in qualche modo, di incrementare un contatore o terminare in base a qualche altro evento ! Spetta al programmatore occuparsi di tale aspetto !
Esempio:
>>> x = 0 >>> while x<10: print x x = x+1 0 1 2 3 4 5 6 7 8 9 >>>
Esistono delle istruzioni particolari che permettono, comunque, di "forzare" il flusso del programma nei cicli o di "tenere occupato" il corpo di un blocco if, for o while, ad esempio quando ancora dobbiamo determinare per bene il contenuto di questi blocchi ma, intanto, vogliamo "tenere il posto":
L'istruzione break ci consente di terminare bruscamente un ciclo; ad esempio, si è verificata una condizione (non quella di terminazione del ciclo, ma un'altra; ad esempio, il ciclo era un ciclo di attesa e, nel frattempo, è arrivato un messaggio dalla rete, ecc...).
Per terminare il ciclo, sarà sufficiente scrivere, come corpo dell'istruzione di verifica:
break
Ad esempio:
>>> c = 0 >>> for c in range(0,10): print c if (c*2>6): break 0 1 2 3 4 >>>
L'istruzione continue indica a Python di passare direttamente all'iterazione successiva di un ciclo (while o for) senza eseguire le altre istruzioni presenti nel corpo del blocco poste dopo continue (utile, ad esempio, se durante l'esecuzione del ciclo si verifica una condizione e certe istruzioni del ciclo non devono essere eseguite, mentre altre sì, e comunque è necessario effettuare altre iterazioni); in tal caso, sarà sufficiente scrivere:
continue
Pass non fa assolutamente nulla, ma permette di riempire il blocco delle istruzioni di if, for o while, ad esempio perchè non sappiamo ancora cosa metterci (se stiamo lavorando in un team e siamo in attesa della definizione di un modulo da utilizzare nel corpo di un while, intanto scriviamo il while con il pass, poi lo sostituiremo); es.:
while(condizione):
pass
|