P.13 Il milionario

Realizziamo un gioco a quiz sullo stile de “il milionario”: appariranno delle domande a cui si potrà rispondere scegliendo tra 4 alternative. Le domande, le possibili alternative e le risposte corrette sono memorizzate in 3 liste.

Prepariamo tre liste: la lista domande contiene l’elenco delle domande da presentare al giocatore. La lista scelte contiene un elenco di liste con le possibili risposte, mentre nella lista risposte abbiamo il numero corrispondente alla risposta corretta.

domande = [
    'Quale di queste affermazioni sulla balena è sbagliata?',
    'Che cos\'è l\' \"abacà\", il primo sostantivo ' \
    'in un dizionario italiano?',
    'Se da San Francisco vedete il famoso "Golden Gate" ' \
    'cosa state guardando?'
    ]

scelte = [
    ['ha i fanoni', 'è un cetaceo', 'ha 2 figli per volta', 
     'si nutre di krill'],
    ['un liquore', 'la parte di un libro', 'una fibra tessile',    
     'una veste romana'],
    ['un grattacielo', 'un ponte', 'un lago', 'un monte']
    ]

risposte = [3, 3, 2]

Utilizzando delle liste possiamo automatizzare il gioco con dei cicli. In questo modo possiamo aggiungere nuove domande senza difficoltà, intervenendo sulle liste.

Iniziamo stampando la prima domanda e attendendo la risposta fornita. Aggiungiamo una variabile idom che tiene conto di qual è la domanda corrente.

idom = 0
for dom in domande:
    print(dom)
    #visualizzo le possibili risposte
    #attendo la risposta del giocatore
    #verifico la correttezza e assegno i punti
    
    idom += 1

Subito di seguito alla domanda stampiamo le possibili risposte utilizzando un nuovo ciclo for che le preleverà dalla lista scelte. Per selezionare il sottoinsieme di risposte abbinate alla domanda corrente useremo il valore memorizzato in idom. Osserviamo che scelte[idom] è una lista! Di fronte alle alternative riportiamo un numero, che possiamo ricavare con una nuova variabile c. Raccoglieremo la risposta del giocatore utilizzando una input().

idom = 0
for dom in domande:
    print(dom)
    c = 1
    for cho in scelte[idom]:
        print(f"{c}: {cho}")
        c += 1
    ans = int(input("1, 2, 3 o 4? "))
    
    #verifico la correttezza e assegno i punti
    
    idom += 1

Dopo che il giocatore ha espresso la sua risposta, possiamo confrontarne il valore con quello corrispondente alla domanda corrente. La risposta corretta è ricavabile estraendo l’elemento alla posizione idom, all’interno della lista risposte. Un if verifica se la risposta è corretta e visualizza un messaggio. Aggiungendo una variabile punti, possiamo anche calcolare un punteggio.

    ans = int(input("1, 2, 3 o 4? "))
    
    right = risposte[idom]
    if (right == ans):
        print("corretto!\n")
        punti += 1
    else:
        print("non è corretto!\n")

Ecco il codice completo del gioco:

domande = [
    'Quale di queste affermazioni sulla balena è sbagliata?',
    'Che cos\'è l\' \"abacà\", il primo sostantivo ' \
    'in un dizionario italiano?',
    'Se da San Francisco vedete il famoso "Golden Gate" ' \
    'cosa state guardando?'
    ]

scelte = [
    ['ha i fanoni', 'è un cetaceo', 'ha 2 figli per volta', 
     'si nutre di krill'],
    ['un liquore', 'la parte di un libro', 'una fibra tessile',    
     'una veste romana'],
    ['un grattacielo', 'un ponte', 'un lago', 'un monte']
    ]

<em>risposte = [3, 3, 2]</em>

punti = 0
idom = 0
for dom in domande:
    print(dom)
    c = 1
    for cho in scelte[idom]:
        print(f"{c}: {cho}")
        c += 1
    ans = int(input("1, 2, 3 o 4? "))
    
    right = risposte[idom]
    if (right == ans):
        print("corretto!\n")
        punti += 1
    else:
        print("non è corretto!\n")
    
    idom += 1
    
print(f"Il tuo punteggio: {punti}")

Listato 1.21 – Listato del gioco a quiz.

Eseguendo il codice otterremo una sequenza simile alla seguente:

Quale di queste affermazioni sulla balena è sbagliata?
1: ha i fanoni
2: è un cetaceo
3: ha 2 figli per volta
4: si nutre di krill
1, 2, 3 o 4? 3
corretto!

Che cos'è l' "abacà", il primo sostantivo in un dizionario italiano?
1: un liquore
2: la parte di un libro
3: una fibra tessile
4: una veste romana
1, 2, 3 o 4? 3
corretto!

Se da San Francisco vedete il famoso "Golden Gate" cosa state guardando?
1: un grattacielo
2: un ponte
3: un lago
4: un monte
1, 2, 3 o 4? 1
non è corretto!

Il tuo punteggio: 2