1
resposta

Se digitar um numero invalido, voce queima uma tentativa. E nao deveria. Escrevi uma classe, ficou assim :

Repare que no codigo , se voce insere um numero invalido, ou seja , < 1 e > 100 voce queima suas tentativas, e creio que nao deveria pois o numero digitado foi invalido. O contador de tentativas tem que zerar nesse caso. Como resolver isso ? Consegui criando uma class chamada MyRange e chamando no for...

Sera que teria algum jeito mais simples ? Da maneira que fiz funciona bem


class myRange:

    def restartFrom(self, start):
        self.start = start

    def get(self, start, end):
        self.start = start
        while self.start != end:
            yield self.start
            self.start += 1

myRange = myRange()

secret_number = 42
attempts = 3
interval = 100



for rodada in myRange.get(1,attempts+1):
    print("Tentativa {} de {}".format(rodada,attempts))
    advinha_str = input("Digite número entre 1 e 100: ")
    print("Voce digitou :", advinha_str)
    advinha = int(advinha_str)
    if (advinha < 1 or advinha > 100 ):
       print("Voce deve digitar um numero entre 1 e 100")
       myRange.restartFrom(0)
       continue 

    if (secret_number == advinha):
       print ("you gotta!")
       break
    else:
       if (advinha > secret_number):
           print ("Voce digitou um numero maior!")
       elif (advinha < secret_number):
          print("Voce digitou um mumero menor!")

print("fim de jogo")
1 resposta

Olá Persio, Tudo bem com você?

Peço desculpas pela demora em responder.

Meus parabéns pela busca de novas alternativas e desafios para poder realizar o projeto.

Sempre há diversas maneiras de se obter um mesmo resultado em programação, algumas mais simples, outras mais complexas. Uma outra abordagem mais simples de se chegar ao mesmo resultado, é como mostrado no código abaixo:

numero_secreto = 42
tentativa = 3
rodada = 1


while rodada <= tentativa:
    print("Tentativa {} de {}".format(rodada, tentativa))
    advinha_str = input("Digite número entre 1 e 100: ")
    print("Voce digitou:", advinha_str)
    advinha = int(advinha_str)
    if advinha < 1 or advinha > 100:
        print("Voce deve digitar um numero entre 1 e 100")
        continue

    elif numero_secreto == advinha:
        print("Você conseguiu!")
        break
    else:
        if advinha > numero_secreto:
            print("Voce digitou um número maior!")
            rodada += 1

        elif advinha < numero_secreto:
            print("Voce digitou um número menor!")
            rodada += 1


print("Fim de jogo")

Nesse exemplo estamos trabalhando com a função while e fazendo uma verificação entre a rodada atual e o limite de rodadas no jogo, o programa irá rodar enquanto for verdadeiro a afirmação do while: onde a rodada é menor que as tentativas.

Quando o usuário colocar um número que esteja dentro do intervalo de 1 a 100 e que não seja o número secreto, o programa executará a seguinte parte:

else:
        if advinha > numero_secreto:
            print("Voce digitou um número maior!")
            rodada += 1

        elif advinha < numero_secreto:
            print("Voce digitou um número menor!")
            rodada += 1

Nessa parte em destaque do programa, será acrescentado 1 na variável rodada e o usuário poderá fazer uma nova tentativa.

Agora, quando o jogador fornecer um valor fora do intervalo, não fazemos nada com a variável rodada, assim o jogador não será penalizado; Como temos um continue, o programa voltará ao início do laço. pedindo que o usuário forneça um novo número, como demonstrado no código abaixo:

  if advinha < 1 or advinha > 100:
        print("Voce deve digitar um número entre 1 e 100")
        continue

Observação

Uma dica de boas práticas de programação é a padronização do idioma utilizado no decorrer do código, evitando mesclar entre dois ou mais idiomas. Dessa forma, fazemos com que a leitura do código seja mais fluída e compreensível.

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

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