Fundamentos do Python para Iniciantes

0/31 aulas0%
projeto

Projeto: Jogo de Adivinhação de Número

Aprenda sobre projeto: jogo de adivinhação de número

60 min
Aula 5 de 5

Projeto: Jogo de Adivinhação de Número 🎮

Olá, futuros programadores! 👋 Sejam bem-vindos a mais uma aula do nosso curso de Fundamentos do Python para Iniciantes.

Neste módulo, mergulhamos fundo nas Estruturas de Controle de Fluxo, aprendendo como fazer nossos programas tomarem decisões e repetirem ações. Agora, é hora de colocar todo esse conhecimento em prática de uma forma divertida e interativa: construiremos um Jogo de Adivinhação de Número! 🚀


1. Introdução: O Desafio da Adivinhação 🧠

O objetivo deste projeto é criar um jogo simples onde o computador "pensa" em um número secreto, e o jogador tenta adivinhá-lo. O computador dará dicas (se o palpite foi muito alto ou muito baixo) até que o jogador acerte o número.

Este projeto é perfeito para consolidar seu entendimento sobre:

  • Geração de números aleatórios com o módulo random.
  • Entrada de dados do usuário com input().
  • Conversão de tipos (string para inteiro) com int().
  • Laços de repetição (while) para continuar o jogo até o acerto.
  • Estruturas condicionais (if, elif, else) para comparar palpites e dar feedback.
  • Mensagens para o usuário com print().

Vamos construir juntos este jogo e ver a magia da programação acontecer! ✨


2. Explicação Detalhada: Construindo o Jogo Passo a Passo 🛠️

Para criar nosso jogo, vamos seguir uma série de passos lógicos. Pense em cada passo como um bloco de construção do nosso programa.

2.1. Gerando o Número Secreto 🎲

Primeiro, precisamos que o computador escolha um número aleatório. Para isso, usaremos o módulo random do Python.

import random
 
# Gera um número inteiro aleatório entre 1 e 100 (inclusive)
numero_secreto = random.randint(1, 100)
print(f"DEBUG: O número secreto é {numero_secreto}") # Apenas para testar, remover depois!
  • import random: Esta linha importa o módulo random, que contém funções para gerar números aleatórios.
  • random.randint(1, 100): Esta função retorna um número inteiro aleatório dentro do intervalo especificado, incluindo ambos os limites (1 e 100).

2.2. O Laço Principal do Jogo: while 🔄

O jogo deve continuar enquanto o jogador não acertar o número. Isso é um caso clássico para um laço while. Precisamos de uma variável para controlar se o jogador acertou ou não.

import random
 
numero_secreto = random.randint(1, 100)
acertou = False # Variável de controle: o jogador ainda não acertou
 
print("Bem-vindo ao Jogo de Adivinhação!")
print("Estou pensando em um número entre 1 e 100.")
 
while not acertou: # Enquanto 'acertou' for False (ou seja, enquanto não acertar)
    # Aqui vai a lógica para pedir o palpite e verificar
    pass # 'pass' é um placeholder, será substituído

2.3. Recebendo o Palpite do Usuário 💬

Dentro do laço while, precisaremos pedir ao usuário que digite seu palpite. A função input() é perfeita para isso. Lembre-se que input() sempre retorna uma string, então precisaremos convertê-la para um int para poder comparar com numero_secreto.

# ... dentro do while not acertou:
    palpite_str = input("Qual é o seu palpite? ")
    
    # Tentativa de converter para inteiro
    try:
        palpite = int(palpite_str)
    except ValueError:
        print("Entrada inválida! Por favor, digite um número inteiro.")
        continue # Volta para o início do laço para pedir novamente
    
    print(f"Você palpitou: {palpite}")
  • input(): Exibe uma mensagem e espera que o usuário digite algo, retornando o que foi digitado como uma string.
  • int(): Tenta converter uma string para um número inteiro. Se a string não for um número válido, ela gerará um ValueError.
  • try...except: Bloco de tratamento de erros. Se um ValueError ocorrer durante a conversão, o programa não trava, mas executa o código dentro do except, informando o usuário e usando continue para pular o restante da iteração atual e ir para a próxima.

2.4. Comparando o Palpite e Dando Dicas (if/elif/else) 🤔

Agora, a parte crucial: comparar o palpite do usuário com o numero_secreto e dar o feedback apropriado.

# ... dentro do while not acertou:
    # ... (código para pedir e converter o palpite)
 
    if palpite < numero_secreto:
        print("Seu palpite foi muito baixo. Tente um número maior!")
    elif palpite > numero_secreto:
        print("Seu palpite foi muito alto. Tente um número menor!")
    else: # palpite == numero_secreto
        print(f"Parabéns! Você acertou o número secreto: {numero_secreto}! 🎉")
        acertou = True # Mudar a variável de controle para sair do laço
  • if/elif/else: A estrutura condicional verifica se o palpite é menor, maior ou igual ao número secreto.
  • Quando o jogador acerta, mudamos acertou para True. Isso fará com que a condição while not acertou se torne while not True (que é while False), encerrando o laço e o jogo.

3. Código de Exemplo Completo 🧑‍💻

Juntando todas as partes, aqui está o código completo para o nosso Jogo de Adivinhação de Número, seguindo as melhores práticas de legibilidade e tratamento básico de erros.

import random
 
