Forum >> Principianti >> Estrazione elementi da lista

Pagina: 1

Salve, per esercitarmi sto costruendo un questionario che "pesca" delle domande da una lista




domandee = ["domanda 1?", "40", "domanda 2?", "50", "domanda 3?", "60"]

a = -2
b= -1
punteggio = 0
while a <=5 and b <= 5:
    for i in domandee:
        a = a+2
        b = b+2
        print (domandee [ a ])
        risposta = input ("inserisci risposta")
        if risposta == domandee:
            print ("risposta corretta")
            punteggio = punteggio +1
        else:
            print ("risposta sbagliata")
            
print ("il tuo punteggio è", punteggio)
Nella lista ci sono domande e risposte, le domande sono in posizione pari e le risposte in posizione dispari. Per permettere di discriminare le posizioni pari da quelle dispari l'indice si incrementa di 2 a ogni ciclo for, ma, ho pensato, per evitare che le variabili a e b si incrementano fino ad assumere un valore maggiore a quello degli elementi della lista ho inserito la condizione "while a and b <=5"





Il problema è il seguente messaggio di errore:

File "ok.py", line 10, in <module>
print (domandeea)
IndexError: list index out of range





in pratica il valore di a si incrementa troppo, ma per quale motivo se quel valore è sottoposto a condizione ? Come mai è come se non mi considerasse il ciclo while?




Sarà sicuramente un errore banale, ma sono un principiante. RIngrazio in anticipo per la risposta



--- Ultima modifica di Stef Viv in data 2018-12-28 19:54:05 ---

--- Ultima modifica di Stef Viv in data 2018-12-28 19:54:31 ---
Ciao caro, sì commetti un errore nel range per effettuare il controllo, ma fatti un favore, usa un dizionario per una cosa genere.

Ho cercato di adattarmi al tuo codice e non modificarlo troppo, in modo da non farti perdere l'orientamento.

punteggio = 0

domande = {
    "domanda 1?": 40,
    "domanda 2?": 50, 
    "domanda 3?": 60
}

for k,v in domande.items():
    print(k)
    risposta = input("inserisci risposta: ")
    if risposta == v:
        print ("risposta corretta")
        punteggio += 1
    else:
        print ("risposta sbagliata")

print ("il tuo punteggio è ", punteggio)

NOTA: Così ancora non va bene, perché quello che otterrai da input() è una stringa, mentre tua hai un numero intero nei tuoi valori. Devi gestire anche questo, magari considerando v come stringa, str(v), oppure controllando l'inserimento di risposta con un try e che accetti comunque solo interi.

Vai e torna vittorioso.

Cya

domandee = ["domanda 1", "40", "domanda 2", "50", "domanda 3", "60"]
Il problema principale sarebbe che non dovresti usare le liste. Come ha fatto notare Daniele. Il metodo consigliato sarà di associare il punteggio ad un indice in un dizionario.

Nel tuo caso, devi mettere una verifica che il tuo indice non oltrepassi la lunghezza della lista, tenendo conto che l' indicizzazione parte da zero.

while (a + 2) < len(domandee) or (b + 2) < len(domandee)    # tenuto conto che si aggiunera' 2


In questo caso già il segno di minore garantisce che sia rispettato la condizione degli indici.

Questo è il metodo preventivo. Mentre c'è anche il metodo di fasciarsi la testa dopo averla rotta, per questo si usa una clausola try except che se avviene l' errore ti porta al blocco di except, nel quale decidi cosa fare.

try:
    for i in domandee:
        a = a+2
        b = b+2
        print (domandeea)
        risposta = input ("inserisci risposta")
        if risposta == domandee:
            print("risposta corretta")
            punteggio += 1
        else:
            print("risposta sbagliata")
      print("il tuo punteggio è ", punteggio)
except:
   print("Oltrepassato il limite della lista")




--- Ultima modifica di F _ in data 2018-12-30 01:33:13 ---

--- Ultima modifica di F _ in data 2018-12-30 01:34:08 ---
Grazie ad entrambi ragazzi! E' che non sono ancora arrivato a studiare i dizionari, sto procedendo un argomento per volta, ma non mi manca molto. So che per un questionario procedere come ho fatto io non è proprio l'ideale ma significava complicarsi la vita (avrei potuto farlo in un modo molto più semplice), ma era un modo per sperimentare! Buona serata :)
E' che non sono ancora arrivato a studiare i dizionari, sto procedendo un argomento per volta, ma non mi manca molto. So che per un questionario procedere come ho fatto io non è proprio l'ideale ma significava complicarsi la vita (avrei potuto farlo in un modo molto più semplice), ma era un modo per sperimentare! Buona serata :)

Non sapevo che non eri ancora arrivato ai dizionari, quindi buono studio e buone prove.

Grazie e buona serata anche a te.


Pagina: 1



Esegui il login per scrivere una risposta.