2011-06-30 7 views
0

このエラーは「sstax = grosspay * SS_TAX」を参照しています。私は何が間違っているのか分からない。 ):グローバル定数を整数に変更した後に、 'TypeError:タプルを連結して、' netpay =(grosspay) - (sstax + fedtax + statetax)を参照するタプルのみを連結することができます。ここ は私のコードです:grosspay,hrs,dependentsは覚えている::それはタプルではなく、括弧を作るコンマです!)TypeError: 'float'型のnon-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 

これは同等です:Pythonで

return [grosspay, hrs, dependents] 

あなたが整数のシーケンスを掛けたとき、あなたはシーケンスを複製:

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

フロートによる乗算はほとんど意味がありません。なぜエラーが発生するのですか?

あなたはそのリストの1つの特定の要素を(あなたがgrosspayの後にある)参照することにより、それを修正するので、この変更することができます。これに

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

:今すぐgrosspay

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

を、hrs、およびdependentsが設定されていて正常に動作するはずです。

+4

'return grosspay、hrs、dependents'はリストではなくタプルを返します。 – RoundTower

+0

ありがとうございます。違いは分かりませんが、キャッチしてくれてありがとう。 – Blender

+0

後でインデックスに割り当てようとすると、その差に気づくだけです。 – detly

1

あなたの問題はgetInfo()はタプルを返すことです。このタプルはgrosspaymain()に割り当てられていて、tax()関数に渡されました。あなたのtax()関数では、このタプル(シーケンスの一種です)に浮動小数点数を掛けようとします。浮動小数点数はPythonではできません。

は、シーケンスを繰り返す効果があるintでシーケンスを掛けていますが、これは明らかにあなたがしたいことではありません。

grosspay = getInfo()[0] 

...か...

grosspay, _, _ = getInfo() 

... getInfo()からの戻り値のだけgrosspay一部を抽出するために:あなたがする必要がどのような

のいずれかです。

関連する問題