类型错误:无法将序列乘以非整数类型的'float'?

0 投票
2 回答
2507 浏览
提问于 2025-04-16 20:34

这个错误是指“sstax= grosspay*SS_TAX”。我不知道我哪里做错了。): 在把全局常量改成整数后,我又遇到了一个错误,提示“TypeError: 只能把元组(而不是‘浮点数’)连接到元组”,这个错误是指“netpay=(grosspay)-(sstax+fedtax+statetax)”。以下是我的代码:

HOURS_IN_WEEK=40.0
PAY_RATE=16.78
SS_TAX=0.075
FED_INC_TAX=0.014
STATE_LOC_TAX=0.08
UNIONDUES=10.0
HEALTH_INS=35.0

def getInfo():
    hrs=float(input("How many hours did you work this week?: "))
    dependents=float(input("How many dependents do you have?: "))
    if hrs > HOURS_IN_WEEK and dependents >= 3.0:
        overtime=hrs-HOURS_IN_WEEK
        overpay=overtime *(PAY_RATE*1.5)
        pay=(HOURS_IN_WEEK*PAY_RATE)
        grosspay= overpay+pay
        grosspay= grosspay-HEALTH_INS
    else:
        pay = hrs * PAY_RATE
        grosspay = pay
        print grosspay
    return grosspay,hrs,dependents

def tax(grosspay):
    sstax= grosspay*SS_TAX
    fedtax= grosspay*FED_INC_TAX
    statetax=grosspay*STATE_LOC_TAX
    netpay=(grosspay)-(sstax+fedtax+statetax)

    print sstax
    print fedtax
    print statetax
    print grosspay
    print netpay

def main():
    grosspay=getInfo()
    tax(grosspay)

main()

2 个回答

1

你的问题在于,getInfo() 返回的是一个元组:grosspay, hrs, dependents记住:是逗号让它变成元组,而不是括号!)。这个元组被赋值给了 grosspaymain() 函数里,然后又传递给了你的 tax() 函数。在你的 tax() 函数中,你试图把这个元组(它是一种序列)和一个浮点数相乘,但 Python 不允许这样做。

你可以用一个 int 来乘一个序列,这样会重复这个序列,但显然这不是你想要的结果。

你需要做的是:

grosspay = getInfo()[0]

...或者...

grosspay, _, _ = getInfo()

...只提取 getInfo() 返回值中的 grosspay 部分。

3

这个错误提示是说,你不能用非整数的数字去乘一个序列。

在你的 getInfo() 函数中,你返回了一个序列:

return grosspay,hrs,dependents

这其实是等同于:

return [grosspay, hrs, dependents]

在Python中,当你用一个整数去乘一个序列时,它会把这个序列复制多份:

>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

但是用小数去乘就没什么意义了,这就是为什么会出现这个错误。

你可以通过引用列表中的一个特定元素来解决这个问题(你需要的是 grosspay),所以把这个:

def main():
    grosspay=getInfo()
    tax(grosspay)

改成这个:

def main():
    grosspay, hrs, dependents = getInfo()
    tax(grosspay)

现在 grosspayhrsdependents 都已经设置好了,应该就能正常工作了。

撰写回答