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

Execução sem entrada

Quando o usuário simplesmente digita "enter" sem inserir nenhum dado, aparece a seguinte mensagem de erro

Digite seu chute: Traceback (most recent call last): File "C:/Users/MarcoAntonio/PycharmProjects/untitled/teste.py", line 6, in chute = int(input("Digite seu chute: ")) ValueError: invalid literal for int() with base 10: ''

Process finished with exit code 1

Como fazer para evitar isto?

print("Bem Vindo ao jogo de advinhação!")
print("--------------------------------")

numero_secreto = 40

chute = int(input("Digite seu chute: "))

if(numero_secreto == chute):
    print("Você acertou!")
else:
    print("Você errou!")

4 respostas

Oi Marco, tudo bem?

Isto acontece porque o programa está esperando receber como entrada um número, entretanto, está recebendo uma string vazia. E isto não ocorre somente com o enter, se você digitar uma letra por exemplo, aparecerá este erro também, pois, estaremos digitando uma entrada inválida. Para solucionar isto, basta repetir o processo de pegar o valor do chute enquanto o mesmo não for um inteiro. Segue abaixo um exemplo:

print("Bem Vindo ao jogo de advinhação!")
print("--------------------------------")

numero_secreto = 40
diferente_de_inteiro = True
chute = 0

while(diferente_de_inteiro):
    try:
        chute = int(input("Digite seu chute: "))
        diferente_de_inteiro = False
    except ValueError:
        print("Erro, digite apenas números")


if(numero_secreto == chute):
    print("Você acertou!")
else:
    print("Você errou!")

Ou seja, enquanto a entrada for diferente de um número inteiro tente pegar o valor do chute, caso não seja um número inteiro, lance uma exceção e diga que nosso programa só aceita números. Repita este procedimento até que seja uma entrada válida, ou seja, um número. Quando a entrada for válida, saia deste laço de repetição e confira se o número secreto é igual ao chute.

Caso ainda não tenha visto no curso sobre laços de repetição e variáveis booleanas(True and False) fique tranquilo, mais adiante o curso abordará estes conceitos.

Pegou a ideia? Qualquer dúvida estou a disposição. Espero ter ajudado!!!

Olá Nádia, obrigado pela solução. Mas ainda não aprendi o uso do "try" e o "except" no laço. O que eles exatamente fazem?

solução!

Oi Marco, tudo bem ?

A palavra reservada try serve para que você tente executar um trecho de código e caso não seja possível executar este trecho por alguma razão, você lida com este erro no bloco except. No código acima, pedimos para tentar pegar o valor do chute do usuário e se este valor por algum motivo não for um número, irá gerar uma exceção(erro), e este erro pode ser tratado no bloco except informando ao usuário que a entrada está inválida.

Vamos a um exemplo simples , imagine o seguinte código:

try:
  print(x)
except:
  print("Variável não definida")

Neste caso acima, tentamos executar dentro do bloco try um print da variável x, mas observe que a variável x não foi definida, ela não tem valor algum. Então, isto irá gerar um exceção(erro), onde, podemos tratá-la no bloco except. Neste exemplo, apenas informamos que a variável não foi definida.

Recomendo a leitura deste artigo.

Talvez estes conceitos fiquem embaraçosos por agora, mas fique tranquilo, ao longo da formação de python provável que você se deparará com eles mais a frente.

Espero ter ajudado. Bons estudos!!!

Nádia, excelente sua explicação. Entendi agora. Muito obrigado. Abraço