Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Organizando o código:

Estou tendo dificuldade com a variável "tentativas"

import random

def jogar():
    msg_abertura()
    escolhe_dificuldade()

    numero_secreto = random.randrange(1,101)
    pontos = 1000

    for rodada in range(1, tentativas + 1):
        print("Rodada {} de {}".format(rodada, tentativas))
        chute_user = input("Digite um número entre 1 e 100: ")
        print("voce digitou ", chute_user)
        chute = int(chute_user)

        if(chute < 1 or chute>100):
            print("Você deve digitar um número entre 1 e 100!")
            continue

        acertou = chute == numero_secreto
        maior   = chute > numero_secreto
        menor   = chute < numero_secreto

        if(acertou):
            print("Você acertou!")
            print("Você fez {} pontos!".format(pontos))
            break
        else:
            if(maior):
                print("Você errou! Seu número é maior do que o número secreto!")
            elif(menor):
                print("Você errou! Seu número é menor do que o número secreto!")

        perda = abs(numero_secreto - chute)
        pontos = pontos - perda
    if(rodada == tentativas):
        print("Você perdeu!")
        print("O número secreto era {} e você fez {} pontos".format(numero_secreto,pontos))
    print("Fim do Jogo!")

def msg_abertura():
    print("*********************************")
    print("Bem vindo ao jogo de Adivinhação!")
    print("*********************************")
    print("Regras:")
    print("Escolha um nível de dificuldade")
    print("Tente descobrir o número secreto em X tentativas")
    print("Boa sorte!")
    print("*********************************")

    print("Escolha o nível de dificuldade?")
    print("(1)Fácil (2)Médio (3)Difícil")

def escolhe_dificuldade():
    nivel = int(input("Defina nível :"))

    if (nivel == 1):
        tentativas = 20
    elif (nivel == 2):
        tentativas = 10
    else:
        tentativas = 5
        
    return tentativas

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

Depois que escolho a dificuldade aparece um erro dizendo que tentativas não foi declarado. Como posso corrigir esse erro?

1 resposta
solução!

Olá, Mário! Tudo belezinha?

O erro que você está enfrentando ocorre porque a variável tentativas não foi declarada no escopo da função jogar.

O escopo de uma variável determina onde a variável pode ser acessada e manipulada dentro de um programa. Assim, as variáveis que são definidas dentro de uma função, por exemplo, têm escopo local e só são acessíveis dentro daquela função. Já as variáveis definidas fora de qualquer função têm um escopo global e são acessíveis em qualquer local do código.

Para resolver o problema em seu código, você pode declarar a variável tentativas como uma variável global, antes da função jogar. Assim, ela estará disponível em todo o código.

Além disso, para alterar o valor da variável global tentativas dentro das funções você deve usar a palavra-chave global para indicar que estamos referenciando a variável global e não criando uma variável local. Isso pode ser visto dentro da função escolhe_dificuldade.

Segue um exemplo de como você pode fazer isso:

import random

tentativas = 0

def jogar():
    global tentativas
    msg_abertura()
    escolhe_dificuldade()

    numero_secreto = random.randrange(1,101)
    pontos = 1000

    for rodada in range(1, tentativas + 1):
        print("Rodada {} de {}".format(rodada, tentativas))
        chute_user = input("Digite um número entre 1 e 100: ")
        print("Você digitou ", chute_user)
        chute = int(chute_user)

        # Restante do código...

def escolhe_dificuldade():
    global tentativas
    nivel = int(input("Defina o nível: "))

    if (nivel == 1):
        tentativas = 20
    elif (nivel == 2):
        tentativas = 10
    else:
        tentativas = 5
        
    return tentativas

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

Dessa forma, a variável tentativas será reconhecida em toda a função jogar e o erro não ocorrerá mais.

Espero ter ajudado. Qualquer outra dúvida estou a disposição.

Abraços. Bons estudos!

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