TypeError:不能将序列乘以'float'类型的非int?

时间:2011-06-30 02:36:30

标签: python

此错误指的是“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 个答案:

答案 0 :(得分: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,它应该可以正常工作。

答案 1 :(得分:1)

您的问题是getInfo()会返回一个元组:grosspay,hrs,dependents记住:它是制作元组的逗号,而不是括号!)。此元组将分配给grosspay中的main(),然后传递给您的tax()函数。在你的tax()函数中,然后尝试用浮点数乘以这个元组(这是一种序列),Python不会这样做。

可以将序列乘以int,这样可以重复序列,但这显然不是你想做的。

您需要做的是:

grosspay = getInfo()[0]

...或...

grosspay, _, _ = getInfo()

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