2011-06-30 67 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一部分。

相關問題