Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Meu projeto atual.

Boa noite galera, tudo bem? Estou com um problema que não consigo solucionar, quero que meu codigo valide um numero inteiro, e que não quebre ao digitar uma letra ou um float, mas não consigo fazer isso de maneira eficaz a parte em especifico é essa:

numero_escolhido = input('Digite um numero entre 1 e 100: ')

if not isinstance(numero_escolhido, int):
    print('Digite um NUMERO!')
    continue

elif numero_escolhido not in range(1, 100):
    print('Digite um numero entre 1 e 100!')
    continue
    

No momento o codigo fica em loop em "digite um numero" alguma dica? vou deixar o codigo completo a baixo.

print('######################') print('#JOGO DA ADIVINHAÇÃO!#') print('######################') print('Tente descobrir o numero secredo, se suas tentativas ou pontos chegarema a zero, você perde.')

from random import randint

numero_sorteado = randint(1, 101) total = 0 tentativas = 0 pontos = 1000

print(numero_sorteado)

dificuldade = int(input('Qual dificuldade deseja? [1] facil [2] medio [3] dificil: '))

if (dificuldade == 3): total += 3 elif (dificuldade == 2): total += 6 elif (dificuldade == 1): total+= 10 else: print('Valor invalido!')

print(f'Boa sorte! Você tem {pontos} pontos!')

while (total > 0):

print(f'Numero de tentativas: {total}')

numero_escolhido = input('Digite um numero entre 1 e 100: ')

if not isinstance(numero_escolhido, int):
    print('Digite um NUMERO!')
    continue

elif numero_escolhido not in range(1, 100):
    print('Digite um numero entre 1 e 100!')
    continue

if (dificuldade == 1):
    pontos_perdidos = (numero_escolhido - numero_sorteado)
    pontos = pontos - pontos_perdidos
elif (dificuldade == 2):
    pontos_perdidos = (numero_escolhido - numero_sorteado) - ((100 * 10) / 100)
    pontos = pontos - pontos_perdidos
else:
    pontos_perdidos = (numero_escolhido - numero_sorteado) - ((100 * 25) / 100)
    pontos = pontos - pontos_perdidos

print(f'Tentativas restantes: {total}')

if (pontos <= 0):
    print('Seus pontos acabaram, você perdeu.')
    break

if (numero_escolhido == numero_sorteado):
    print(f'Você acertou o numero sorteado: {numero_sorteado}')
    print(f'Foram necessarias {tentativas} tentativas!')
    print(f'Sobraram {pontos}!')
elif (numero_escolhido > numero_sorteado):
    print(f'o numero digitado foi... {numero_escolhido}! o numero é maior que o sorteado.')
    tentativas += 1
elif (numero_escolhido < numero_sorteado):
    print(f'O numero digitado foi... {numero_escolhido}! o numero é menor que o sorteado.')
    tentativas += 1

total -= 1

print('Fim de jogo!')

2 respostas
solução!

Olá, Lucas! Espero que esteja tudo bem com você.

Vamos lá, o problema que você está enfrentando é porque a função input() do Python sempre retorna uma string. Então, quando você tenta verificar se o valor inserido é um inteiro com isinstance(numero_escolhido, int), isso sempre retorna False, porque numero_escolhido é uma string.

Para resolver isso, você pode tentar converter a entrada para um inteiro usando a função int(). Se a entrada não puder ser convertida para um inteiro (por exemplo, se for uma letra ou um float), um ValueError será lançado. Você pode capturar esse erro usando um bloco try/except.

Aqui está como você pode modificar seu código:

while (total > 0):
    print(f'Numero de tentativas: {total}')

    try:
        numero_escolhido = int(input('Digite um numero entre 1 e 100: '))
    except ValueError:
        print('Digite um NUMERO!')
        continue

    if numero_escolhido not in range(1, 100):
        print('Digite um numero entre 1 e 100!')
        continue

    # ... resto do seu código ...

Nesse código, tentamos converter a entrada para um inteiro. Se isso falhar (por exemplo, se o usuário digitar uma letra), um ValueError será lançado e capturado, e a mensagem 'Digite um NUMERO!' será impressa. Então, o loop continuará e o usuário será solicitado a digitar um número novamente. Se a entrada puder ser convertida para um inteiro, o código prosseguirá para verificar se o número está no intervalo de 1 a 100.

Espero ter ajudado e bons estudos!

Muito obrigado pela ajuda, eu acabei conseguindo fazer, mas muito interessante esse try: Obrigado pela ajuda.