Le list comprehension sono ottime, ma esiste un'altra eccellente sintassi disponibile in Python per gestire le condizioni if-else su una sola riga. Immagina di voler assegnare un risultato di Excellent se il punteggio è maggiore o uguale a 50, e Average se è inferiore a 50. Questo può essere fatto in una sola riga:
if score >= 50:
result = 'Excellent'
else:
result = 'Average'
result = 'Excellent' if score >= 50 else 'Average'
Le condizioni su una sola riga sono particolarmente utili nelle list comprehension. Possono essere utilizzate per generare elementi di una lista in modo condizionale — avere un valore sotto una condizione e un altro sotto una condizione diversa. Lo stesso programma di valutazione può essere realizzato anche in una list comprehension:
scores = [...]
results = ['Excellent' if s >= 50 else 'Average' for s in scores]
print(results)
Ogni elemento in results sarà Excellent o Average a seconda del valore di s.
Nota che questo è diverso dal filtraggio in una list comprehension. Per il filtraggio, la condizione if appare dopo il ciclo for. Qui le istruzioni if ed else appaiono nella parte dell'elemento generato.
Sfida
Data una singola linea di punteggi d'esame, ti viene chiesto di dire se lo studente ha fallito o superato l'esame. Tutti i punteggi sono separati da uno spazio. Gli studenti falliscono l'esame se ottengono un punteggio inferiore a 40, e lo superano altrimenti.
L'input contiene una singola linea di punteggi separati da uno spazio.
Il programma dovrebbe stampare una singola linea dove, per ogni studente, dovrebbe stampare FAIL se lo studente ha fallito, e PASS se ha superato l'esame.
Cerca di implementare l'intero programma in una sola riga.