代码之家  ›  专栏  ›  技术社区  ›  uglyorgans

在代码[closed]中获取错误:“TypeError:'list'对象不可调用”

  •  -1
  • uglyorgans  · 技术社区  · 1 年前

    我写了一个代码,我相信它已经完成了,但现在当我试图运行它时,我得到了以下错误:

    Traceback (most recent call last):
      File "D:/python/salaries.py", line 29, in <module>
        pay = totalManagerPay(salary)
    TypeError: 'list' object is not callable
    

    我已经在谷歌上搜索了一些,但我找到的每一个“解决方案”似乎都不适用于我的特定情况,所以我想我应该自己在这里问一下。

    我的代码在这里:

    now = datetime.now()
    dt_string = now.strftime("%m/%d/%Y %H:%M:%S")
    
    def totalManagerPay(salary):
        return salary
    
    def totalHourlyPay(hours, rate):
        overtime = max(0, hours - 40)
        return (hoursWorked - overtime) * hourlyPay + overtime * hourlyPay * 1.5
    
    def totalCommissionPay(sales):
        return 350 + 0.057 * sales
    
    def totalPieceWorkerPay(pieces):
        bonus = 500 if pieces > 500 else 0
        return pieces * 4.50 + bonus
    
    totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay = [], [], [], []
    
    while True:
        payCode = int(input("Enter pay code (0 to quit): "))
        if payCode == 0:
            print("No employees at this time. Thank you.")
            break
        if payCode == 1:
            print("MANAGER SELECTED")
            salary = float(input("Enter gross weekly salary: "))
            pay = totalManagerPay(salary)
            totalManagerPay.append(pay)
        elif payCode == 2:
            print("HOURLY WORKER SELECTED")
            hoursWorked = float(input("Enter number of hours worked: "))
            hourlyPay = float(input("Enter hourly rate: "))
            pay = totalHourlyPay(hoursWorked, hourlyPay)
            totalHourlyPay.append(pay)
            print("Hourly worker's pay is ${pay:.2f}\n")
        elif payCode == 3:
            print("COMMISSION WORKER SELECTED")
            weeklySales = float(input("Enter weekly sales: "))
            pay = totalCommissionPay(weeklySales)
            totalCommissionPay.append(pay)
            print("Commission worker's pay is ${pay:.2f}\n")
        elif payCode == 4:
            print("PIECE BY PIECE WORKER SELECTED")
            piecesProduced = int(input("Enter number of pieces produced: "))
            pay = totalPieceWorkerPay(piecesProduced)
            totalPieceWorkerPay.append(pay)
            print("Piece by Piece worker's pay is ${pay:.2f}\n")
        else:
            print("Error. Please enter a valid code.")
            
    if any([totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay]):
    
        print("\n******************** ABCD Inc. ************************")
        print("*********** Cumulative Salaries By Pay Code ***********")
        print("Employee Pay Code      Number of Employees     Cumulative Salary")
        print("-----------------------------------------------------------------------------")
    
        totalSalary, totalEmployees = 0, 0
        
        for payCode, payList in enumerate([totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay], start=1):
            total = sum(payList)
            totalSalary += total
            totalEmployees += len(payList)
            print(f"        {payCode:<25}{len(payList):<25}{total:.2f}")
            
        print("------------------------------------------------------------------------------")
        print(f"Totals                           {totalEmployees:<34}  {totalSalary:.2f}")
        print("--------------------------------------------------------------------------------")
        print("Date: " + dt_string)
        print("************************************************************************")
    

    我原以为错误是当我调用底部if语句中的函数时,然而,当我删除括号时,我仍然会得到一个错误。

    1 回复  |  直到 1 年前
        1
  •  2
  •   jlx    1 年前

    您正在定义与函数名称相同的列表。在这里

    totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay = [], [], [], []
    

    与相同

    def totalManagerPay(salary):
        return salary
    
    def totalHourlyPay(hours, rate):
        overtime = max(0, hours - 40)
        return (hoursWorked - overtime) * hourlyPay + overtime * hourlyPay * 1.5
    
    def totalCommissionPay(sales):
        return 350 + 0.057 * sales
    
    def totalPieceWorkerPay(pieces):
        bonus = 500 if pieces > 500 else 0
        return pieces * 4.50 + bonus
    

    将其中任何一个更改为另一个名称都会有所帮助。请记住修改调用函数的代码或相应地附加列表。