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”