Como criar um quiz interativo em Python
Monte um quiz de perguntas e respostas no terminal com pontuação, usando listas e dicionários.
O que vamos construir?
Um quiz de perguntas e respostas que roda no terminal. O programa mostra uma pergunta com alternativas, o jogador escolhe a resposta, e no final recebe sua pontuação. Vamos usar listas e dicionários para organizar as perguntas — conceitos que você aprendeu na trilha Python do Zero.
Estruturando as perguntas
Cada pergunta precisa de: o texto da pergunta, as alternativas e a resposta correta. Um dicionário é perfeito para isso:
pergunta = {
"texto": "Qual funcao exibe texto na tela em Python?",
"alternativas": ["input()", "print()", "show()", "display()"],
"correta": 1 # indice da resposta correta (comeca em 0)
}
Para ter várias perguntas, colocamos os dicionários dentro de uma lista:
perguntas = [
{
"texto": "Qual funcao exibe texto na tela em Python?",
"alternativas": ["input()", "print()", "show()", "display()"],
"correta": 1
},
{
"texto": "Qual tipo de dado representa texto em Python?",
"alternativas": ["int", "float", "bool", "str"],
"correta": 3
},
{
"texto": "O que o operador == faz?",
"alternativas": ["Atribui valor", "Compara igualdade", "Soma", "Multiplica"],
"correta": 1
},
{
"texto": "Qual estrutura repete um bloco de codigo?",
"alternativas": ["if", "def", "while", "import"],
"correta": 2
},
{
"texto": "Como acessar o primeiro item de uma lista?",
"alternativas": ["lista[1]", "lista[0]", "lista.first()", "lista[-1]"],
"correta": 1
},
]
Mostrando uma pergunta
Vamos criar uma função que exibe a pergunta e suas alternativas:
def mostrar_pergunta(pergunta, numero):
print(f"\nPergunta {numero}:")
print(pergunta["texto"])
print()
for i, alt in enumerate(pergunta["alternativas"]):
print(f" {i + 1}. {alt}")
A função enumerate() retorna o índice e o valor de cada item, facilitando a numeração.
Recebendo a resposta
Precisamos que o jogador escolha um número e verificar se está no intervalo válido:
def pedir_resposta(total_alternativas):
while True:
try:
escolha = int(input("\nSua resposta: "))
if 1 <= escolha <= total_alternativas:
return escolha - 1 # converte para indice (base 0)
print(f"Escolha entre 1 e {total_alternativas}.")
except ValueError:
print("Digite apenas o numero da alternativa.")
O while True garante que o programa continue pedindo até receber uma resposta válida.
Montando o jogo completo
Agora juntamos tudo em um loop que percorre todas as perguntas:
def jogar(perguntas):
pontos = 0
total = len(perguntas)
print("=" * 40)
print(" QUIZ PYTHON")
print("=" * 40)
for i, p in enumerate(perguntas, 1):
mostrar_pergunta(p, i)
resposta = pedir_resposta(len(p["alternativas"]))
if resposta == p["correta"]:
print("Correto!")
pontos += 1
else:
correta = p["alternativas"][p["correta"]]
print(f"Errado! A resposta era: {correta}")
print()
print("=" * 40)
print(f" Resultado: {pontos}/{total}")
porcentagem = int((pontos / total) * 100)
if porcentagem == 100:
print(" Perfeito! Voce mandou muito bem!")
elif porcentagem >= 60:
print(" Bom trabalho! Continue estudando.")
else:
print(" Precisa revisar. Nao desista!")
print("=" * 40)
Código completo
Aqui está o programa completo, pronto para rodar:
perguntas = [
{
"texto": "Qual funcao exibe texto na tela em Python?",
"alternativas": ["input()", "print()", "show()", "display()"],
"correta": 1
},
{
"texto": "Qual tipo de dado representa texto em Python?",
"alternativas": ["int", "float", "bool", "str"],
"correta": 3
},
{
"texto": "O que o operador == faz?",
"alternativas": ["Atribui valor", "Compara igualdade", "Soma", "Multiplica"],
"correta": 1
},
{
"texto": "Qual estrutura repete um bloco de codigo?",
"alternativas": ["if", "def", "while", "import"],
"correta": 2
},
{
"texto": "Como acessar o primeiro item de uma lista?",
"alternativas": ["lista[1]", "lista[0]", "lista.first()", "lista[-1]"],
"correta": 1
},
]
def mostrar_pergunta(pergunta, numero):
print(f"\nPergunta {numero}:")
print(pergunta["texto"])
print()
for i, alt in enumerate(pergunta["alternativas"]):
print(f" {i + 1}. {alt}")
def pedir_resposta(total_alternativas):
while True:
try:
escolha = int(input("\nSua resposta: "))
if 1 <= escolha <= total_alternativas:
return escolha - 1
print(f"Escolha entre 1 e {total_alternativas}.")
except ValueError:
print("Digite apenas o numero da alternativa.")
def jogar(perguntas):
pontos = 0
total = len(perguntas)
print("=" * 40)
print(" QUIZ PYTHON")
print("=" * 40)
for i, p in enumerate(perguntas, 1):
mostrar_pergunta(p, i)
resposta = pedir_resposta(len(p["alternativas"]))
if resposta == p["correta"]:
print("Correto!")
pontos += 1
else:
correta = p["alternativas"][p["correta"]]
print(f"Errado! A resposta era: {correta}")
print()
print("=" * 40)
print(f" Resultado: {pontos}/{total}")
porcentagem = int((pontos / total) * 100)
if porcentagem == 100:
print(" Perfeito! Voce mandou muito bem!")
elif porcentagem >= 60:
print(" Bom trabalho! Continue estudando.")
else:
print(" Precisa revisar. Nao desista!")
print("=" * 40)
jogar(perguntas)
Dicas para ir além
- Embaralhar perguntas: use
random.shuffle(perguntas)para mudar a ordem a cada jogo - Mais perguntas: adicione quantas quiser, seguindo o mesmo formato
- Categorias: agrupe perguntas por tema e deixe o jogador escolher
- Tempo: use o módulo
timepara mostrar quanto tempo o jogador levou
Conclusão
Você criou um quiz completo usando listas, dicionários, funções e loops. Esse projeto mostra como estruturas de dados simples resolvem problemas reais. No próximo artigo, vamos construir uma calculadora com menu interativo.