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

Mensagem de erro para falha no input

o que eu queria era passar uma mensagem de erro e fazer um loop que voltasse a escolha do jogo, então eu escrevi esse código aqui:

import forca
import adivinhacao

print("*********************************")
print("*******Escolha o seu jogo!*******")
print("*********************************")

print("(1) Forca (2) Adivinhação")

jogos = (1, 2)
jogo_escolhido = (input("Qual jogo? "))

if (jogo_escolhido == '1'):
    print("Jogando forca")
    forca.jogar()


elif (jogo_escolhido == '2'):
    print("Jogando adivinhação")
    adivinhacao.jogar()

elif (jogo_escolhido not in jogos):
    print("Por favor, insira um número referente a um dos jogos.")

mas ele não retorna a escolha do jogo com o erro, só imprime a mensagem de erro. como posso tornar isso um loop? conheci as funções try e exception, tentei com for mas não acho que executei corretamente. o que eu devo fazer?

5 respostas

tente substituir elif (jogo_escolhido not in jogos): print("Por favor, insira um número referente a um dos jogos.")

Por somente else: print("Por favor, insira um número referente a um dos jogos.")

Pois assim, qualquer valor que não seja 1 e 2, não será aceito.

OBS: Tire as aspas dos números 1 e 2, são int e não str

Boa noite Maria Eduarda, tudo bem?

Para você realizar um loop para enquanto não for selecionada uma opção valida de jogo, ser perguntada ao mesmo qual a opção de jogo podemos utilizar o comando while. Para isso precisamos criar uma variável, nesse caso chamada de jogo_valido que é inicializada como False, e enquanto ele não for um jogo valido, será realizado um novo laço, fazendo assim, perguntar novamente qual o jogo.

Reintero o relatado na resposta anterior, que o ideal é trabalharmos com o mesmo tipo de dado. Diante disso, ao receber o input podemos converter aquele dado para inteiro, assim não se fazendo necessário o uso das aspas nos Ifs.

Segue código testado:

import forca
import adivinhacao

print("*********************************")
print("*******Escolha o seu jogo!*******")
print("*********************************")

print("(1) Forca (2) Adivinhação")
jogo_valido = False

jogos = (1, 2)
while not(jogo_valido):
    jogo_escolhido = int(input("Qual jogo? "))

    if (jogo_escolhido == 1):
        print("Jogando forca")
        forca.jogar()
        jogo_valido = True

    elif (jogo_escolhido == 2):
        print("Jogando adivinhação")
        adivinhacao.jogar()
        jogo_valido = True

    elif (jogo_escolhido not in jogos):
        print("Por favor, insira um número referente a um dos jogos.")

print('Fim de Jogo')

Espero ter ajudado, qualquer dúvida estou a disposição para esclarecimento, caso eu saiba é claro, rsrs.

Eu fiz essa opção no meu menu:

import adivinhacao
import forca
from time import sleep

while(True):
    escolha = int(input('Menu de JOGOS:'
                        '\n[1] Adivinhação.'
                        '\n[2] Forca.'
                        '\nEscolha ===> '))

    if(escolha == 1):
        print('Carregando . . . . ')
        sleep(2)
        adivinhacao.play()
    elif(escolha == 2):
        print('Carregando . . . . ')
        sleep(2)
        forca.play()
    elif(escolha != 1 and escolha != 2):
        print('Opção inválida ')
        continue

E outro menu após os jogos:

    while(True):
        menu = str(input('Deseja escolher outro programa?'
                         '\n(S/N)'
                         '\n==> ')).strip().upper()

        if(menu != 'S' and menu != 'N'):
            print('Escolha inexistente, tente novamente.')
            continue
        else:
            break
    if(menu == 'N'):
        break

Obs.: No seu caso a função é jogar():, eu coloquei play(): no meu

Até então nenhum resolveu. Tirei os números de int justamente para lidar com os erros, caso um usuário digitasse acidentalmente um 1q ou algo do tipo, retornando ao ponto inicial da escolha do jogo. É claro que num jogo feito para estudo pessoal isso não aconteceria, mas foi uma curiosidade que eu quis sanar.

Mantenho o código original.

solução!

Boa tarde!

Depois de alguns dias pesquisando e entendendo diferentes funções que poderiam ajudar, me deparei com o 'try' e 'except'. Já fazem alguns dias que cheguei nessa solução, e, embora não seja exatamente o que eu quero (ela não exibe a mensagem de erro, apenas repete o pedido de input), serve para a funcionalidade do código.

Segue o código final, então:

import forca
import adivinhacao

invalid_input = True

print("*********************************")
print("*******Escolha o seu jogo!*******")
print("*********************************")

print("(1) Forca (2) Adivinhação")

while True:
    jogo_escolhido = (input("Qual jogo? "))

    try:
        if jogo_escolhido == '1':
            invalid_input = False
            print("Jogando forca")
            forca.jogar()
            break

        elif jogo_escolhido == '2':
            print("Jogando adivinhação")
            adivinhacao.jogar()
            break

    except ValueError:
        print('Por favor, escolha um número referente aos jogos definidos.')

Dessa forma, o retorno é o seguinte, em caso de entrada incorreta:

*********************************
*******Escolha o seu jogo!*******
*********************************
(1) Forca (2) Adivinhação
Qual jogo? d
Qual jogo? 1
Jogando forca
(continuação do jogo)

Caso eu encontre uma função melhor e capaz de exibir a mensagem de erro, voltarei a este tópico.