TypeError: int() 参数必须是字符串或数字,不能是'tuple

1 投票
3 回答
8501 浏览
提问于 2025-04-17 21:34

我正在尝试解决一个作业中的错误。这个作业是一个工资计算程序,主要是计算工资和加班费,其中加班的定义是超过40小时的工作时间。


我的错误:

Traceback (most recent call last):
  File "C:\Python33\Assignment6.py", line 79, in <module>
    main()
  File "C:\Python33\Assignment6.py", line 18, in main
    original_pay = calculate_pay(original_hours, original_rate)
  File "C:\Python33\Assignment6.py", line 52, in calculate_pay
    original_hours = int(original_hours)
TypeError: int() argument must be a string or a number, not 'tuple'

我的代码:

overtime_rate_constant = .5

overtime_limit = 40

overtime_hours = 0

def main ():
    greet()
    original_hours = get_hours()
    original_rate = get_rate()
    original_pay = calculate_pay(original_hours, original_rate)
    totalpay = overtime_pay + original_pay
    print_data(original_rate, overtime_hours, original_hours, calculate_overtime_hours, original_pay, totalpay)

def get_hours ():    

    original_hours = int(input("Please enter hours worked (8-86): "))
    print()

    while original_hours < 8 or original_hours > 86:
        print("You must enter between 8 - 86 hours.")
        print()
        original_hours = int(input("Please try again: "))
        print()


    original_hours = int(original_hours)
    for original_hours in range (41, 86):
        overtime_hours = original_hours - overtime_limit
        return original_hours, overtime_hours    
    return original_hours   
def get_rate ():

    original_rate = int(input("Please enter your hourly rate: "))
    print()
    while original_rate < 7 or original_rate > 50:
        print("You must enter a pay rate between 7 - 50 dollars")
        print()
        rate = int(input("Please try again: "))
        print()
        return original_rate
    return original_rate
def calculate_pay (original_hours, original_rate):

    original_hours = int(original_hours)
    original_rate = int(original_rate)

    original_pay = original_hours * original_rate
    overtime_pay = original_hours * original_hours + overtime_hours * .5

    return overtime_pay, original_pay

def print_data (original_rate, overtime_hours, original_hours, overtime_pay, original_pay, totalpay):

    print()
    print("Pay rate:       $", format (original_rate, '0,.2f'))
    print("Regular Hours:   ", format (original_hours, '0,.0f'))
    print("Overtime Hours:  ", format (overtime_hours, '0,.0f'))
    print("Regular Pay:    $", format (original_pay, '0,.2f'))
    print("Overtime Pay:   $", format (overtime_pay, '0,.2f'))
    print("Total Pay:      $", format (totalpay, '0,.2f'))

def greet ():
    print("This program calculates pay.")
    print()






main()

3 个回答

1

问题出在这一行(在你的 get_hours 函数里):

return original_hours, overtime_hours

这行代码返回的是一个元组。

1

你的 calculate_pay() 函数没有正确处理加班。确保你正确传递 get_hours() 返回的元组中的值,并且要确保 get_hours() 总是 返回一个包含两个元素的元组,即使第二个元素是0。

2

我没有看到这是给你的作业。无论如何,先专注于变量的赋值。如果你返回n个值,那么在调用的地方要用n个变量来接收这些值,否则你会遇到以下错误:

TypeError: int() argument must be a string or a number, not 'tuple'

你的程序有点乱。现在已经修好了!

overtime_rate_constant = .5

overtime_limit = 40

overtime_hours = 0

def main ():
    greet()
    original_hours,overtime_hours = get_hours()
    original_rate = get_rate()

    overtime_pay, original_pay = calculate_pay(original_hours, original_rate)
    totalpay = overtime_pay + original_pay
    print_data(original_rate, overtime_hours, original_hours, overtime_pay, original_pay, totalpay)

def get_hours ():    

    original_hours = int(input("Please enter hours worked (8-86): "))
    print()

    while original_hours < 8 or original_hours > 86:
        print("You must enter between 8 - 86 hours.")
        print()
        original_hours = int(input("Please try again: "))
        print()


    #original_hours = int(original_hours)
    for original_hours in range (41, 86):
        overtime_hours = original_hours - overtime_limit
    return original_hours, overtime_hours    
    #return original_hours   
def get_rate ():

    original_rate = int(input("Please enter your hourly rate: "))
    print()
    while original_rate < 7 or original_rate > 50:
        print("You must enter a pay rate between 7 - 50 dollars")
        print()
        rate = int(input("Please try again: "))
        print()
        return original_rate
    return original_rate
def calculate_pay (original_hours, original_rate):

    original_hours = int(original_hours)
    original_rate = int(original_rate)

    original_pay = original_hours * original_rate
    overtime_pay = original_hours * original_hours + overtime_hours * .5

    return overtime_pay, original_pay

def print_data (original_rate, overtime_hours, original_hours, overtime_pay, original_pay, totalpay):

    print()
    print("Pay rate:       $", format (original_rate, '0,.2f'))
    print("Regular Hours:   ", format (original_hours, '0,.0f'))
    print("Overtime Hours:  ", format (overtime_hours, '0,.0f'))
    print("Regular Pay:    $", format (original_pay, '0,.2f'))
    print("Overtime Pay:   $", format (overtime_pay, '0,.2f'))
    print("Total Pay:      $", format (totalpay, '0,.2f'))

def greet ():
    print("This program calculates pay.")
    print()

main()

你的程序里漏掉了很多东西。我已经整理好了。我也会展示我修复的错误:

错误 1:

Traceback (most recent call last):
  File "p.py", line 72, in <module>
    main()
  File "p.py", line 11, in main
    original_pay = calculate_pay(original_hours, original_rate)
  File "p.py", line 45, in calculate_pay
    original_hours = int(original_hours)
TypeError: int() argument must be a string or a number, not 'tuple'

错误 2:

Traceback (most recent call last):
  File "p.py", line 72, in <module>
    main()
  File "p.py", line 12, in main
    totalpay = overtime_pay + original_pay
NameError: global name 'overtime_pay' is not defined

错误 3:

Traceback (most recent call last):
  File "p.py", line 73, in <module>
    main()
  File "p.py", line 14, in main
    print_data(original_rate, overtime_hours, original_hours, calculate_overtime_hours, original_pay, totalpay)
NameError: global name 'calculate_overtime_hours' is not defined

撰写回答