1
resposta

[Dúvida] não consegui trabalhar como eu queria com o while

print('\033[0:30:41mBem vindo ao jogo de adivinhação!!!\033[m')

numero_secreto = 7

chute = int(input("Qual o numero que você acha que é:"))

acertou = (numero_secreto == chute)
maior = (numero_secreto < chute)
menor = (numero_secreto > chute)


if (acertou):
    print('Você acertou, parabénsss!!')
while (numero_secreto != chute):

    print("Você errou!")
    if (menor):
        print("O número que você escolheu é \033[0:30:41mMENOR\033[m que o número secreto!")
    elif (maior):
        print("O número que você escolheu é \033[0:30:41mMAIOR\033[m que o número secreto!")

    chute = int(input("Qual o número que você acha que è:"))

print("Fim do jogo.")
1 resposta

Oii Bruno, tudo bem?

Quando estamos trabalhando com while no Python, devemos saber que esse bloco de repetição irá reproduzir o bloco de código localizado dentro dele, enquanto esse bloco manter a condição do while como verdadeira. Ou seja, precisamos escrever o código para que dentro do laço a condição de funcionamento se torne falsa, ou o while jamais será finalizado (entra em loop infinito). No caso do seu código, não há limitação de tentativas, ou seja, o while irá continuar até o momento que alguém acertar o valor do chute. Seria essa a sua intenção?

Adiante, as variáveis que servem de condicionais para seu if e elif se encontram fora do seu while, ou seja, elas não serão alteradas caso o valor de chute seja mudado, por isso, sempre que for modificado o valor do chute, ele vai considerar o primeiro valor apenas no condicional. Um modo de corrigir isso seria colocando elas, assim como seu primeiro if, dentro do while, da seguinte forma:

print('\033[0:30:41mBem vindo ao jogo de adivinhação!!!\033[m')

numero_secreto = 7

chute = int(input("Qual o numero que você acha que é:"))
acertou = (numero_secreto == chute)
if (acertou):
    print('Você acertou, parabénsss!!')
while (numero_secreto != chute):
    acertou = (numero_secreto == chute)
    maior = (numero_secreto < chute)
    menor = (numero_secreto > chute)

    if (acertou):
        print('Você acertou, parabénsss!!')
    else:
        print("Você errou!")
        if (menor):
            print("O número que você escolheu é \033[0:30:41mMENOR\033[m que o número secreto!")
        elif (maior):
            print("O número que você escolheu é \033[0:30:41mMAIOR\033[m que o número secreto!")
        chute = int(input("Qual o número que você acha que è:"))

print("Fim do jogo.")

Mas perceba que o código está repetitivo. Uma dica que eu deixo para você é determinar um número limite de tentativas, assim, o seu código não corre o risco de entrar em loop infinito caso você não tenha conhecimento do valor correto do número secreto e também diminui a repetição de códigos, mantenho o seu algoritmo mais direto. Um modo de se fazer isso é da seguinte forma:

print('\033[0:30:41mBem vindo ao jogo de adivinhação!!!\033[m')
numero_secreto = 42
total_de_tentativas = 3
rodada = 1

while(rodada <= total_de_tentativas):
    print("Tentativa {} de {}:".format(rodada, total_de_tentativas))
    chute = int(input("Digite o seu número: "))
    acertou = numero_secreto == chute
    maior = chute > numero_secreto
    menor = chute < numero_secreto

    if(acertou):
        print("Você acertou, parabénsss!!")
    else:
        if(maior):
            print("O número que você escolheu é \033[0:30:41mMAIOR\033[m que o número secreto!")
        elif(menor):
            print("O número que você escolheu é \033[0:30:41mMENOR\033[m que o número secreto!")

    rodada = rodada + 1

print("Fim de Jogo")

Assim, seu código fica mais direto e mais seguro :)

Em caso de dúvidas, me coloco à disposição.

Grande abraço e bons estudos!

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