Article

Altri esperimenti con Python

Nei ritagli di tempo continuo a dare un’occhiata a Python 3.1, e questa volta ho provato a riscrivere uno dei più classici e semplici programmi che generalmente una volta ti insegnavano a scrivere a scuola: il “gioco” della caccia al numero, riportato per anni in tutti i manuali di programmazione dei computer (c’è pure nel manuale del vecchio Commodore 64 a pagina 51).

In pratica il computer pensa ad un numero compreso fra 1000 e 9999 e voi lo dovete indovinare (i limiti superiori ed inferiori sono memorizzati in due variabili); ad ogni tentativo il computer per aiutarvi vi dice se il numero che avete inserito è troppo alto o troppo basso, e quando finalmente riuscite ad indovinarlo vi dice quanti tentativi vi sono stati necessari… ai miei tempi questo era proprio uno dei programmi più semplici da cui cominciare a capire il costrutto IF – THEN – ELSE.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import random
 
nLimInf = 1000
nLimSup = 9999
nCasuale = random.randint(nLimInf, nLimSup)
nTentativi = 0
lTrovato = False
 
# Inizia ricordando il limite inferiore e superiore fra cui cercare
print("** Indovina il numero compreso fra %d e %d **" % (nLimInf, nLimSup))
 
# Finchè l'utente non indovina...
while (not lTrovato):
 
    try:
        # Prova a farsi dare un numero dall'utente 
        # sotto forma di stringa trasformata in int
        nTentativi += 1
        nNumero = int(input("Numero? "))
        if (nNumero < nCasuale):    # Se il numero è troppo basso
            print("Troppo basso!")
        elif (nNumero > nCasuale):  # Se il numero è troppo alto
            print("Troppo alto!")
        else:                       # L'utente ha indovinato
            print("Esatto!\nHai indovinato in %d tentativi!" % nTentativi)
            lTrovato = True
    except:
        # L'utente non ha inserito un numero
        print("Quello non era un numero!")

Probabilmente in Python questo programmino si potrà scrivere in cento modi più efficienti di questo, ma a me questo esercizio serviva soprattutto per ricordarmi l’uso dei moduli esterni (come il “random” utilizzato per generare un numero casuale attraverso randint) e del costrutto TRY.. EXCEPT, che generalmente per buona programmazione dovrebbe “catturare” un tipo ben definito di eccezione, mentre io qui -non specificando un tipo di eccezione da intercettare nel blocco except becco tutto “come viene viene” :)

Nessun commento.

Lascia una risposta