3
I’m developing a quiz with Python
And I have a problem that I think is simple but I’m having trouble solving.
When the person completes the quiz the message that was to appear does not appear and gives an error:
Traceback (most recent call last):
File "python", line 83, in <module>
File "python", line 26, in verificacao
IndexError: list index out of range
Follows the code:
# coding=utf-8
print ("Escolha a dificuldade para o quiz. Escolha F para fácil, M para médio, ou D para difícil.")
# Lista de tentativas já realizadas
count_list = []
perguntas = [
"Digite a palavra que substituirá o espaço 0: ",
"Digite a palavra que substituirá o espaço 1: ",
"Digite a palavra que substituirá o espaço 2: ",
"Digite a palavra que substituirá o espaço 3: "
]
def verificacao(frase, respostas, tentativas):
# Verifica e conta as palavras de todo o quiz
print
print (frase)
print
index = 0
while len(count_list) < tentativas and index < (tentativas + 1):
pergunta = input(perguntas[index]).lower()
if index == tentativas and pergunta == respostas[index]:
print ("Você ganhou o quiz! Parabéns!")
break
if pergunta == respostas[index]:
print ("Você acertou!")
frase = frase.replace(str(index), respostas[index])
print (frase)
index += 1
print
else:
count_list.append(1)
print ("Opa, você errou. Você tem mais " + str(
tentativas - len(count_list)) + " tentativa(s).")
if len(count_list) == tentativas:
print ("Você perdeu. Continue tentando.")
break
# Variaveis do quiz: frases e respostas
frase_facil = "Água __0__, pedra __1__, tanto __2__ até que __3__."
frase_medio = "De __0__, poeta e __1__, todo __2__ tem um __3__."
frase_dificil = "Um __0__, de exemplos __1__ mais que uma __2__ de __3__."
frase = [frase_facil, frase_medio, frase_dificil]
respostas_facil = ['mole', 'dura', 'bate', 'fura']
respostas_medio = ['medico', 'louco', 'mundo', 'pouco']
respostas_dificil = ['grama', 'vale', 'tonelada', 'conselhos']
respostas = [respostas_facil, respostas_medio, respostas_dificil]
def attempts():
# Verifica se a quantidade de tentativas que o usuario escolheu esta correta, se for ele retorna, caso contrario aparece uma mensagem para tentar novamente.
while True:
try:
tentativas = int(
input("Quantas tentativas que você quer? "))
return tentativas
break
except ValueError:
print("Você precisa colocar um algarismo. Tente outra vez.")
continue
while True:
# Input do usuário a partir do nível de dificuldade e número de tentativas escolhidos, para iniciar o quiz correto. Retorna se for valido, caso contrario aparece mensagem pedindo para tentar novamente.
nivel_dificuldade = input("Nível de dificuldade: ")
tentativas = attempts()
if nivel_dificuldade.lower() == "f" or nivel_dificuldade.lower(
) == "facil" or nivel_dificuldade.lower() == "fácil":
verificacao(frase_facil, respostas_facil, tentativas)
break
elif nivel_dificuldade.lower() == "m" or nivel_dificuldade.lower(
) == "medio" or nivel_dificuldade.lower() == "médio":
verificacao(frase_medio, respostas_medio, tentativas)
break
elif nivel_dificuldade.lower() == "d" or nivel_dificuldade.lower(
) == "dificil" or nivel_dificuldade.lower() == "difícil":
verificacao(frase_dificil, respostas_dificil, tentativas)
break
print ("Escolha a dificuldade do seu quiz, você precisa apertar a letra F, M ou D. Tente novamente.")
Apparently you try to get the question before checking if the quiz is over. In this case, it will always look for a question that does not exist.
– Woss
Apart from that, the logic seems very confusing. Could you ask the question your complete code? For if I put 5 attempts and there are only 3 questions, I will have to purposely miss 2 times to finish the game, since there is the condition
index == tentativas
?– Woss
I put Anderson
– Jamal