Che cosa sono le istruzioni 'else' ed 'elif'?

Completato

Cosa accade se si vuole anche che il programma esegua una parte di codice quando l'espressione di test è False? Oppure cosa accade se si vuole includere un'altra espressione di test? Python include altre parole chiave che è possibile usare per rendere più complesse le istruzioni if, else e elif. Quando si usano if, else e elif in combinazione, è possibile scrivere programmi complessi con più espressioni di test e istruzioni da eseguire.

Utilizzare else

Si sa che quando si usa un'istruzione if, il corpo del programma verrà eseguito solo se l'espressione di test è True. Per aggiungere altro codice che verrà eseguito quando l'espressione di test è False, è necessario aggiungere un'istruzione else.

È possibile adattare un esempio dalla sezione precedente:

a = 27
b = 93
if a >= b:
    print(a)

In questo esempio, se a non è maggiore o uguale a b, non viene eseguita alcuna operazione. Si supponga invece di voler stampare b se l'espressione di test è False:

a = 27
b = 93
if a >= b:
    print(a)
else:
    print(b)

Output: 93

Se l'espressione di test è False, il codice nel corpo dell'istruzione if viene ignorato e il programma continua l'esecuzione dall'istruzione else. La sintassi di un'istruzione if/else è sempre:

if test_expression:
    # statement(s) to be run
else:
    # statement(s) to be run

Utilizzare elif

In Python la parola chiave elif è l'abbreviazione di else if. L'uso delle istruzioni elif consente di aggiungere più espressioni di test al programma. Queste istruzioni vengono eseguite nell'ordine in cui vengono scritte, quindi il programma immetterà un'istruzione elif solo se la prima istruzione if è False. Ad esempio:

a = 27
b = 93
if a <= b:
    print("a is less than or equal to b")
elif a == b:
    print("a is equal to b")

Output: a is less than or equal to b

In questa variazione l'istruzione elif nel blocco di codice non verrà eseguita perché l'istruzione if è True.

La sintassi di un'istruzione if/elif è:

if test_expression:
    # statement(s) to be run
elif test_expression:
    # statement(s) to be run

Combinare le istruzioni if, elif e else

È possibile combinare le istruzioni if, elif e else per creare programmi con una logica condizionale complessa. Tenere presente che un'istruzione elif viene eseguita solo quando la condizione if è false. Si noti anche che un blocco if può avere un solo blocco else, ma può avere più blocchi elif.

Verrà ora esaminato un esempio con un'istruzione if, elif e else:

a = 27
b = 93
if a < b:
    print("a is less than b")
elif a > b:
    print("a is greater than b")
else: 
    print ("a is equal to b")    

Un blocco di codice che usa tutti e tre i tipi di istruzioni ha la sintassi seguente:

if test_expression:
    # statement(s) to be run
elif test_expression:
    # statement(s) to be run
elif test_expression:
    # statement(s) to be run
else:
    # statement(s) to be run

Usare la logica condizionale annidata

Python supporta anche la logica condizionale annidata, ovvero è possibile annidare le istruzioni if, elif e else per creare programmi ancora più complessi. Per annidare le condizioni, impostare un rientro nelle condizioni interne e tutti gli elementi che si trovano allo stesso livello di rientro verranno eseguiti nello stesso blocco di codice:

a = 16
b = 25
c = 27
if a > b:
    if b > c:
        print ("a is greater than b and b is greater than c")
    else: 
        print ("a is greater than b and less than c")
elif a == b:
    print ("a is equal to b")
else:
    print ("a is less than b")

Questo frammento di codice produce l'output a is less than b.

La logica condizionale annidata segue le stesse regole della logica condizionale normale all'interno di ogni blocco di codice. Di seguito è riportato un esempio della sintassi:

if test_expression:
    # statement(s) to be run
    if test_expression:
        # statement(s) to be run
    else: 
        # statement(s) to be run
elif test_expression:
    # statement(s) to be run
    if test_expression:
        # statement(s) to be run
    else: 
        # statement(s) to be run
else:
    # statement(s) to be run