Jogo de adivinhação de número em Python

Atualizado em: 10/03/2026
Tempo de leitura: 6 minutos

O Jogo de adivinhação de número em Python é um clássico projeto para quem está iniciando na programação e quer praticar lógica, estruturas de controle e manipulação de entrada do usuário. Neste artigo você vai aprender, passo a passo, como montar esse jogo, entender cada parte do código e ainda descobrir como melhorar a experiência do jogador.

Como funciona o Jogo de adivinhação de número em Python

O objetivo é simples: o computador escolhe aleatoriamente um número dentro de um intervalo definido (por exemplo, de 1 a 100) e o jogador tenta adivinhar esse número. A cada tentativa, o programa informa se o chute foi maior ou menor que o número secreto, até que o acerto ocorra ou o número máximo de tentativas seja atingido.

Para que tudo isso funcione, precisamos combinar alguns conceitos básicos da linguagem, como variáveis, tipos de dados, estruturas de decisão (if‑elif‑else) e laços de repetição (while).

Estrutura passo a passo do código

Antes de escrever uma única linha, é útil planejar a lógica do jogo. Abaixo, descrevemos os principais blocos que compõem o programa.

  • Importar módulos necessários: usaremos o módulo random para gerar o número aleatório.
  • Definir o intervalo: escolher os limites inferior e superior (ex.: 1 e 100).
  • Gerar o número secreto: random.randint(limite_inferior, limite_superior).
  • Solicitar a primeira tentativa ao usuário usando input.
  • Iniciar o laço de tentativas que se repete enquanto o jogador não acertar e ainda houver tentativas disponíveis.
  • Comparar o chute com o número secreto e dar feedback (maior ou menor).
  • Contabilizar tentativas e encerrar o jogo quando o limite for atingido.
  • Exibir mensagem final indicando vitória ou derrota.

Implementando o laço de tentativa com while

O coração do jogo está no laço que repete as perguntas ao usuário. Utilizamos a estrutura while porque não sabemos quantas vezes o jogador precisará tentar; o loop só termina quando a condição de vitória ou de esgotamento de tentativas for satisfeita.

Um exemplo de fluxo:

  1. Definir tentativas_restantes = 5 (ou outro número).
  2. Enquanto tentativas_restantes > 0 e acertou == False:
    • Solicitar o chute.
    • Converter a entrada para int (número inteiro).
    • Comparar com o número secreto usando if‑elif‑else.
    • Atualizar tentativas_restantes e, se necessário, exibir dica.

Esse padrão garante que o programa seja robusto e fácil de entender, mesmo para quem está aprendendo.

Tratando erros de entrada

Um ponto crítico é garantir que o usuário digite apenas números válidos. Caso ele insira texto ou um número fora do intervalo, o programa deve avisar e solicitar um novo chute sem contar a tentativa como erro.

Para isso, usamos try / except (captura de exceções) e verificamos se o valor está dentro dos limites definidos. Um trecho ilustrativo:

try:
  chute = int(input(“Digite um número entre 1 e 100: “))
except ValueError:
  print(“Por favor, informe apenas números inteiros.”)
else:
  if chute < limite_inferior or chute > limite_superior:
    print(“Número fora do intervalo permitido.”)

Essa abordagem evita que o programa quebre inesperadamente e melhora a experiência do usuário.

Melhorias avançadas

Depois de dominar a versão básica, você pode acrescentar recursos que tornam o jogo mais interativo e didático.

  • Contador de tentativas com enumerate: exibe o número da tentativa atual, facilitando o acompanhamento.
  • Histórico de chutes: armazene cada tentativa em uma lista e mostre ao final.
  • Dicas de proximidade: informe se o chute está “quente” ou “frio” comparando a diferença absoluta.
  • Modo multiplayer: permita que dois jogadores alternem as tentativas, usando for para percorrer as rodadas.
  • Interface gráfica com Tkinter (fora do escopo deste artigo, mas uma ótima prática).

Testando o jogo

Mesmo um projeto simples deve ser testado. Você pode escrever testes unitários que verificam, por exemplo, se a função que gera o número aleatório está dentro do intervalo esperado ou se a lógica de comparação retorna o feedback correto.

