1
resposta

Posso usar o retorno de uma função como parâmetro diretamente em outra?

Estou tentando usar as respostas de uma função como parâmetro pra outra. A função me retorna três resultados e a outra função lê três resultados, mas quando rodo o programa, recebo a informação que só foi dado um argumento e que os outros dois não foram informados

def calculo(v, s, t):
    anos = t * 12
    prestação = v / anos

    print(prestacao)

    if prestacao > s * 0.3:
        print('Empréstimo negado!')
    else:
        print('Empréstimo aprovado!')


def perguntas():
    valor = float(input('valor: '))
    salario = float (input('salario: '))
    tempo = int(input('tempo: '))

    return valor, salario, tempo 

calculo(perguntas())

File "c:\Documents\Python Scripts\teste.py", line 20, in calculo(perguntas()) TypeError: calculo() missing 2 required positional arguments: 's' and 't'

1 resposta

O problema do seu codigo é que a função problema retorna 3 valores só que esses valores são retornados como uma tupla, ou seja, quando esses valores são retornados para dentro da função calculo o parametro v recebe uma tupla com 3 valores e os parametros s e t não recebem nenhum valor. exemplo: Se ao digitar

  • valor: 3
  • salario: 4
  • tempo: 5

A função calculo vai receber os valores assim

calculo((3,4,5),s,t)

perceba que apenas o parametro v recebeu uma tupla de 3 números, enquanto os outros parametros da função ficaram vazios. para resolver este problema basta antes de chamar a função calculo você separar a tupla em 3 variaveis que vão receber cada um desses valores. exemplo:

def calculo(v, s, t):
    anos = t * 12
    prestacao = v / anos

    print(prestacao)

    if prestacao > s * 0.3:
        print('Empréstimo negado!')
    else:
        print('Empréstimo aprovado!')


def perguntas():
    valor = float(input('valor: '))
    salario = float (input('salario: '))
    tempo = int(input('tempo: '))

    return valor, salario, tempo 

v, s, t = perguntas()

calculo(v, s, t)