Subsections

5. Decisioni

5.1 L'istruzione If

Credo sia meglio iniziare il capitolo con un esempio a caldo: ecco quindi un programma che calcola il valore assoluto di un numero:
n = input("Number? ")
if n < 0:
        print "The absolute value of",n,"is",-n
else:
        print "The absolute value of",n,"is",n

Output di due esecuzioni:

Number? -34
The absolute value of -34 is 34

Number? 1
The absolute value of 1 is 1

Quindi cosa fa il computer quando esegue questo codice? Prima di tutto chiede all'utente un numero grazie alla linea n = input("Number? ") dopodiché legge la linea if n < 0:, se n è minore di zero, Python esegue la linea print "The absolute value of",n,"is",-n, altrimenti (cioè se il numero è maggiore di zero) esegue la linea print "The absolute value of",n,"is",n.

Più semplicemente, Python decide se l'affermazione n < 0 è vera o falsa. Un'istruzione if è sempre seguita da un blocco di altre istruzioni indentate che vengono eseguite nel caso l'affermazione sia vera. In caso contrario vengono eseguiti i comandi indentati sotto l'istruzione else, ovvero quando l'affermazione if risulta falsa.

Python presenta svariati operatori associabili al confronto di una variabile, eccone una lista completa:

Operatore Funzione
< minore di
<= minore o uguale a
> maggiore di
>= maggiore o uguale a
== uguale
!= diverso da
<> variante di diverso da

Un'altra proprietà dell'istruzione if è la funzione elif . È un'abbreviazione di else if e significa: esegui il blocco di istruzioni tabulato sotto elif se la condizione necessaria al primo if è falsa e la condizione elif è vera. Ecco un esempio:

a = 0
while a < 10:
        a = a + 1
        if a > 5:
                print a," > ",5
        elif a <= 7:
                print a," <= ",7
        else:
                print "Neither test was true"

Questo è l'output:

1  <=  7
2  <=  7
3  <=  7
4  <=  7
5  <=  7
6  >  5
7  >  5
8  >  5
9  >  5
10  >  5

Osservate come la linea elif a <= 7 entri in azione solamente quando la prima istruzione if risulta falsa. Come potete vedere, l'istruzione elif consente di effettuare test multipli all'interno di una singola istruzione if.

5.2 Esempi

High_low.py

# Giocate ad indovinare il numero alto-basso
# (originariamente scritto da Josh Cogliati, migliorato da Quique)

# Questo dovrebbe attualmente essere qualcosa che è semi casuale, come 
# l'ultimo carattere del tempo o qualcos'altro, ma dovrete aspettare
# i prossimi capitoli (Esercizio supplementare, modificate con random,
# come richiesto nel capitolo sull'uso dei moduli).

number = 78
guess = 0

while guess != number : 
    guess = input ("Guess a number: ")

    if guess > number :
        print "Too high"

    elif guess < number :
            print "Too low"

print "Just right"

Esecuzione:

Guess a number:100
Too high
Guess a number:50
Too low
Guess a number:75
Too low
Guess a number:87
Too high
Guess a number:81
Too high
Guess a number:78
Just right

even.py

# Chiedi un numero.
# Stampa se è pari o dispari.

number = input("Tell me a number: ")
if number % 2 == 0:
    print number,"is even."
elif number % 2 == 1:
    print number,"is odd."
else:
    print number,"is very strange."

Esecuzione:

Tell me a number: 3
3 is odd.

Tell me a number: 2
2 is even.

Tell me a number: 3.14159
3.14159 is very strange.

average1.py

# Continua a chiedere numeri finché non viene immesso 0.
# Stampa la media dei valori.

count = 0
sum = 0.0
number = 1 # imposta un valore, altrimenti il ciclo 
           # while terminerebbe immediatamente.

print "Enter 0 to exit the loop"

while number != 0:
    number = input("Enter a number:")
    count = count + 1
    sum = sum + number

count = count - 1 # Togli un'unità all'ultimo numero.
print "The average was:",sum/count

Esecuzione:

Enter 0 to exit the loop
Enter a number:3
Enter a number:5
Enter a number:0
The average was: 4.0

Enter 0 to exit the loop
Enter a number:1
Enter a number:4
Enter a number:3
Enter a number:0
The average was: 2.66666666667

average2.py

# Continua a chiedere numeri finché count li richiede.
# Stampa la media dei valori.

sum = 0.0

print "This program will take several numbers than average them"
count = input("How many numbers would you like to sum:")
current_count = 0

while current_count < count:
    current_count = current_count + 1
    print "Number ",current_count
    number = input("Enter a number:")
    sum = sum + number

print "The average was:",sum/count

Esecuzione:

This program will take several numbers than average them
How many numbers would you like to sum:2
Number  1
Enter a number:3
Number  2
Enter a number:5
The average was: 4.0

This program will take several numbers than average them
How many numbers would you like to sum:3
Number  1
Enter a number:1
Number  2
Enter a number:4
Number  3
Enter a number:3
The average was: 2.66666666667

5.3 Esercizi

Scrivete un programma che chieda all'utente di indovinare una password, ma che dia al giocatore solamente 3 possibilità, fallite le quali il programma terminerà, stampando ``È troppo complicato per voi''.

Scrivete un programma che chieda due numeri. Se la somma dei due numeri supera 100, stampate ``Numero troppo grande''.

Scrivete un programma che chieda all'utente il nome. Se viene inserito il vostro nome, il programma dovrà rispondere con un ``Questo è un bel nome'', se il nome inserito è "John Cleese" o "Michel Palin" il programma dovrà rispondere con una battuta ;) mentre in tutti gli altri casi l'output del programma sarà un semplice ``Tu hai un bel nome!''.