Quiz no terminal com Python: perguntas e pontuação

Atualizado em: 21/08/2026
Tempo de leitura: 6 minutos
Quiz interativo no terminal desenvolvido com Python

Se você quer Criando um Quiz Interativo no Terminal com Python de forma simples e divertida, este guia passo a passo vai te mostrar como montar um jogo de perguntas e respostas que roda direto no console, sem precisar de interfaces gráficas. Você aprenderá a usar entrada de dados com input(), organizar perguntas em dicionários, e aplicar funções para manter o código limpo e reutilizável.

Por que criar um quiz no terminal?

Um quiz no terminal é ideal para quem está começando a programar porque foca nos conceitos essenciais: laços, estruturas de dados e tratamento de entrada do usuário. Além disso, ele funciona em qualquer sistema operacional, não exige dependências gráficas e permite praticar laços while e laços for de maneira prática. O resultado é um programa leve, rápido e fácil de distribuir.

Preparando o ambiente de desenvolvimento

Antes de escrever código, certifique‑se de ter o Python instalado (versão 3.8 ou superior). Você pode baixar o instalador oficial em python.org. Em seguida, crie um diretório para o projeto e abra um terminal:

  1. mkdir quiz_terminal
  2. cd quiz_terminal
  3. python -m venv venv  # cria um ambiente virtual
  4. source venv/bin/activate  # ativa o ambiente (Windows: venv\Scripts\activate)

Manter o código dentro de um ambiente virtual evita conflitos de dependências.

Estrutura básica do quiz

Um quiz simples pode ser dividido em três partes: (1) carregamento das perguntas, (2) loop de interação com o usuário e (3) cálculo da pontuação. Vamos começar criando um arquivo quiz.py com a seguinte estrutura:

  • dados: lista de dicionários contendo pergunta, opções e resposta_correta.
  • funções: exibir_pergunta(), obter_resposta() e calcular_pontuacao().
  • main: laço que percorre todas as questões.

Definindo as perguntas

Use listas para armazenar cada questão como um dicionário. Exemplo:

Python
perguntas = [
{"texto": "Qual a capital da França?", "opcoes": ["Paris", "Londres", "Berlim"], "correta": "A"},
{"texto": "2 + 2 = ?", "opcoes": ["3", "4", "5"], "correta": "B"},
]

Essa estrutura permite expandir facilmente o número de questões ou mudar o formato.

Gerenciando perguntas e respostas

Para exibir cada pergunta, percorra a lista com um loop enumerate. O enumerate fornece o índice da questão, útil para mostrar “Pergunta 1 de 10”.

Função exibir_pergunta

A função recebe um dicionário e imprime a pergunta formatada. Use f‑strings para inserir variáveis diretamente na string:

Python
def exibir_pergunta(idx, q):
  print(f"Pergunta {idx + 1}: {q['texto']}")
  for i, opt in enumerate(q['opcoes'], start=65): # 65 = 'A'
    print(f"{chr(i)}) {opt}")

Função obter_resposta

Capture a escolha do usuário com input(). Valide a entrada para aceitar apenas “A”, “B” ou “C”. Caso o usuário digite algo inválido, mostre uma mensagem de erro e solicite novamente.

Adicionando pontuação e feedback

Crie uma variável pontos iniciada em zero. Cada resposta correta soma um ponto; respostas erradas podem subtrair ou simplesmente não alterar a pontuação. Após cada pergunta, informe ao usuário se ele acertou e mostre a resposta correta.

Função calcular_pontuacao

Esta função recebe a resposta do usuário e a letra correta, compara e retorna 1 ou 0. Também pode exibir uma explicação opcional, armazenada no dicionário da questão.

Melhorando a experiência com argparse

Para tornar o quiz mais flexível, use o módulo argparse. Ele permite que o usuário escolha, ao iniciar o programa, o nível de dificuldade, o número de perguntas ou até mesmo um arquivo externo contendo as questões.

Exemplo de parser

Python
import argparse

parser = argparse.ArgumentParser(description="Quiz interativo no terminal")
parser.add_argument("-n", "--num", type=int, default=5, help="Número de perguntas a serem feitas")
parser.add_argument("-d", "--dificuldade", choices=["facil","medio","dificil"], default="facil", help="Define a dificuldade do quiz")
args = parser.parse_args()

Com esses argumentos, o programa pode selecionar aleatoriamente args.num questões de acordo com a dificuldade escolhida.

Organizando o código em módulos

Conforme o projeto cresce, separar a lógica em arquivos diferentes facilita a manutenção. Crie, por exemplo, perguntas.py contendo a lista de questões, utils.py com funções auxiliares e mantenha o main em quiz.py. Essa prática segue o princípio da modularização e permite reutilizar código em outros projetos.

Tipagem estática com type hints

Adicionar type hints melhora a legibilidade e ajuda ferramentas como mypy a detectar erros antes da execução. Exemplo:

