我不能重复循环,因为int或float对象不可调用

2024-04-16 16:17:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在做一个家庭作业,它需要一个循环,接收两个输入并调用不同的函数,这些函数返回特定的值,问题是在我重复输入指令并返回TypeError: float object is not callable之前一切都很好。我的意思是第一次它工作了,但第二次没有,这很混乱

from sys import exit


def sueldoBruto(valorHora, horaTrabajada):

    return (valorHora * horaTrabajada) * 4

def descuentos(sueldoBruto):

    dctoParaFiscal = sueldoBruto * 0.09

    dctoPension = sueldoBruto * 0.04

    dctoSalud = sueldoBruto * 0.04

    return dctoParaFiscal + dctoPension + dctoSalud

def sueldoNeto(sueldoBruto):

    return sueldoBruto - descuentos(sueldoBruto)

def proviciones(sueldoBruto):
    prima = sueldoBruto * 8.33 / 100
    cesantias = sueldoBruto * 8.33 / 100
    interesCesantias = sueldoBruto * 1 / 100
    vacaciones = sueldoBruto * 4.17 / 100

    return prima + cesantias + interesCesantias + vacaciones


while True:

    decision = input('Quiere ingresar un profesor?: ')
    if decision.lower() == 'si':

        nombre = input('Ingrese nombre completo del docente: ')
        horas = float(input('Ingrese la cantidad de horas trabajadas por semana: '))
        valorHoras = float(input('Ingresa el valor de la hora: '))

        if horas > 40:
            valorHoras = valorHoras * 1.5

        sueldoBruto = sueldoBruto(horas, valorHoras)

        dcto = descuentos(sueldoBruto)

        sueldoNeto = sueldoNeto(sueldoBruto)

        proviciones  = proviciones(sueldoBruto)

        print(f'El sueldo bruto del docente {nombre} es: {sueldoBruto} mensuales')
        print(f'Los descuentos de parafiscales, salud y pension son:  {dcto} mensuales')
        print(f'El sueldo neto del docente {nombre} es {sueldoNeto}: mensuales')
        print(f'Las proviciones por prima, cesantias, interes de cesantias y vacaciones son: {proviciones}')
    else:
        exit()

` 然后它返回类似的结果

Quiere ingresar un profesor?: si
Ingrese nombre completo del docente: Emanuel Leal
Ingrese la cantidad de horas trabajadas por semana: 42
Ingresa el valor de la hora: 5000
El sueldo bruto del docente Emanuel Leal es: 1260000.0 mensuales
Los descuentos de parafiscales, salud y pension son:  214200.0 mensuales
El sueldo neto del docente Emanuel Leal es 1045800.0: mensuales
Las proviciones por prima, cesantias, interes de cesantias y vacaciones son: 275058.0
Quiere ingresar un profesor?: si
Ingrese nombre completo del docente: Ana Julia
Ingrese la cantidad de horas trabajadas por semana: 37
Ingresa el valor de la hora: 5600
Traceback (most recent call last):
File "/home/master/Documentos/proyectos/misiontic/ciclo1/semana5/reto4/reto4.py", line 43, in <module>
sueldoBruto = sueldoBruto(horas, valorHoras)
TypeError: 'float' object is not callable

Tags: defloatladelpornombreingresehoras
1条回答
网友
1楼 · 发布于 2024-04-16 16:17:10

def sueldoNeto(sueldoBruto):返回一个数字,对吗?你打电话:

sueldoBruto = sueldoBruto(horas, valorHoras)

现在sueldoBruto就是这个数字。因此,当您再次尝试调用sueldoBruto(horas, valorHoras)时,您将尝试调用该号码,这是一个错误

您不应该使用与函数相同的名称来调用变量-Python会很高兴地使用名称sueldoBruto来引用函数、字符串、数字-绝对是任何东西

所有这些线路都存在以下问题:

sueldoBruto = sueldoBruto(horas, valorHoras)
sueldoNeto = sueldoNeto(sueldoBruto)
proviciones  = proviciones(sueldoBruto)

相关问题 更多 >