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

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

    Fundamentos
    Foto do Leandro Hirt

    Como usar o módulo time em Python para iniciantes

    O tempo é um dos recursos mais preciosos em qualquer aplicação tecnológica. Seja para medir o desempenho de uma função,

    Ler mais

    Tempo de leitura: 11 minutos
    14/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Por que seu script trava? Descubra o Threading no Python

    Você já sentiu a frustração de rodar um código e, de repente, a interface parar de responder ou o terminal

    Ler mais

    Tempo de leitura: 8 minutos
    13/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Operações matemáticas com o módulo math em Python

    O módulo math é uma das ferramentas mais poderosas e essenciais para quem está começando a aprender programação. Ao realizar

    Ler mais

    Tempo de leitura: 8 minutos
    13/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Como fazer backup automático de arquivos com Python

    Garantir a segurança dos seus dados é uma das tarefas mais importantes no dia a dia de qualquer pessoa que

    Ler mais

    Tempo de leitura: 8 minutos
    12/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o módulo sys em Python e para que ele serve

    O universo da programação oferece ferramentas poderosas que muitas vezes passam despercebidas pelos iniciantes. Uma dessas ferramentas é o módulo

    Ler mais

    Tempo de leitura: 9 minutos
    11/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Introdução ao Módulo itertools em Python

    Se você já sentiu que seus loops estão ficando bagunçados ou que está escrevendo código demais para realizar tarefas simples

    Ler mais

    Tempo de leitura: 9 minutos
    11/02/2026