类型错误:无法将序列乘以非整数类型的'float'?
这个错误是指“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
(记住:是逗号让它变成元组,而不是括号!)。这个元组被赋值给了 grosspay
在 main()
函数里,然后又传递给了你的 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)
现在 grosspay
、hrs
和 dependents
都已经设置好了,应该就能正常工作了。