2
respostas

Erro do input fecha o programa: "ValueError: invalid literal for int() with base 10:"

Quando o input nos jogos de adivinhação e forca recebem um input que não é um número (ex.: -, +, $, #, a, etc) , o programa fecha e apresenta o seguinte erro:

"ValueError: invalid literal for int() with base 10:"

  1. Como corrigir esse erro para o programa continuar até o usuário colocar um número válido ou então dar a opção do usuário sair do jogo?
  2. Como restringir as opções de input, por exemplo, se eu quisesse fazer uma adivinhação com letras de A a Z?
2 respostas

Boa tarde Gabriel, tu tens que testar a entrada antes de fazer a conversão pra int.

chute_str = input("Digite um número entre 1 e 100: ")
print("Você digitou " , chute_str)
if chute_str.isdigit():
    chute = int(chute_str)

Pra testar se existem somente caracteres do alfabeto, tem o método isalpha(). Espero ter ajudado!

1 - Para trancar o usuário em uma etapa, você pode utilizar o loop while:

number = 0
while number <= 0 or number > 100:
    n = input('Digite um número entre 1 e 100: ')

    if n.isnumeric():   # valida se o número é do tipo inteiro
        n = int(n)  # aqui é seguro convertermos a variável do tipo string para o tipo int
        if n > 0 and n <= 100:
            number = n
            #  número válido, aqui já saímos da condição do while e saímos do loop
        else:
            print('Número inválido. Digite um número entre 1 e 100')
            # mensagem "deseja continuar" + tratamento da resposta aqui
    else:
        print('Número inválido!')
        # mensagem "deseja continuar" + tratamento da resposta aqui

2 - Para restringir o input para as letras de A a Z, você pode facilmente utilizar expressões regulares (biblioteca re) para criar os patterns. Mas se quiser fazer manualmente, você pode criar uma lista manualmente com os caracteres "a" até "z" e depois replicar para as maísculas, ou pode simplesmente reduzir tudo às minúsculas utilizando a API lower() no input para transformar o input em minúscula.

answer = input('Digite uma letra de A à Z: ')

# Convertemos os números de 97 até 122 em caracteres, que retornar os caracteres de "a" à "z" minúsculos
# Para maiúsculos use o intervalo de 65 à 90

if answer.lower() in [chr(l) for l in range(97, 123)]:  # se o input for igual à alguma das letras contidas na lista
    print('Caractere válido')
else:
    print('Erro: Digite uma letra de A á Z')