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

name conta is not defined

Não estou conseguindo retornar o valor conta usando o código da aula:

def cria_conta(numero,titular,saldo,limite):
    conta = {"numero" : numero,"titular" : titular,"saldo" : saldo,"limite" : limite}
    return conta

def deposita(conta,valor):
    conta["saldo"] += valor

def saca(conta,valor):
    conta["saldo"] -= valor

cria_conta(123,"Nico",200,400)
deposita(conta,123)

Aparece o erro "name 'conta' is not defined"

5 respostas

Bom dia, Ítalo!

O que está acontecendo é que você está passando para a função deposita os valores incorretos. Esta função toma 2 parâmetros: o número da conta da pessoa e o valor a ser depositado. Ao utilizar a sua função deposita, você passou como parâmetros a variável conta (que só existe dentro do escopo da função cria_conta, motivo pelo qual dá erro) e o número 123.

Para funcionar devidamente, deve-se utilizar a função deposita desta forma:

deposita(123, 1000)  # depositando 1000 reais na conta 123, pertencente ao Nico

Espero ter ajudado! Um abraço!

Edit: Não deve ser passado o código da conta na função deposita, percebi o erro na explicação depois e corrigi no outro comentário que fiz.

Mas a função cria_conta é executada antes do deposita. Portanto ao executar cria_conta(123,"Nico",200,400) esse valor é retornado para a variável conta, que passa a existir fora da função. Não?

solução!

Boa tarde Ítalo, tudo bem?

Você precisa executar a função cria_conta, em uma variável chamada 'conta'.

Só ai a segunda linha de código:

deposita(conta,123)

Irá entender onde você deseja depositar. Ficaria assim:

>>> conta = cria_conta(123,"Nico",200,400)  # Cria a conta do Nico em uma variável
>>> deposita(conta,100)  # Deposita 100 reais na conta do Nico que está na variável com nome conta. 

Se ficou na dúvida cria a variável com um número na frente só para diferenciar do que é função e o que é a variável:

>>> conta1 = cria_conta(123,"Nico",200,400)  # Cria a conta do Nico em uma variável
>>> deposita(conta1,100)  

Espero ter ajudado

Então, não. A variável conta é chamada de variável local, ela foi criada dentro da definição da função e ela só existe dentro da função. No momento em que saímos da função, ela deixa de existir. Ao usar o return, o que estamos passando é o valor desta variável para fora da função, que pode então ser passado para outra variável de nome conta, se desejar. Essa nova variável pode então ser passada para a próxima função, a deposita.

Notei que na resposta anterior eu cometi um erro, não deve ser passado o número da conta para o deposita, mas sim a conta criada. Desta forma, deve-se fazer o seguinte:

conta = cria_conta(123,"Nico",200,400)
deposita(conta,123)  # Deposita 123 reais na conta do Nico

Para auxiliar no conhecimento de variáveis locais e globais, segue um link com uma explicação bem legal sobre o tópico: https://juliarizza.gitbooks.io/apostila-do-minicurso-de-python-ufu/content/capitulo_4/variaveis_locais_globais.html.

Se ainda houver alguma dúvida, só comentar ai!

Valeu Gian e Bruno!!