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

Process finished with exit code 0

Vi que isso ocorreu com várias pessoas acima, mas nenhuma delas marcou uma solução. Já assisti a aula 6 para ver se resolvia o problema, mas não ocorreu.

Após criar a 'def jogar()' e adicionar a linha 'if main == "name" os jogos funcionam perfeitamente em suas abas próprias.

Meu problema ocorre ao rodar a aba Jogos. Ao rodar, o programa se inicia normalmente, mas ao escolher qualquer um dos jogos, o programa termina.

Segue:

*************************
---- Escolha seu jogo ----
*************************
(1) Forca  (2) Adivinhação
Qual você quer jogar?1

Process finished with exit code 0

e

*************************
---- Escolha seu jogo ----
*************************
(1) Forca  (2) Adivinhação
Qual você quer jogar?2

Process finished with exit code 0

O código da aba jogos:

import Adivinhação
import forca

def escolhe_jogo():
    print("*************************")
    print("---- Escolha seu jogo ----")
    print("*************************")

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

    jogo = input("Qual você quer jogar?")

    if jogo == 1:
        print("Jogando Forca")
        forca.jogar()
    elif jogo == 2:
        print("Jogando Advinhação")
        Adivinhação.jogar()

if (__name__ == "__main__"):
    escolhe_jogo()

Onde está o erro?

2 respostas
solução!

Você esqueceu de converter o input pra inteiro, então os ifs não estão funcionando porque você ta comparando com numeros inteiros, e já que "1" != 1 seu if da false e passa pro elif que tbm da false terminando sem rodar nenhum jogo.

Pra resolver isso tem 2 jeitos:

1º- Converter o input pra inteiro:

jogo = int(input("Qual você quer jogar?"))

Vantagem:

  • Você vai ter certeza que se a pessoa digitou exatamente esse número ela vai jogar o jogo.

Desvantagem:

  • Se a pessoa digitar algo alem do número teu código vai bugar. (ex.; "1a")

Solução pra desvantagem:

  • Implementar um verificador de se o que a pessoa digitou ali é um número antes de converter.
    • Você consegue fazer isso de varias formas, pode também tratar a string pra limpar qualquer sujeira antes de converter se quiser ou só forçar o usuário a digitar outra vez o imput se tiver qualquer sujeira (while True: input, if imput sem sujeira: break)

2º- Comparar com uma string do número:

if jogo == "1":
    pass
elif jogo == "2":
    pass

Vantagem:

  • Simples e rápido.
  • Não da bug em conversão de tipos.

Desvantagem:

  • Se a pessoa digitar "1 " seu código provavelmente vai bugar
  • Se você esquecer de colocar as " no if seu código vai bugar

Solução pra desvantagem:

  • Implementar um verificador de se a pessoa digitou algo além do número aqui também é necessário mas você não vai precisar converter depois
    • Você pode fazer isso simplesmente dando um .trim() e .slice(), tem outras funções legais pra verificar ambas as opções como o .isdigit()

Se você ta começando agora a programar você não precisa se importar com essas vantagens e desvantagens, e provavelmente existem muito mais que possam fazer um ser melhor ou pior que outro dependendo da situação, o importante mesmo é fazer da forma que você se sente mais confortavel e de acordo com o que você precisa.

Por exemplo, quando eu fiz esse código eu escolhi o int(input()) já que o usuario sabe o que ele pode escrever e eu não quis lidar com exceções. Mas o com string provavelmente vai deixar o código com menos excessões possiveis de maneira mais fácil sem necessariamente afetar o usuario pedindo outro input.

Resolveu.

Muito obrigado pela ajuda.