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
randompara 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:
- Definir
tentativas_restantes = 5(ou outro número). - Enquanto
tentativas_restantes > 0eacertou == False:- Solicitar o chute.
- Converter a entrada para
int(número inteiro). - Comparar com o número secreto usando if‑elif‑else.
- Atualizar
tentativas_restantese, 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!







