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

Criando funções no jogo de adivinhação

Após o fim do curso resolvi rever o código que fizemos do jogo de adivinhação. Na tentativa de criar as funções e organizar o código, surgiu um erro que eu não estou sabendo como solucionar e algumas dúvidas.

Criei uma função para o usuário responder o nível desejado

def nivel_de_dificuldade():
    print('Nível: (1) Fácil (2) Médio (3) Difícil')
    nivel = int(input('Escolha o nível de dificuldade... '))
    return

a primeira dúvida é se eu preciso do return ao final da definição. a outra é se eu deveria colocar o nível como parâmetro dentro da função ao definí-la (ainda é confuso pra mim saber quando devo fazê-lo ou não).

o código segue, eu chamo a função e quero estabelecer o if abaixo. O código funciona legal, porém ele só aceita o nível depois de pedir três vezes. O que pode ser?

nivel_de_dificuldade()

if nivel_de_dificuldade() == 1:
    numero_de_tentativas = 15
elif nivel_de_dificuldade() == 2:
    numero_de_tentativas = 11
else:
    numero_de_tentativas = 9
1 resposta
solução!

Olá Yasmin,

se sua função retorna o valor para algo, vc deve utilizar return. Na verdade, existem recomendações que vc sempre deve utilizar return, mesmo quando não retornar nada. Exemplo.

def nivel_de_dificuldade():
    print('Nível: (1) Fácil (2) Médio (3) Difícil')
    nivel = int(input('Escolha o nível de dificuldade... '))
    return nivel


print(nivel_de_dificuldade())

No exemplo anterior, estamos imprimindo o retorno da função.

def nivel_de_dificuldade():
    print('Nível: (1) Fácil (2) Médio (3) Difícil')
    nivel = int(input('Escolha o nível de dificuldade... '))
    print(nivel)
    return None


nivel_de_dificuldade()

Já no exemplo anterior, o resultado é o mesmo, mas a impressão foi realizada dentro da função, ou seja, a função não é obrigada a retornar um valor para ser impresso. Porém, utilizamos o return, retornando None. Vc verá isso em tópicos mais avançados, onde dizem que funções em Python sempre devem retornar algo, mesmo que seja None.

Em relação ao segundo código, o que acontece é que vc chama a função 3 vezes. Sempre que vc utiliza nivel_de_dificuldade() vc está chamando a função e consequentemente executando todo seu código.

O mais correto seria atribuir o valor de retorno da função a uma variável e utilizar somente a variável.

def nivel_de_dificuldade():
    print('Nível: (1) Fácil (2) Médio (3) Difícil')
    nivel = int(input('Escolha o nível de dificuldade... '))
    return nivel


nivel_escolhido = nivel_de_dificuldade()

if nivel_escolhido == 1:
    numero_de_tentativas = 15
elif nivel_escolhido == 2:
    numero_de_tentativas = 11
else:
    numero_de_tentativas = 9

print(numero_de_tentativas)