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

TypeError: 'int' object is not subscriptable

Fiz o código de acordo com o que foi solicitado:

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

def extrato(conta):
    print("Saldo {}".format(conta["saldo"]))

Porém quando testo pelo console " deposita(123, 100.0)" está dando o seguinte erro: conta["saldo"] += valor TypeError: 'int' object is not subscriptable

Testei direto no cód:
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

def extrato(conta):
    print("Saldo {}".format(conta["saldo"]))




conta= cria_conta(123, "nico", 55.0, 2000.0)

deposita(conta, 145.0)

extrato(conta)

Desta maneira as funcionalidades rodam 100%... Qual seria o problema que o console apresenta, sendo que é só nele mesmo que apresenta erro no código?

3 respostas

Olá Pollyanna, boa noite!

Isso acontece porque você chamou a função de maneira incorreta. Veja que você tentou fazer deposita(123, 100.0) mas o método deposita foi definido da seguinte maneira:

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

Ou seja, ele espera uma conta como primeiro argumento e ao fazer deposita(123, 100.0), você está passando um número inteiro no lugar de uma conta. Como números inteiros não são dicionários, seu código quebra aqui: conta["saldo"] += valor, já que um int não possui uma chave "saldo". E é por este motivo que o tipo do erro é TypeError. Seu método espera receber uma conta como primeiro argumento e não um número inteiro (erro de tipo de parâmetros).

Já no seu segundo código, você chama a função de maneira correta, passando uma conta como primeiro parâmetro da função:

conta= cria_conta(123, "nico", 55.0, 2000.0)
deposita(conta, 145.0)
extrato(conta)

É por este motivo que este último funciona e o outro acusa erro.

Espero ter ajudado e bons estudos!

solução!

Faz sentido, rs. Obrigada pela ajuda, testei e deu certo aqui :)

Oi Pollyanna, tudo bem? Como sua dúvida foi solucionada estou fechando o tópico ok?

Qualquer coisa não hesite em abrir outro tópico no fórum :)