Il ciclo for
I cicli ci permettono di eseguire una serie di istruzioni in maniera ciclica.
Un’esempio classico di ciclo è il ciclo for, utilizzato da molti linguaggi di programmazione, Python incluso.
Utilizziamolo per stampare una serie di numeri:
n = input(“Fino a che numero vuoi stampare ? “)
n = int(n)
for i in range(0,n):
print(i)
Output:
Fino a che numero vuoi stampare ? 10
0
1
2
3
4
5
6
7
8
9
La funzione range
La funzione range ritorna una sequenza di numeri, in questo caso che va da 0 a n, dove n è la variabile definita da noi con la funzione input e ad ogni iterazione del ciclo la variabile i verrà incrementata di uno e otterrà il valore dell’i-esimo numero della sequenza, fino al valore n.
Passando un’unico valore come input della funzione range, questa farà partire la sequenza dal valore di default zero.
ATTENZIONE!!
Abbiamo lasciato 4 spazi prima dell’istruzione all’interno del ciclo for, questi spazi sono conosciuti come indentazione e permettono all’interprete Python di comprendere il contesto delle istruzioni (ad esempio nel nostro codice permettono di comprendere quali istruzioni devono essere eseguite all’interno del ciclo for).
Diversi linguaggi di programmazione, come C/C++, Java e Javascript, utilizzano le parentesi graffe per identificare il contesto delle istruzioni, Python piuttosto forza ad usare l’indentazione per migliorare la leggibilità del codice (e lo fa benissimo !). I 4 caratteri per l’indentazione sono uno standard proposto nel PEP 8, in realtà è anche possibile utilizzare un numero differente di spazi (purché sia consistente in tutto il codice) oppure lo shift. Un blocco di codice indentato viene sempre introdotto da (:) alla fine della riga precedente.
Se non indentiamo l’istruzione sotto il ciclo for otterremo un’eccezione di tipo:
IndentationError.
for i in range(0,10):
print(i)
Output:
File “<ipython-input-44-f5a262fe7a2d>”, line 2
print(i)
^
IndentationError: expected an indented block
Implementiamo un ciclo for per il calcolo della successione di Fibonacci fino ad un indice definito da noi. Se non conosci la successione di Fibonacci, ogni elemento della sequenza è la somma dei due valori precedenti, per approfondire dai uno sguardo qui sotto:
#n = input("Quanti numeri di Fibonacci vuoi stampare? ")
#n = int(n)
#Possiamo sintetizzare le due istruzioni sopra in un unico comando
n = int(input("Quanti numeri di Fibonacci vuoi stampare? "))
fib_num = 0
next_fib_num = 1
for i in range(n):
#Salviamo il valore successivo in una variabile temporanea
tmp = next_fib_num
#Otteniamo il nuovo valore successivo sommando quello corrente
next_fib_num+=fib_num
#Assegnamo il valore successivo della successione a quello corrente
fib_num = tmp
print("%d° numero di Fibonacci = %d" % (i+1, fib_num))
Output:
Quanti numeri di Fibonacci vuoi stampare? 10
1° numero di Fibonacci = 1
2° numero di Fibonacci = 1
3° numero di Fibonacci = 2
4° numero di Fibonacci = 3
5° numero di Fibonacci = 5
6° numero di Fibonacci = 8
7° numero di Fibonacci = 13
8° numero di Fibonacci = 21
9° numero di Fibonacci = 34
10° numero di Fibonacci = 55
swapping
Come vedi ci siamo ritrovati a dover immagazzinare il valore del numero successivo in una variabile temporanea, questa è necessaria ogni volta che c’è da invertire il valore di due variabili (questa procedura è chiamata swapping).
a = "cane"
b = "gatto"
print("a=%s b=%s" % (a,b))
tmp = a
a = b
b = tmp
print("a=%s b=%s" % (a,b))
Output:
a=cane b=gatto
a=gatto b=cane
Python ci mette a disposizione una tecnica per eseguire lo swapping senza dover utilizzare una terza variabile, ma semplicemente eseguendo l’assegnazione in simultanea separando i valori con una virgola.
a = “cane”
b = “gatto”print(“a=%s b=%s” % (a,b))
a,b = b,a
print(“a=%s b=%s” % (a,b))
Output:
a=cane b=gatto
a=gatto b=cane
Alla luce di ciò, modifichiamo il nostro algoritmo per il calcolo della successione di Fibonacci:
n = int(input("Quanti numeri di Fibonacci vuoi stampare? "))
fib_num = 0
next_fib_num = 1
for i in range(n):
fib_num, next_fib_num = next_fib_num, next_fib_num+fib_num
print("%d° numero di Fibonacci = %d" % (i+1, fib_num))
Output:
Quanti numeri di Fibonacci vuoi stampare? 10
1° numero di Fibonacci = 1
2° numero di Fibonacci = 1
3° numero di Fibonacci = 2
4° numero di Fibonacci = 3
5° numero di Fibonacci = 5
6° numero di Fibonacci = 8
7° numero di Fibonacci = 13
8° numero di Fibonacci = 21
9° numero di Fibonacci = 34
10° numero di Fibonacci = 55
Decisamente meglio !
Possiamo utilizzare un ciclo for per iterare sugli elementi di una lista, potresti pensare che il modo per farlo possa essere questo:
shopping_list = ["tofu", "latte di soia", "riso basmati","yogurt greco"]
print("La mia lista della spesa:")
for i in range(len(shopping_list)):
print("%d) %s" % (i+1,shopping_list[i]))
Output:
La mia lista della spesa:
1) tofu
2) latte di soia
3) riso basmati
4) yogurt greco
e funziona, ma in realtà esiste un metodo migliore per stampare la nostra lista della spesa, possiamo iterare direttamente sugli elementi della lista.
shopping_list = ["tofu", "latte di soia", "riso basmati","yogurt greco"]
print("La mia lista della spesa:")
for entry in shopping_list:
print("-"+entry)
Output:
La mia lista della spesa:
-tofu
-latte di soia
-riso basmati
-yogurt greco
NOTA BENE
entry è sempre una variabile il cui nome viene definito da noi, che conterrà ad ogni iterazione il successivo elemento della lista.
Funzione enumerate
Come vedi adesso abbiamo stampato gli elementi della nostra lista della spesa in maniera decisamente più intuitiva, ma non abbiamo più l’indice i. Qualora ci servisse sia l’elemento che l’indice, possiamo utilizzare la funzione enumerate, che ci permette di iterare su entrambi.
shopping_list = ["tofu", "latte di soia", "riso basmati","yogurt greco"]
print("La mia lista della spesa:")
for i,entry in enumerate(shopping_list):
print("%d) %s" % (i+1, entry))
Output:
La mia lista della spesa:
1) tofu
2) latte di soia
3) riso basmati
4) yogurt greco
Python: Gli input e gli output
Python: le variabili
(594)
Altri articoli nella categoria "Lezioni di Informatica"
- Break-Even Point nel Franchising: Calcolo Avanzato, Automazione e Royalty (con Modelli in Python)
- Regressione lineare: esercizi progressivi dai minimi quadrati alla regressione multipla
- Microeconomia applicata: choke price, domanda esponenziale, segmentazione e prezzo ottimale – Parte 2
- Microeconomia applicata: choke price, prezzo di riserva massimo e prezzo ottimale
- Quanti Centri Ha una Figura Geometrica? Dal Baricentro al Pentagramma
- Microeconomia Computazionale: Come la Domanda di Mercato Emerge dai Comportamenti Individuali
- Legge di Benford e Data Quality nel Marketing: Guida, Formule ed Esercizi Python
- Microeconomia dell’AI: 6 esercizi matematici su costi, pricing, domanda ed elasticità
- Equazioni trascendenti: come risolverle con Python, dal punto fisso a Newton e Brent
- Equazioni Omogenee Esponenziali: Guida Pratica con Esercizi Svolti e Applicazioni