Um teste básico poderia ser:

def test_comparacao():
  assert comparar(50, 30) == “maior”
  assert comparar(30, 50) == “menor”
  assert comparar(42, 42) == “acertou”

Executar esses testes ajuda a garantir que alterações futuras não quebrem funcionalidades já consolidadas.

Perguntas Frequentes

Qual módulo devo usar para gerar números aleatórios?

O módulo padrão random contém a função randint, que devolve um inteiro dentro do intervalo especificado.

Como impedir que o usuário digite letras ou símbolos?

Utilize try / except ValueError ao converter a entrada com int(). Caso a conversão falhe, peça ao usuário que tente novamente.

É possível definir um número máximo de tentativas?

Sim. Basta criar uma variável, como tentativas_restantes, e decrementá‑la a cada chute.

Posso mudar o intervalo de números sem alterar o código?

Sim. Defina duas variáveis, limite_inferior e limite_superior, e use‑as tanto na geração do número quanto nas validações.

Como armazenar os chutes feitos pelo jogador?

Crie uma lista vazia (historico = []) e adicione cada chute com historico.append(chute). No final, exiba a lista.

É possível jogar novamente sem reiniciar o script?

Envolva todo o fluxo em uma função e, ao final, pergunte ao usuário se deseja jogar outra partida. Se a resposta for afirmativa, chame a função novamente.

Qual a diferença entre while e for neste contexto?

while repete enquanto uma condição for verdadeira, ideal quando não sabemos quantas tentativas serão necessárias. for itera sobre uma sequência fixa, útil quando o número máximo de tentativas já está definido.

Como melhorar a experiência visual no terminal?

Use a biblioteca tqdm para exibir barras de progresso ou cores ANSI para destacar mensagens.

Devo usar funções para organizar o código?

Sim. Separe a lógica de geração, validação e feedback em funções distintas. Isso facilita a leitura e a manutenção.

Onde encontrar mais projetos para praticar Python?

Visite a página Python para iniciantes – guia completo ou explore repositórios no GitHub que oferecem desafios de programação.

Agora que você conhece todos os detalhes, que tal colocar a mão na massa e criar seu próprio Jogo de adivinhação de número em Python? Compartilhe seu código, experimente as melhorias sugeridas e continue evoluindo como programador!

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Projetos
    Foto do Leandro Hirt

    Como criar um gerenciador de senhas simples com Python

    A segurança digital tornou-se uma prioridade no cotidiano de qualquer pessoa que navega na internet. Com dezenas de contas e

    Ler mais

    Tempo de leitura: 12 minutos
    01/03/2026
    Projetos
    Foto do Leandro Hirt

    Como gerar QR Code com Python em poucos minutos

    Gerar um código de resposta rápida, o famoso QR Code, tornou-se uma habilidade essencial para desenvolvedores que buscam facilitar a

    Ler mais

    Tempo de leitura: 12 minutos
    26/02/2026
    Projetos
    Foto do Leandro Hirt

    Como fazer seu primeiro jogo de Pong com Python

    Aprender como fazer seu primeiro jogo de Pong com Python é um dos marcos mais emocionantes para qualquer iniciante na

    Ler mais

    Tempo de leitura: 11 minutos
    24/02/2026
    Ilustração de uma cobra com o logo do Python centralizado
    Projetos
    Foto do Leandro Hirt

    Criando o jogo da cobrinha (Snake) em Python

    Desenvolver o seu próprio jogo da cobrinha (Snake) em Python é um dos marcos mais importantes na jornada de qualquer

    Ler mais

    Tempo de leitura: 11 minutos
    10/02/2026
    Projetos
    Foto do Leandro Hirt

    Criando jogos com Pygame para iniciantes

    Aprender como começar a jornada de criando jogos com Pygame para iniciantes é um dos marcos mais empolgantes na vida

    Ler mais

    Tempo de leitura: 10 minutos
    10/02/2026
    Projetos
    Foto do Leandro Hirt

    Desenhando com Turtle: Guia para iniciantes

    Aprender a programar pode parecer uma tarefa intimidadora no início, repleta de linhas de código complexas e termos abstratos. No

    Ler mais

    Tempo de leitura: 9 minutos
    09/02/2026