Eccoci qui per il quinto incontro. Oggi scopriremo come si eseguono operazioni ripetitive in Python.
Abbiamo due possibilità di eseguire operazioni ripetitive.
Per un preciso numero di volte oppure fino a che non si verifica una data condizione.
Prima possibilità: il FOR
L’istruzione FOR ci permette di eseguire un certo numero di iterazioni come segue
>>> for a in range(1, 10):
>>> print a
e otterremo come output
1
2
3
4
5
6
7
8
9
La funzione predefinita range prende due parametri, il valore iniziale e quello finale (in realtà si deve aumentare di uno il valore finale, capiremo tra breve perché) ed esegue un numero di iterazioni pari alla differenza tra i due (10-1 = 9) assegnando alla variabile “a” il valore conteggiato.
Ovviamente possiamo fare di meglio, ad esempio stampare solo i numeri dispari, con il seguente codice
>>> for a in range(1, 10, 2):
>>> print a
che stamperà
1
3
5
7
9
Il secondo parametro indica lo step, ovvero di quanto si deve incrementare il contatore.
Ora facciamo un giochino.
Chi è uso a risolvere le parole crociate conosce quelle definizioni tipo “Arteria senza pari”, dove si devono scrivere solo le lettere dispari della parola.
Vediamo come Python ci viene in aiuto:
>>> parola = “arteria”
>>> for a in range(0,len(parola),2):
>>> print parola[a]
a
t
r
a
la funzione len() ci torna la lunghezza della stringa che gli passiamo.
Quindi range con parametri 0, len(parola) e 2 ci permette di avere gli indici (posizioni delle lettere) dispari.
L’istruzione print parola[a] stampa la lettera che ha indice a.
Come dire se avessimo scritto
>>> print parola[3]
avremmo ottenuto come output
r
che è la lettera nella quarta posizione (tenete conto che gli indici in Python iniziano sempre da 0).
In seguito vedremo come possiamo ritagliare solo una parte (substring o sottostringa) da una stringa, ma per ora ci basta l’indice.
Abbiamo visto quindi come fare un ciclo con un numero di iterazioni predefinito. Che sia con un valore fisso o con la lunghezza di una stringa, sempre un preciso numero di iterazioni avranno luogo.
Abbiamo pero’ la possibilita’ di eseguire un numero di iterazioni indefinite che terminano al verificarsi di una determinata condizione. Un poco come se iniziassimo un loop infinito (ciclo senza un valore limite maggiore) e ne uscissimo se una istruzione if <condizione>: si verifica.
Che poi si potrebbe fare con le istruzioni:
>>> from random import randint
>>> for x in iter(int, 1):
>>> print x
>>> if randint(1,9) == 3:
>>> break
stamperà 0 per un numero indefinito di volte.
Rieseguite le istruzioni più volte, al limite racchiudendole in una funzione con codice come il seguente:
>>> from random import randint
>>> def funzione():
>>> for x in iter(int, 1):
>>> print x
>>> if randint(1,9) == 3:
>>> break
>>> funzione()
Chiamando più volte funzione() non dovrete digitare tutte le volte il gruppo di istruzioni.
L’istruzione from random import randint importa dal package random la funzione randint.
randint con due parametri (i due estremi) genera un numero intero casuale tra i due estremi.
Quando il numero generato è uguale a 3 l’istruzione break interrompe il ciclo.
Però fare le cose cosi’ non è molto comodo. Facciamo pertanto conoscenza con l’istruzione while.
Seconda possibilità: il WHILE
>>> from random import randint
>>> while randint(1,9) != 3:
>>> print “ciao”
stamperà ciao un numero variabile di volte, in base a quando verrà generato il numero 3 da randint.
Ovviamente se allargassimo da 9 a 90 o a 900 il limite le probabilita’ che il ciclo termini diminuiranno in maniera proporzionale.
Abbiamo visto quindi come con while fino a che non si verifica la condizione abbiamo un ciclo.
Qui la condizione la impostiamo dall’istruzione.
Un ciclo infinito con while possiamo averlo con
>>> while 1 == 1:
>>> print “ciao”
Arrivederci alla prossima settimana.
Altre letture utili:
Programmare con Python. Guida completa
Python
Programmare in Python
…ottimo lavoro queste lezioni su Pyton, spero ne seguiranno delle altre a queste cinque o, se già esistono come poterle avere ? .