Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Jogo adivinhando o número( Boas práticas)

A forma de verificação, se o número se encontra entre 1 e 100, do meu código e do código da Alura, estão diferentes. De fato, o da Alura parece mais legível por estar separado das outras condições. E embora saiba, que dá para chegar ao mesmo objetivo de várias formas, gostaria de saber se a forma que fiz não é considerada errada?

Meu código:

import random

def gerar_numero_aleatorio():
    numero_secreto = random.randint(1,100)
    
    return numero_secreto

def pedir_numero(numero_secreto):
   palpite = 0
   tentativas = 0
   while True:
        
        try:
            palpite = int(input('Adivinhe o número secreto (entre 1 e 100):'))
            tentativas += 1

            if palpite < 0 or palpite > 100:
                print('Erro: Digite apenas números entre 1 e 100. Tente novamente')            
            elif palpite < numero_secreto:
                print(f'O número secreto é maior que {palpite}. Tente novamente!')  
            elif palpite > numero_secreto:
                print(f'O número secreto é menor que {palpite}. Tente novamente!')
            else:
                palavra_tentativa = "tentativa" if tentativas == 1 else 'tentativas'
                print(f'Parabéns!!! Você acertou o número secreto: {numero_secreto} em {tentativas} {palavra_tentativa}.')
                break 
            
        except ValueError:
            print('Erro. Digite apenas números inteiros ')
        
            
numero_gerado = gerar_numero_aleatorio()
pedir_numero(numero_gerado)

Código Alura:

import random
 
def adivinhar_numero():
    numero_secreto = random.randint(1, 100)
    tentativas = 0
 
    while True:
        try:
            palpite = int(input("Tente adivinhar o número (1-100): "))
 
            if not 1 <= palpite <= 100:
                raise ValueError("Número fora do intervalo! Digite um número entre 1 e 100.")
 
            tentativas += 1
 
            if palpite < numero_secreto:
                print("Muito baixo! Tente novamente.")
            elif palpite > numero_secreto:
                print("Muito alto! Tente novamente.")
            else:
                print(f"Parabéns! Você acertou o número {numero_secreto} em {tentativas} tentativas.")
                break
 
        except ValueError as e:
            print(f"Entrada inválida: {e}")
 
adivinhar_numero()
1 resposta
solução!

Oi, Joanevan.

Sua forma de implementar a verificação não está errada, ela funciona perfeitamente e cumpre o objetivo. A diferença principal está mais no estilo e na legibilidade do código, não na correção. Vamos comparar os pontos-chave:

Sua abordagem:

Você trata a verificação do intervalo dentro da cadeia de if/elif, junto com as condições de maior/menor. Isso é válido, mas acaba misturando responsabilidades: verificar se o número é válido e comparar o palpite com o número secreto.

No seu caso:

if palpite < 0 or palpite > 100:
    print('Erro: Digite apenas números entre 1 e 100. Tente novamente')            
elif palpite < numero_secreto:
    ...

Funciona bem, mas a lógica fica um pouco mais “carregada”, porque a condição de validade e as condições de comparação estão no mesmo fluxo.

Abordagem do curso:

Eles optaram por separar a verificação de intervalo das comparações com o número secreto. Quando o palpite não está entre 1 e 100, eles já “cortam” o fluxo levantando uma exceção (raise ValueError).

No caso deles:

if not 1 <= palpite <= 100:
    raise ValueError("Número fora do intervalo! Digite um número entre 1 e 100.")

Assim, só seguem para as comparações (palpite < numero_secreto, palpite > numero_secreto, etc.) depois de ter certeza de que o valor está dentro do intervalo. Isso deixa a leitura mais clara, porque separa bem as etapas:

  1. validar entrada,
  2. contar tentativas,
  3. comparar com o número secreto.

O que você fez não é errado. É apenas uma forma diferente de estruturar a lógica. O código do curso prioriza clareza e legibilidade, destacando a validação antes de avançar para o resto, mas a sua versão está correta e funcional.

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