Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Istruzioni Condizionali

Cosa sono, a cosa servono e come si utilizzano le istruzioni condizionali if-elif-else quando si programma in linguaggio Python.
Cosa sono, a cosa servono e come si utilizzano le istruzioni condizionali if-elif-else quando si programma in linguaggio Python.
Link copiato negli appunti

In questa lezione vedremo come implementare istruzioni condizionali in Python usando il costrutto if-elif-else. Le istruzioni condizionali vengono utilizzate quando vogliamo eseguire un blocco di codice solo nel caso in cui una condizione sia vera o falsa.

if-elif-else

Il costrutto if-elif-else permette di eseguire istruzioni o gruppi di istruzioni diverse a seconda del verificarsi di una o più condizioni.

La forma più semplice prevede l'uso di un if seguito da una condizione, dai due punti (:) e da un blocco di codice indentato che viene eseguito solo se la condizione è vera:

if condizione:
# gruppo di istruzioni eseguite
# se la condizione è vera

Per esempio, per calcolare il valore assoluto di un numero, possiamo procedere così:

n = int(input('Inserisci un numero: '))
if n < 0: # se il numero è negativo
    n = -n # rendilo positivo
print('Il valore assoluto è', n)

In questo caso il blocco di codice indentato sotto l'if (cioè n = -n) è eseguito solo se il numero è negativo. Se il numero è invece positivo, il programma procede ad eseguire l'istruzione che segue l'if, cioè il print().

Aggiungendo un else seguito dai due punti (:) possiamo anche specificare un blocco di codice eseguito quando la condizione dell'if è falsa:

if condizione:
    # gruppo di istruzioni eseguite
    # se la condizione è vera
else:
    # gruppo di istruzioni eseguite
    # se la condizione è falsa

In questo caso Python eseguirà il primo blocco se la condizione è vera, oppure il secondo blocco se la condizione è falsa. Ad esempio:

n = int(input('Inserisci un numero: '))
if n < 0: # se il numero è negativo
    print(n, 'è negativo')
else: # altrimenti (se non è negativo)
    print(n, 'è positivo')

In questo caso il programma eseguirà uno dei due print(): il primo se il numero inserito dall'utente è negativo, il secondo se invece è positivo.

È infine possibile aggiungere 1 o più elif, ognuno seguito da una condizione, dai due punti (:) e da un blocco di codice indentato che viene eseguito solo se la condizione è vera. È anche possibile aggiungere un singolo else alla fine che viene eseguito se tutte le condizioni precedenti sono false:

if condizione1:
    # gruppo di istruzioni eseguite
    # se la condizione1 è vera
elif condizione2:
    # gruppo di istruzioni eseguite
    # se la condizione2 è vera
elif condizioneN:
    # gruppo di istruzioni eseguite
    # se la condizioneN è vera
else:
    # gruppo di istruzioni eseguite
    # se tutte le condizioni sono false

Si noti che solo uno di questi blocchi viene eseguito: se una delle condizioni è vera, il blocco corrispondente viene eseguito; se invece tutte le condizioni sono false e un else è presente, solo il blocco dell'else viene eseguito. Nel caso ci siano più condizioni vere, verrà eseguito solo il blocco corrispondente alla prima condizione vera.

n = int(input('Inserisci un numero: '))
if n < 0:
    print(n, 'è negativo')
elif n > 0:
    print(n, 'è positivo')
else:
    print(n, 'è zero')

Questo programma usa if ed elif per verificare rispettivamente se il numero inserito dall'utente è negativo o positivo. Se entrambe le condizioni sono false (cioè quando il numero è uguale a 0), l'else viene eseguito.

Indentazione

In una delle precedenti lezioni abbiamo visto che linguaggi come il C usano le parentesi graffe ({}) per delimitare blocchi di codice, mentre in Python basta usare l'indentazione, aggiungendo o togliendo 4 spazi per ogni livello. Nei due esempi che seguono, vedremo che codice apparentemente simile ha significati diversi a seconda dell'indentazione.

In questo primo esempio, l'else ha lo stesso livello di indentazione del secondo if, e viene quindi eseguito quando cond1 è vera e cond2 è falsa:

if cond1:
    print('cond1 è vera')
    if cond2:
        print('cond1 è vera, cond2 è vera')
    else:
        print('cond1 è vera, cond2 è falsa')

