Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] Jogo de adivinhar o número

import random
import os

def iniciar_jogo():
    nome = input("Digite seu nome: ").strip()
    print(f"Olá, {nome.upper()}! Bem-vindo(a) ao jogo de adivinhação.")

    while True:
        numero_secreto = random.randint(0, 100)
        erros_validacao = 0  # <-- Contador de erros zera a cada nova partida
        
        print("\nEu gerei um número entre 0 e 100. Você tem 3 chances para adivinhar!")

        for tentativa in range(1, 4):
            if tentativa == 3:
                tipo = "par" if numero_secreto % 2 == 0 else "ímpar"
                print(f"--> DICA FINAL: O número é {tipo}.")

            while True:
                # Se o usuário errar a digitação 3 vezes, encerra o programa
                if erros_validacao >= 3:
                    print("\nVocê digitou dados inválidos 3 vezes. Jogo encerrado por segurança!")
                    return # O 'return' sai da função e finaliza o script na hora

                entrada = input(f"\nTentativa {tentativa}/3 - Adivinhe o número: ")
                
                try:
                    palpite = int(entrada)
                    if palpite < 0 or palpite > 100:
                        print("Erro: O número deve estar entre 0 e 100. Tente novamente.")
                        erros_validacao += 1 # <-- Adiciona 1 ao erro
                    else:
                        break # Palpite válido, sai do loop de validação
                        
                except ValueError:
                    print("Erro: Você digitou uma letra ou símbolo. Digite apenas números!")
                    erros_validacao += 1 # <-- Adiciona 1 ao erro

            # Lógica de acerto ou erro
            if palpite == numero_secreto:
                print("Parabéns! Você acertou!")
                break 
            else:
                if tentativa < 3:
                    if palpite < numero_secreto:
                        print("O número secreto é MAIOR.")
                    else:
                        print("O número secreto é MENOR.")
                else:
                    print(f"Que pena, você esgotou suas tentativas! O número era: {numero_secreto}")

        jogar_novamente = input("\nDeseja jogar novamente? (sim/s ou nao/n): ").strip().lower()
        
        if jogar_novamente not in ["sim", "s"]:
            print("Obrigado por jogar! Até a próxima.")
            break 
            
        os.system('cls' if os.name == 'nt' else 'clear')

iniciar_jogo()
1 resposta

Fala, Marinaldo! Tudo bom?

Agradeço por compartilhar sua solução no fórum!

Curti demais como explorou o random.randint para gerar números aleatórios com Python, compreendeu perfeitamente a importância da validação de entrada para garantir segurança e utilizou bem o loop while para controlar tentativas e reiniciar o jogo.

Algo bem legal para complementar é extrair a lógica de validação para uma função separada. Dessa maneira:

def validar_entrada(entrada, erros_validacao):
    try:
        palpite = int(entrada)
        if 0 <= palpite <= 100:
            return palpite, erros_validacao
        else:
            print("Erro: O número deve estar entre 0 e 100.")
            return None, erros_validacao + 1
    except ValueError:
        print("Erro: Digite apenas números!")
        return None, erros_validacao + 1

Isso faz com que o código fique mais organizado e fácil de manter, já que a validação pode ser reaproveitada em diferentes pontos.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Mensagens claras: dar feedback objetivo ao jogador em cada etapa.
  • Estrutura modular: dividir o jogo em algumas funções menores e específicas.
  • Controle de fluxo: usar return de forma estratégica para encerrar ou reiniciar o jogo.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você prefere deixar o jogo com dicas como "maior/menor" e "par/ímpar" ou tornar o desafio mais difícil sem nenhuma pista extra?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!