def jogar_adivinhacao():
    """
    Função principal do Jogo de Adivinhação de Número.
    O computador escolhe um número e o usuário tenta adivinhá-lo.
    """
    print("*************************************")
    print(" Bem-vindo ao Jogo de Adivinhação! 🎮")
    print("*************************************")
 
    # 1. Gerar um número secreto aleatório entre 1 e 100
    numero_secreto = random.randint(1, 100)
    
    # Variável para controlar se o jogador acertou
    acertou = False
    
    # Contador de tentativas
    tentativas = 0
 
    print("Estou pensando em um número entre 1 e 100.")
    print("Tente adivinhar qual é!")
 
    # 2. Laço principal do jogo: continua enquanto o jogador não acertar
    while not acertou:
        try:
            # 3. Pedir o palpite do usuário
            palpite_str = input("\nQual é o seu palpite? ")
            palpite = int(palpite_str) # Converter para inteiro
            tentativas += 1 # Incrementa o contador de tentativas
 
            # 4. Validar se o palpite está dentro do intervalo
            if palpite < 1 or palpite > 100:
                print("Por favor, digite um número entre 1 e 100.")
                continue # Volta para o início do laço, sem contar esta tentativa inválida
 
            print(f"Você palpitou: {palpite}")
 
            # 5. Comparar o palpite com o número secreto e dar dicas
            if palpite < numero_secreto:
                print("Seu palpite foi muito baixo. Tente um número maior! ⬆️")
            elif palpite > numero_secreto:
                print("Seu palpite foi muito alto. Tente um número menor! ⬇️")
            else: # palpite == numero_secreto
                print(f"Parabéns! Você acertou o número secreto: {numero_secreto}! 🎉")
                print(f"Você levou {tentativas} tentativas para acertar.")
                acertou = True # Mudar a variável de controle para sair do laço
 
        except ValueError:
            # Lidar com entradas não numéricas
            print("Entrada inválida! Por favor, digite um número inteiro. 🛑")
            # Não incrementamos tentativas para entradas inválidas
 
    print("\nObrigado por jogar! Até a próxima! 👋")
 
# Para executar o jogo quando o script for rodado diretamente
if __name__ == "__main__":
    jogar_adivinhacao()
 

Como rodar este código:

  1. Salve o código em um arquivo chamado adivinhacao.py.
  2. Abra seu terminal ou prompt de comando.
  3. Navegue até a pasta onde você salvou o arquivo.
  4. Execute o comando: python adivinhacao.py
  5. Divirta-se jogando!

4. Exercícios e Desafios 🚀

Agora que você tem o jogo base, é hora de personalizá-lo e adicionar novas funcionalidades!

Tarefas Básicas (Revise e Entenda o Código):

  • Rodar o código fornecido e garantir que ele funcione.
  • Mudar o intervalo de números aleatórios (ex: de 1 a 50).
  • Adicionar comentários explicativos em cada linha que você entender melhor.

Desafios de Melhoria:

  1. Limitar o Número de Tentativas:

    • Adicione uma variável limite_tentativas (ex: 5 ou 10).
    • Faça o jogo terminar se o jogador exceder esse limite, informando o número secreto.
    • Dica: Use um for loop com range() ou adicione uma condição ao while loop.
  2. Perguntar se Quer Jogar Novamente:

    • Ao final do jogo, pergunte ao usuário se ele gostaria de jogar novamente (S/N).
    • Se sim, reinicie o jogo (você pode usar um while externo ou chamar a função jogar_adivinhacao() novamente).
  3. Níveis de Dificuldade:

    • No início do jogo, pergunte ao usuário o nível de dificuldade: "Fácil" (1-100, 10 tentativas), "Médio" (1-50, 7 tentativas), "Difícil" (1-20, 5 tentativas).
    • Ajuste o random.randint() e o limite_tentativas de acordo com a escolha.
  4. Armazenar Recordes:

    • Se o jogador acertar, compare o número de tentativas dele com o "melhor recorde" anterior (pode ser uma variável global simples ou salva em um arquivo, para os mais avançados).
    • Se o jogador quebrar o recorde, parabenize-o e atualize o recorde.
  5. Feedback Mais Detalhado:

    • Em vez de apenas "muito alto" ou "muito baixo", você pode adicionar "quase lá!" se o palpite estiver muito próximo do número secreto (ex: diferença de 1 a 5).

5. Resumo e Próximos Passos 🌟

Parabéns! Você acaba de construir seu primeiro jogo interativo em Python, aplicando de forma prática as Estruturas de Controle de Fluxo que aprendemos.

Neste projeto, você:

  • Utilizou o módulo random para gerar aleatoriedade.
  • Interagiu com o usuário usando input() e print().
  • Dominou a conversão de tipos com int() e o tratamento de erros com try-except.
  • Aplicou laços while para repetições controladas.
  • Usou if, elif, else para tomar decisões e dar feedback.
  • Organizou seu código em uma função, uma boa prática de programação.

Este é apenas o começo! Os conceitos que você aplicou aqui são fundamentais e serão a base para projetos muito mais complexos. Continue explorando os desafios, pois eles o ajudarão a solidificar ainda mais seu conhecimento e a pensar como um programador.

Nos próximos módulos, vamos explorar tópicos como listas, tuplas, dicionários e funções mais avançadas, o que abrirá portas para a criação de programas ainda mais sofisticados!

Mantenha a curiosidade e o entusiasmo! Até a próxima aula! 👋💻

© 2025 Escola All Dev. Todos os direitos reservados.

Projeto: Jogo de Adivinhação de Número - Fundamentos do Python para Iniciantes | escola.all.dev.br