In quest'altro esempio, l'else ha lo stesso livello di indentazione del primo if, e viene quindi eseguito quando cond1 è falsa:

if cond1:
    print('cond1 è vera')
    if cond2:
        print('cond1 è vera, cond2 è vera')
else:
    print('cond1 è falsa')

Possiamo notare che il blocco di codice indentato sotto all'else viene eseguito quando la condizione dell'if corrispondente (cioè quello con lo stesso livello di indentazione dell'else) è falsa.

Nel seguente esempio, vediamo come sia possibile usare più if-else per ottenere lo stesso risultato di un if-elif-else:

n = int(input('Inserisci un numero: '))
if n == 0:
    # se il numero è zero
    print(n, 'è zero')
else:
    # se il numero non è zero
    if n > 0:
        print(n, 'è positivo')
    else:
        print(n, 'è negativo')

Possiamo notare che:

  • il primo print() è indentato sotto l'if, e quindi viene eseguito solo se la condizione n == 0 è vera;
  • il primo else ha lo stesso livello di indentazione del primo if, quindi viene eseguito solo se la condizione n == 0 non è vera;
  • indentato sotto il primo else c'è un blocco di codice di 4 righe, che include un altro if-else;
  • il secondo print() ha 2 livelli di indentazione, quindi viene eseguito solo quando la prima condizione (n == 0) è falsa e la seconda (n > 0) è vera;
  • il secondo else ha lo stesso livello di indentazione del secondo if, quindi viene eseguito solo se la condizione n > 0 non è vera;
  • il terzo e ultimo print() ha 2 livelli di indentazione, quindi viene eseguito solo quando la prima (n == 0) e la seconda (n > 0) condizione sono false.

Sostituire lo "switch-case"

Un altro costrutto condizionale presente in diversi altri linguaggi è lo switch-case. Lo switch-case consente di specificare una variabile, seguita da diversi casi che vengono eseguiti in base al valore della variabile.

Il seguente esempio mostra parte di un programma in C che in base al valore delle variabile n, esegue diversi blocchi di codice:

// esempio in C
switch (n) {
    case 0:
        printf('zero\n');
        break;
    case 1:
    case 2:
        printf('uno o due\n');
        break;
    case 3:
        printf('tre\n');
        break;
    default:
        printf('numero diverso da 0, 1, 2, 3\n');
        break;
}

Questo programma C stampa zero se il valore di n è 0, uno o due se il valore è 1 o 2, tre se il valore è 3, altrimenti stampa numero diverso da 0, 1, 2, 3.

In Python non esiste il costrutto switch-case, ma è tuttavia possibile ottenere lo stesso risultato semplicemente usando un if-elif-else:

# esempio in Python
if n == 0:
    print('zero')
elif n == 1 or n == 2:
    print('uno o due')
elif n == 3:
    print('tre')
else:
    print('numero diverso da 0, 1, 2, 3')

Esiste anche un caso particolare di utilizzo dello switch dove per ogni case corrisponde una chiamata ad una funzione.

Il seguente esempio mostra parte di un programma in C che converte la variabile num in binario, ottale, o esadecimale a seconda della lettera indicata dalla variabile conv:

// esempio in C
switch (conv) {
    // binario
    case 'b':
        res = bin(num);
        break;
    // ottale
    case 'o':
        res = oct(num);
        break;
    // esadecimale
    case 'x':
        res = hex(num);
        break;
    default:
        printf('Conversione non valida');
        break;
}

Un risultato simile si può ottenere in Python usando i dizionari:

# esempio in Python
num = int(input('Inserisci un numero: '))
conv = input('Inserisci tipo di conversione [b/o/x]: ')
funcs = dict(b=bin, o=oct, x=hex)
if conv in {'b', 'o', 'x'}:
    func = funcs[conv]
    res = func(num)
    print('Il risultato della conversione è:', res)
else:
    print('Conversione non valida')

Questo esempio:

  • chiede all'utente di inserire num e conv;
  • definisce un dizionario funcs che mappa le lettere b/o/x alle funzioni di conversione corrispondenti;
  • verifica se la conversione specificata è valida o meno;
  • se lo è, ottiene la funzione corrispondente (func) alla lettera (conv) e la usa per convertire il numero;
  • se non lo è, stampa un messaggio d'errore.

Nella prossima lezione vedremo come utilizzare i cicli.


Ti consigliamo anche