2011-06-30 45 views
0

此错误指的是“sstax = grosspay * SS_TAX”。我不知道我做错了什么。 ):将全局常量改为整数后,我得到另一个错误,说'TypeError:只能连接元组(而不是“浮动”)元组''参考“netpay =(grosspay) - (sstax + fedtax + statetax)”。 这里是我的代码:TypeError:无法乘以'float'类型的非int序列?

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() 

回答

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) 

现在grosspayhrs,并dependents已设置,它应该工作正常。

+4

'return grosspay,hrs,dependents'返回一个元组,而不是一个列表。 – RoundTower

+0

谢谢。我真的没有看到有什么不同,但谢谢你的收获。 – Blender

+0

如果您稍后尝试分配索引,则只会注意到区别。 – detly

1

您的问题是getInfo()返回一个元组:grosspay,hrs,dependents记住:那就是做一个元组,而不是括号中的逗号!)。这个元组被分配到grosspaymain(),然后传递给你的tax()函数。在你的tax()函数中,你试着用一个浮点数乘这个元组(这是一种序列),而Python不会这样做。

可以乘以一个int序列,它具有重复序列的效果,但这显然不是你想要做的。

你需要做的是两种:

grosspay = getInfo()[0] 

......或者......

grosspay, _, _ = getInfo() 

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

相关问题