2
respostas

[Dúvida] Jogo de adivinhar o número

Estava tendo um problema quando fazia verifica_palpite() chamar novamente entrada_usuario(), quando acertava o número, ao invés de parar ele continuava pedindo para o usuario digitar outo número, consegui resolver colocando outro try except com outra condicional no verifica_palpite(), mas queria ter aproveitado o código ao invés de ter deixado assim. Como poderia ter feito de forma melhor ?

main.py

from sorteiaNumero import entrada_usuario, sorteia_numero

numero_sorteado = sorteia_numero()
entrada_usuario(numero_sorteado)

sorteiaNumero.py

import random
def sorteia_numero():     
     return random.randint(1,100)

def entrada_usuario(numero_sorteado):
    try:
        palpite = int(input('Digite um número entre 1 e 100: '))
        if 1 <= palpite <= 100:
            verifica_palpite(palpite, numero_sorteado)
        else:
            print(type(palpite))
            print(f'O número {palpite} não é valido, digite um número entre 1 e 100')
            entrada_usuario(numero_sorteado)
    except ValueError:
        print('Digite apenas números inteiros entre 1 e 100')
        entrada_usuario(numero_sorteado)

def verifica_palpite(palpite, numero_sorteado):
    while True:
        if palpite == numero_sorteado:
            print(f'Parabéns você acertou o número {numero_sorteado}')
            return
        elif palpite < numero_sorteado:
            print(f'O número sorteado é maior que {palpite}! Tente novamete')
        else:
             print(f'O número sorteado é menor que {palpite}! Tente novamete')
        
        try:
            palpite = int(input('Digite um novo palpite: '))
            if not 1 <= palpite <= 100:
                print('Digite um número entre 1 e 100')
        except ValueError:
            print('Digite apenas números inteiros entre 1 e 100')

    
       
2 respostas

Olá William! Como vai?

Uma abordagem mais limpa seria utilizar um loop na função entrada_usuario() para continuar solicitando palpites até que o usuário acerte o número. Dessa forma, você pode remover a necessidade de chamar entrada_usuario() novamente dentro da função verifica_palpite(). Veja como isso pode ser feito:

import random

def sorteia_numero():     
     return random.randint(1, 100)

def entrada_usuario(numero_sorteado):
    while True:
        try:
            palpite = int(input('Digite um número entre 1 e 100: '))
            if 1 <= palpite <= 100:
                if verifica_palpite(palpite, numero_sorteado):
                    break
            else:
                print(f'O número {palpite} não é válido, digite um número entre 1 e 100')
        except ValueError:
            print('Digite apenas números inteiros entre 1 e 100')

def verifica_palpite(palpite, numero_sorteado):
    if palpite == numero_sorteado:
        print(f'Parabéns você acertou o número {numero_sorteado}')
        return True
    elif palpite < numero_sorteado:
        print(f'O número sorteado é maior que {palpite}! Tente novamente')
    else:
        print(f'O número sorteado é menor que {palpite}! Tente novamente')
    return False

numero_sorteado = sorteia_numero()
entrada_usuario(numero_sorteado)

Neste exemplo, a função entrada_usuario() agora contém um loop while que continua pedindo ao usuário para inserir um número até que verifica_palpite() retorne True, indicando que o número foi acertado. A função verifica_palpite() foi ajustada para retornar True quando o palpite estiver correto, permitindo que o loop em entrada_usuario() seja interrompido.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Boa tarde!

Obrigado pela sugestão!