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

Função principal (jogos.py)

Ao escrever a função principal jogos.py como feito no curso, me deparei com as seguintes perguntas:

  • O programa pergunta qual jogo o usuário quer jogar e o usuário deve digitar 1 ou 2. E se o usuário não digitar nem (1) nem (2)? E se o usuário digitar (3)? Pior, e se ele digitar uma string ou qualquer outro caractere?

  • E se após terminar de jogar, o usuário quiser jogar de novo?

Para resolver isso, meu código ficou assim:

import forca
import adivinhacao

def escolha():
    print("*******************")
    print("Escolha o seu jogo!")
    print("*******************")

    print("(1) Forca (2) Adivinhação")
    jogo = int(input("Qual jogo? "))
    if jogo == 1:
        print("Jogando Forca")
        forca.jogar_forca()
    elif jogo == 2:
        print("Jogando Adivinhação")
        adivinhacao.jogar_adivinhacao()
    else:
        print("Escolha (1) ou (2)!")
        escolha()

def replay():
    print("Você quer jogar novamente?")
    print("(1) Sim (2) Não")
    resposta = int(input("Resposta: "))
    if (resposta == 1):
        escolha()
    elif (resposta == 2):
        print("Obrigado por jogar!")
        quit()
    else:
        print("Escolha (1) Sim ou (2) Não!")
        replay()

while(True):
    escolha()
    while(True):
        replay()

Com isso aprendi a chamar a função dentro dela mesma (recursividade) e ainda aprendi o comando quit()

Quanto a primeira pergunta "E se o usuário não digitar nem (1) nem (2)? E se o usuário digitar (3)?" eu consegui resolver. Mas e se o usuário digitar uma string? O jogo dá pau pois o input é do tipo int:

jogo = int(input("Qual jogo? "))

Quanto a isso não consegui resolver, pois se o input não for do tipo int, eu não consigo aplicar a condição no if/else:

    if jogo == 1:
        print("Jogando Forca")
        forca.jogar_forca()
    elif jogo == 2:
        print("Jogando Adivinhação")
        adivinhacao.jogar_adivinhacao()
    else:
        print("Escolha (1) ou (2)!")
        escolha()

Aceito sugestões de como eu poderia resolver isso.

2 respostas
solução!

Olá Laura, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Meus parabéns pelo desenvolvimento e aprendizado contínuo, é sempre importante compartilhar com a comunidade o aprendizado.

Podemos testar a entrada do usuário utilizando as cláusulas if / else junto com o método .isnumeric(), esse método irá testar se os dados contidos na string são numéricos, em caso afirmativo o código irá fazer a conversão para o tipo int, caso não sejam todos numéricos o código pedirá que o usuário informe um número.

Ficando da seguinte forma o código:

import forca
import adivinhacao

def escolha():
    print("*******************")
    print("Escolha o seu jogo!")
    print("*******************")

    while True:

        print("(1) Forca (2) Adivinhação")
        jogo = input("Qual jogo? ")

        if jogo.isnumeric():
            jogo = int(jogo)
            if jogo == 1:
                print("Jogando Forca")
                forca.jogar_forca()
                break
            elif jogo == 2:
                print("Jogando Adivinhação")
                adivinhacao.jogar_adivinhacao()
                break
            else:
                print("Escolha (1) ou (2)!")
                escolha()
                break
        else:
            print("Você inseriu um valor inválido, insira um número inteiro")
            continue


def replay():
    while True:

        print("Você quer jogar novamente?")
        print("(1) Sim (2) Não")
        resposta = input("Resposta: ")

        if resposta.isnumeric():
            resposta = int(resposta)
            if (resposta == 1):
                escolha()
            elif (resposta == 2):
                print("Obrigado por jogar!")
                quit()
            else:
                print("Escolha (1) Sim ou (2) Não!")
                replay()
        else:
            print("Você inseriu um valor inválido, insira um número inteiro")
            continue


while(True):
    escolha()
    while(True):
        replay()

Funcionamento do código

GIF com o funcionamento do código do modo ‘run’ do programa ‘Pycharm’, o fundo do programa é cinza, as letras imprimidas pelo código estão na cor branca e os valores fornecidos pelo usuário estão na cor verde. Na primeira linha está escrito: C:\Users\felip\AppData\Local\Programs\Python\Python38\python.exe "E:/Arquivos/Documents/Felippe/Programação/Python/P; na segunda linha está escrito: “*******************”; já na terceira linha:Escolha o seu jogo!; na quarta linha: “*******************”; quinta linha: (1) Forca (2) Adivinhação; na sexta linha: Qual jogo?; durante a execução do programa as novas palavras e interações serão adicionadas nas linhas abaixo e as anteriores não são apagadas; é realizado o primeiro teste, inserindo a letra a; o programa não aceita e pede novamente outro valor o usuário insere o número 5 o programa não aceita e pede que o usuário insira 1 ou 2, o usuário insere o número 1 é mostrado a mensagem que foi jogado o jogo forca e é perguntado se o usuário quer jogar novamente, o usuário insere 2 finalizando o jogo.

Continuando a postagem anterior:

Uma outra forma seria com o uso das cláusulas try / except, como mostrado abaixo:


import forca
import adivinhacao

def escolha():
    print("*******************")
    print("Escolha o seu jogo!")
    print("*******************")

    while True:

        print("(1) Forca (2) Adivinhação")
        jogo = input("Qual jogo? ")

        try:
            jogo = int(jogo)
            if jogo == 1:
                print("Jogando Forca")
                forca.jogar_forca()
                break
            elif jogo == 2:
                print("Jogando Adivinhação")
                adivinhacao.jogar_adivinhacao()
                break
            else:
                print("Escolha (1) ou (2)!")
                escolha()
        except ValueError:
            print("Você inseriu um valor inválido, insira um número inteiro")
            continue


def replay():
    while True:

        print("Você quer jogar novamente?")
        print("(1) Sim (2) Não")
        resposta = input("Resposta: ")

        try:
            resposta = int(resposta)
            if (resposta == 1):
                escolha()
            elif (resposta == 2):
                print("Obrigado por jogar!")
                quit()
            else:
                print("Escolha (1) Sim ou (2) Não!")
                replay()
        except ValueError:
            print("Você inseriu um valor inválido, insira um número inteiro")
            continue


while(True):
    escolha()
    while(True):
        replay()


Deixo abaixo uma recomendação de aula e um artigo para poder aprofundar um pouco mais no tema try / except.

Continue assim, sempre compartilhando com a comunidade seu aprendizado e suas dúvidas.

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

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