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

Jogo da adivinhação

Essa é a versão que fiz. Imagino que esteja boa.

import os
from random import randint

def adivinhacao( ):
    title = "JOGO DA ADIVINHAÇÃO"
    stuff = "*" * (len(title) + 1)
    jogando = True
    print(f"{stuff} \n{title} \n{stuff} \n")

    while jogando:
        nivel, jogar = "", ""
        while nivel not in ("0", "1", "2", "3"):
            os.system("cls" if os.name == 'nt' else 'clear')
            nivel = input("ESCOLHA O NÍVEL: \n1 - DIFÍCIL   2 - MÉDIO   3 - FÁCIL   0 - SAIR \n> ")
            palpite, tentativas = 0, 1
            num_secreto = randint(1, 50)

            if nivel not in ("0", "1", "2", "3"):
                print(f"\n{nivel} é uma opção inválida.")
            if nivel == "1":
                jogadas = 5
                while (tentativas < jogadas) or (num_secreto != palpite):
                    tentativas += 1
                    if (jogadas - 1) == tentativas:
                        nivel = "0"
                    palpite = int(input("\nPalpite: "))
                    resp = jogo(jogadas, tentativas, num_secreto, palpite)
                    if resp == True:
                        break
            if nivel == "2":
                jogadas = 10
                while (tentativas < jogadas) or (num_secreto != palpite):
                    palpite = int(input("\nPalpite: "))
                    tentativas += 1
                    resp = jogo(jogadas, tentativas, num_secreto, palpite)
                    if resp == True:
                        break
            if nivel == "3":
                jogadas = 20
                while (tentativas < jogadas) or (num_secreto != palpite):
                    palpite = int(input("\nPalpite: "))
                    tentativas += 1
                    resp = jogo(jogadas, tentativas, num_secreto, palpite)
                    if resp == True:
                        break
            if nivel == "0":
                break

        while (jogar != "S") and (jogar != "N"):
            jogar = input("\nDESEJA CONTINUAR JOGANDO? S/N \n> ").strip( ).upper( )
        if jogar == "S":
            jogando
        if jogar == "N":
            print("\nJOGO ENCERRADO.\n")
            not jogando
            break

def jogo(jogadas, tentativas, sec, num):
    if (tentativas) > jogadas:
        print("\nInfelizmente não foi dessa vez. Tente novamente.")
        return True
    if sec == num:
        print("\nParabéns. Você acertou.\n")
        return True
    if num != sec:
        if sec > num:
            print("\nO número secreto é maior que o número escolhido.")
        if sec < num:
            print("\nO número secreto é menor que o número escolhido.")
        if (jogadas - (tentativas)) == 1:
            print(f"\nAinda resta {(jogadas + 1) - tentativas} tentativa.\n")
        else:
            print(f"\nAinda restam {(jogadas + 1) - tentativas} tentativas.\n")

adivinhacao( )

Se houver erros, por favor, podem informá-los. Sugestões também são bem vindas.

3 respostas

Olá Adriano, tudo belezinha?

O código que você postou está bem organizado e fácil de entender. Parabéns!

Porém, notei que há um erro na linha 41. O comando not jogando não altera o valor da variável jogando para False, que é o que você deseja fazer. Para corrigir isso, basta trocar not jogando por jogando = False.

Além disso, gostaria de deixar algumas sugestões. Nas linhas 37 e 38, o trecho de código a seguir pode ser excluído, já que ele não altera o valor da variável jogando.

if jogar == "S":
    jogando

Além disso, uma melhoria que poderia ser feita é a adição de uma mensagem de erro caso o usuário digite uma opção inválida no momento de escolher o nível do jogo. Por exemplo: "Opção inválida. Por favor, escolha entre as opções 0, 1, 2 ou 3". O mesmo pode ser feito no laço de repetição que pergunta se o jogador deseja continuar jogando.

Espero ter ajudado.

Abraços. Bons estudos!

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

Grande Gabrielle. Tudo certo? Valeu pelas dicas e pelo "puxão de orelha". Rsrsrsrsrs Além de fazer a correção e seguir as dicas, eu procurei dar uma reestruturada no código e deixá-lo mais "enxuto".

import os
from random import randint

def adivinhacao( ):
    title = "JOGO DA ADIVINHAÇÃO"
    stuff = "*" * (len(title) + 1)
    print(f"{stuff} \n{title} \n{stuff} \n")

    while True:
        nivel, jogar = "", ""
        while nivel not in ("0", "1", "2", "3"):
            os.system("cls" if os.name == 'nt' else 'clear')
            nivel = input("ESCOLHA O NÍVEL: \n1 - DIFÍCIL   2 - MÉDIO   3 - FÁCIL   0 - SAIR \n> ")
            num_secreto = randint(1, 50)

            if nivel not in ("0", "1", "2", "3"):
                a = input(f"\n'{nivel}' é uma opção inválida. \nEscolha apenas '0', '1', '2' ou '3' para definir o nível de dificuldade do jogo. \nPressione a tecla ENTER para retornar ao jogo.")
            if nivel == "1":
                jogadas = 5
                resp = jogo(jogadas, num_secreto)
                if resp == True:
                    break
            if nivel == "2":
                jogadas = 10
                resp = jogo(jogadas, num_secreto)
                if resp == True:
                    break
            if nivel == "3":
                jogadas = 20
                resp = jogo(jogadas, num_secreto)
                if resp == True:
                    break
            if nivel == "0":
                jogar = "N"
                break

        while (jogar != "S") and (jogar != "N"):
            jogar = input("\nDESEJA CONTINUAR JOGANDO? S/N \n> ").strip( ).upper( )
            if (jogar != "S") and (jogar != "N"):
                print("\nOpção inválida. \nDigite 'S' caso deseje continuar jogando ou 'N' para encerrar o jogo.")
        if jogar == "N":
            print("\nJOGO ENCERRADO.\n")
            break

def jogo(jogadas, sec, palpite = 0):
    while (jogadas > 0) or (sec != palpite):
        try:
            palpite = int(input("\nPalpite: "))
            jogadas -= 1
            if (jogadas == 0) and (palpite != sec):
                print(f"\nO Número secreto é {sec}. \nInfelizmente não foi dessa vez. Tente novamente.")
                return True
            if sec == palpite:
                print("\nParabéns. Você acertou.\n")
                return True
            if palpite != sec:
                if sec > palpite:
                    print("\nO número secreto é maior que o número escolhido.")
                if sec < palpite:
                    print("\nO número secreto é menor que o número escolhido.")
                if jogadas == 1:
                    print(f"\nAinda resta {jogadas} tentativa.\n")
                else:
                    print(f"\nAinda restam {jogadas} tentativas.\n")
        except ValueError:
            print("\nSão válidos apenas valores numéricos.")

adivinhacao( )

O que achou? Ainda são bem vindas as correções e as sugestões.

solução!

Imagina, Adriano. :)

Gostei bastante de ver a evolução no seu código. Dessa vez não identifiquei nenhum erro. Parabéns pelas melhorias! E continue sempre assim, se dedicando e colocando em prática o que você aprender. Assim, seus códigos serão cada vez melhores.

No caso de qualquer dúvida lembre-se que você pode sempre contar com o fórum da Alura para te auxiliar.

Abraços. Bons estudos!