Istruzioni condizionali in Python

In Python possiamo avere sostanzialmente tre tipi di istruzioni condizionali:

if…else

Si presenta così:

if (condizione da verificare):
  #blocco di istruzioni da eseguire se la condizione è vera
else:
  #blocco di istruzioni de eseguire in tutti gli altri casi in cui la condizione non si verifica

per esempio possiamo scrivere:

a=input('Inserisci un numero: ')
b=input('Inserisci un'altro numero: ')
if a > b:
print a, 'è maggiore di ', b
else:
print a, 'è minore di ', b

Intanto indichiamo all’interprete che deve accettare in input due numeri interi e che questi devono essere memorizzati nelle variabili a e b. Poi iniziamo il costrutto condizionale: scriviamo un if seguito dalla condizione che vogliamo verificare, nel nostro caso che a sia maggiore di b, seguito dai due punti. Su una nuova riga diamo una tabulazione. Da notare che in Python la tabulazione è una parte propria del linguaggio e stà ad indicare all’interprete che quelle righe tabulate fanno parte di un costrutto e non ad un’altro. Ora possiamo dirgli cosa vogliamo che faccia se la condizione è verificata, in questo caso gli diciamo che deve stampare a video che a è maggiore di b. Se a non fosse maggiore di b entra in gioco l’else: se a non fosse maggiore di b gli diciamo che deve eseguire ciò che viene tabulato dopo l’else; nel nostro caso di stampare a schermo che a è minore di b.

if…elif

In questo caso diamo una condizione iniziale espressa dal primo if e successivamente possiamo controllare, con quanti altri elif ci piace di più, il verificarsi di altre condizioni. Da ricordare che alla prima condizione soddisfatta il programma esegue le istruzioni contenute all’interno della condizione e successivamente esce dal costrutto, senza verificare le altre. Un esempio piuttosto semplice è calcolare il segno di un numero:

if n>0:
	print "Il numero e' positivo."
elif n==0:
	print "Hai inserito il numero zero." #Anche se sembra che 0 sia un numero positivo!
elif n<0:
	print "Il numero e' negativo"

Come prima richiediamo di inserire un numero intero da tastiera. Successivamente abbiamo tre possibili casi: o il numero è positivo, o è negativo o è zero. Credo che non ci sia bisogno di altre spiegazioni perché una volta stabilito cosa significa if ed elif il codice quasi che si legge come si leggerebbe normalmente. L’unica cosa da sottolineare è che avevamo tre casi possibili e che li abbiamo coperti tutti con una condizione.

Last but not least abbiamo il costrutto if…elif…else. Come si può immaginare questo costrutto è un misto dei precedenti. Ora possiamo provare qualcosa di leggermente più complesso: costruiamo una banale calcolatrice.

Calcolatrice scritta in Python

Sostanzialmente avremo in input tre variabili: un numero a, un operatore o (per convenzione usiamo gli operatori di Python, +, -, *, /) e un altro numero b. Poi confronteremo l’operatore con delle condizioni seguite dalle operazioni appropriate e diremo che in tutti gli altri casi che non abbiamo stabilito restituiremo un messaggio di errore. E quindi possiamo scrivere:

a=input("a: ")
o=raw_input("Operazione(+, -, *, /): ")
b=input("b: ")

if o=="+":
	risultato=a+b
elif o=="-":
	risultato=a-b
elif o=="*":
	risultato=a*b
elif o=="/":
	if b==0 or a==0:
		risultato="errore"
	else:
		risultato=float(a)/b
else:
	risultato="errore"
print risultato

Da notare che la variabile o riceve in ingresso tramite raw_input qualsiasi valore scrivibile con la tastiera e non solamente numeri interi, quindi dovremo controllare che ciò che è stato scritto corrisponda alle operazioni che vogliamo usare. Questo si può fare confrontando se la stringa inserita corrisponde alla stringa che associamo all’operatore. Se il simbolo inserito corrisponde esattamente, nel primo caso, al simbolo + allora dobbiamo sommare i numeri inseriti e così via per ogni altro operatore. In tutti gli altri casi in cui il simbolo inserito non sia tra gli operatori che abbiamo definito inviamo un messaggio di errore. Un’ultima cosa da notare è cosa succede con la divisione. Una volta che abbiamo controllato che l’operatore è quello giusto, abbiamo indentato un costrutto if…else all’interno di un elif: dobbiamo infatti ricordarci che, in una divisione, nessuno dei due operandi può assumere il valore zero quindi se o a o b sono zero (or) scriviamo un messaggio di errore, altrimenti eseguiamo la divisione vera e propria. Bisogna fare attenzione però perchè, ad esempio, 7/3 restituisce come risultato 3 perché viene fatta la divisione intera (senza resto) tra due numeri interi; al contrario 7.0/3 restituisce 3.5 perché il 7.0 viene interpretato come numero reale e quindi viene eseguita la divisione con resto tra due numeri reali; basta che uno dei due operandi sia reale per avere una divisione con resto. Per questo dobbiamo convertire almeno uno dei due interi (perché li abbiamo ricevuti in input in questo modo) tramite float().

  • In realtà il numeratore di una divisione può assumere valore zero, anche se l’operazione avrà sempre risultato nullo
    Saluti!

    • E’ inutile sottolineare che hai ragione :). Era solo il mio modo di dire che non ha senso mettere a numeratore o denominatore zero.