11.1 Operatore ternario
In Python esiste il cosiddetto operatore ternario, che di fatto
rappresenta una forma modificata dell'operatore if
else
.
Supponiamo che tu abbia il seguente codice:
if a < b:
min = a
else:
min = b
Per non far occupare troppo spazio a un codice così semplice, è stata inventata una scrittura compatta. Avrà questo aspetto:
min = a if a < b else b
La forma generale dell'operatore ternario può essere descritta così:
variabile = valore1 if condizione else valore2
Se la condizione è vera, alla variabile viene assegnato il valore1, se è falsa — il valore2.
Nota che i due punti dopo la condizione qui non si mettono.
11.2 Operatore else nei cicli
In Python, l'operatore else
è spesso associato agli operatori
condizionali if
. Tuttavia, il suo utilizzo non è limitato
a questo, e else
può essere applicato anche nei cicli
for
e while
.
Questo aspetto non ovvio di else
nel contesto dei cicli può
confondere i principianti, ma apre interessanti possibilità per la gestione
del flusso di esecuzione del programma.
Come funziona else
nei cicli
Nei cicli, else
viene eseguito dopo la conclusione del ciclo, ma
solo se il ciclo si è concluso normalmente (cioè non è stato interrotto
dall'operatore break
). Questa caratteristica rende else
utile per scenari in cui occorre verificare se il ciclo sia stato interrotto
prematuramente.
Esempio di utilizzo nel ciclo for
:
for i in range(3):
password = input('Inserisci la password: ')
if password == 'segreto':
print('Password accettata.')
break
else:
print('Nessun tentativo di inserimento o tutte le password inserite sono errate.')
Qui else
scatta se l'utente ha inserito tre volte una password
errata. Se l'utente inserisce la password corretta, il ciclo viene interrotto
da break
, e il blocco else
non viene eseguito.
Esempio di utilizzo nel ciclo while
:
n = 5
while n > 0:
print(n)
n -= 1
else:
print('Il ciclo si è concluso normalmente.')
In questo caso, else
viene eseguito dopo che il ciclo si è
concluso in modo naturale, poiché la condizione è diventata falsa.
Significato pratico
L'utilizzo di else
nei cicli può essere particolarmente
utile negli algoritmi di ricerca, dove è necessario stabilire se la ricerca
sia stata coronata da successo. Ad esempio, nella ricerca di un elemento
in una lista che non esiste, si può utilizzare else
per
visualizzare un messaggio di fallimento dopo il termine del ciclo.
Utilizza else
nei cicli in modo chiaro e consistente, per non
confondere chi leggerà il tuo codice. Ricorda che else
nei
cicli non è sempre intuitivo, quindi è meglio aggiungere commenti o
scegliere altri modi di implementare la logica, se questo rende il codice
più comprensibile.
11.3 Cicli annidati
In Python è possibile scrivere logiche molto complesse in modo molto compatto. In alcuni casi avrai bisogno di if annidati, in altri — di cicli annidati. Ecco alcuni dettagli su come funzionano:
Un ciclo annidato significa avere un ciclo dentro un altro. Questo permette, ad esempio, di gestire array multidimensionali, liste di liste o altre strutture dati annidate.
I cicli annidati consistono in un ciclo esterno e uno o più cicli interni. Ogni volta che il ciclo esterno esegue un'iterazione, il ciclo interno è eseguito completamente:
for i in range(3): # Ciclo esterno
for j in range(3): # Ciclo interno
print(f"({i}, {j})")
Dal punto di vista del ciclo esterno, il ciclo interno e il suo contenuto sono solo un blocco di comandi che vengono eseguiti per ciascuna iterazione del ciclo esterno. Al ciclo esterno non importa cosa ci sia dentro, quanti cicli ci siano e così via. Esegue semplicemente il suo blocco interno di comandi ogni volta per la variabile dalla sua lista.
Diamo un'occhiata a come stampare una tabella di moltiplicazione
— i cicli annidati sono perfetti per questo compito. Creare una tabella di
moltiplicazione usando cicli annidati, dove un ciclo è responsabile del
moltiplicatore e l'altro del moltiplicando:
n = 5
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f"{i} * {j} = {i * j}", end='\t')
print() # Passaggio a una nuova riga per il prossimo moltiplicatore
Questo esempio stamperà la seguente tabella:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
Per comprendere meglio i cicli annidati, devi semplicemente praticare di più — questo è il modo più rapido per padroneggiare praticamente qualsiasi cosa non ovvia nella programmazione.
GO TO FULL VERSION