Python
def exibir_pergunta(idx: int, q: dict) -> None:

Embora opcional, a tipagem é recomendada em projetos maiores.

Usando *args* e **kwargs** para flexibilidade

Se você pretende criar diferentes tipos de quizzes (matemática, história, ciência), pode usar *args* e **kwargs nas funções que recebem parâmetros variáveis, como a lista de questões ou o número de tentativas.

Exemplo rápido

Python
def iniciar_quiz(*questoes: dict, **opcoes) -> None:
  # questoes vem como tupla, opcoes como dicionário
  pass

Testando e depurando o quiz

Teste cada função isoladamente usando testes unitários. Crie um arquivo test_quiz.py e utilize o módulo unittest para garantir que obter_resposta() aceita apenas valores válidos e que calcular_pontuacao() retorna o valor esperado.

Para depurar, insira print() estratégicos ou use o depurador integrado do VS Code (F5). Isso ajuda a identificar rapidamente onde a lógica pode estar falhando.

Distribuindo o quiz

Quando o programa estiver pronto, você pode empacotá‑lo como um executável usando PyInstaller ou simplesmente compartilhar o script quiz.py. Usuários que não têm Python instalado podem rodar o executável gerado em qualquer máquina.

Perguntas Frequentes

Como armazenar as perguntas em um arquivo externo?

Use formatos simples como JSON ou TOML. O módulo json lê o arquivo e converte em lista de dicionários, facilitando a manutenção.

É possível adicionar um temporizador para cada pergunta?

Sim. O módulo threading ou a função signal.alarm() (Linux) permitem limitar o tempo de resposta.

Como lidar com respostas que aceitam mais de uma letra (ex.: A ou B)?

Armazene as respostas corretas como lista, por exemplo ["A", "B"], e verifique se a escolha do usuário está contida nessa lista.

Posso usar cores no terminal para melhorar a visualização?

Sim. Bibliotecas como colorama ou rich permitem imprimir texto colorido e formatado.

Qual a melhor forma de validar a entrada do usuário?

Utilize um loop while que repete até receber um valor dentro do conjunto permitido (ex.: {“A”,”B”,”C”}).

Como tornar o quiz acessível para pessoas com deficiência visual?

Forneça opções de áudio usando a biblioteca pyttsx3 ou permita que o usuário escolha entre texto e voz.

É possível salvar o histórico de pontuações?

Sim. Grave os resultados em um arquivo CSV ou SQLite e exiba um ranking ao final.

Como integrar o quiz a um bot de Discord?

Use a biblioteca discord.py para criar comandos que enviam perguntas e recebem respostas via chat.

Qual a diferença entre usar input() e sys.stdin.readline()?

input() já remove o caractere de nova linha e converte para string, enquanto sys.stdin.readline() devolve a linha completa, incluindo “\n”. Para a maioria dos quizzes, input() é mais simples.

Pronto! Agora você tem todas as ferramentas para criar, melhorar e distribuir seu próprio quiz interativo no terminal com Python. Experimente adicionar novos recursos, compartilhe com amigos e continue praticando programação.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Pesquisa em documentos PDF com Python e RAG
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Chatbot com PDFs e RAG em Python

    Aprenda a criar um chatbot com PDFs e RAG em Python, usando busca semântica para encontrar trechos e responder com

    Ler mais

    Tempo de leitura: 6 minutos
    23/07/2026
    Landing page simples criada com Python e Tailwind CSS
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Landing page com Python, Flask e Tailwind CSS

    Você já sentiu a necessidade de colocar uma ideia no ar rapidamente, mas se viu travado na complexidade do desenvolvimento

    Ler mais

    Tempo de leitura: 11 minutos
    19/04/2026
    Sistema de tradução automática desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Tradução automática com Python: textos e idiomas

    Criar um sistema de tradução automática com Python é uma das formas mais fascinantes de entrar no mundo da Inteligência

    Ler mais

    Tempo de leitura: 10 minutos
    17/04/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Lembretes com alarme no Python: datetime e som

    Criar um sistema de lembretes com alarme em Python é um dos projetos mais gratificantes para quem está dando os

    Ler mais

    Tempo de leitura: 10 minutos
    10/04/2026
    Extração de dados de tabelas de sites usando Python e pandas
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Tabelas web com Python e Pandas: extração de dados

    Você já se deparou com um site repleto de informações úteis organizadas em tabelas, mas sentiu que copiar e colar

    Ler mais

    Tempo de leitura: 10 minutos
    09/04/2026
    Conversão de áudio para texto usando Python gratuitamente
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Áudio para texto no Python: Whisper e SpeechRecognition

    Transformar arquivos de áudio em texto é uma das tarefas mais úteis e requisitadas na era da inteligência artificial e

    Ler mais

    Tempo de leitura: 10 minutos
    08/04/2026