2011-12-14 27 views
2

私はPythonの学習者です。私は、給料(salary)、退職する給与の割合(save)、投資の年間成長率のリスト(growthRates)の3つの議論を取る退職金のシミュレーターを探しています。最後の引数の長さは、作業する予定の年の を定義します。"TypeError:型 'float'の非intでシーケンスを掛けることができません"?

TypeError: can't multiply sequence by non-int of type 'float' 

私が書いたコードは次のとおりです:

growthRates[0]は、最初の年の成長率で、 growthRates[1]私はこのエラーを抱えているプログラムを実行する上で二年の成長率など です
def ret_fund(): 
     a = int(input("Enter Salary: ")) 
     b = int(input("Enter Saving Percentage: ")) 
     c = list(input("Enter List of Growth Rates per Year (must be zero for first year): ")) 
     ans_list=[] 
     x = 1 
     global x 
     for i in c: 
      float(i) 
      x = x*(1+0.01*i)+(a*b*0.01) 
      ans_list.append(x) 
     print (ans_list) 

エラーを特定できません。それで私を助けてください。 変数についてはどうですか?c?実際にはプログラムによって要求されるように入力としてlistを受け取ることはありません。私は05643のような数字を入力しなければならず、彼らは1つずつ取り上げられます。 [0, 5, 6, 4, 3]のような入力をしたいのですが?

+0

エラーを投げている行を指定するか、完全なトレースバックを送信する必要があります。 – joaquin

+1

また、それが失敗する正確な入力は何ですか? – NPE

+0

おそらく入力した変数に問題があります。印刷を使用して、cが期待されるものであるかどうかを確認します。 – joaquin

答えて

2

float(i)は何もしません。 i=float(i)を使用するか、公式でifloat(i)と置き換えてください。これは1回しか表示されないためです。

ユーザが入力した内容に応じて、input()は対応するオブジェクトを返します。 0.0, 1.0, 2e10, 99と入力すると、浮動小数点数と整数値のタプルがすでに取得されているため、何かを変換する理由はありません。たとえば、0.01*xはいずれの場合も浮動小数点に変換されるためです。例:

>>> a=input("enter numbers: ") 
enter numbers: 1,2,3.0, 5e-10, 99 
>>> print type(a), repr(a) 
<type 'tuple'> (1, 2, 3.0, 5e-10, 99) 
>>> for i in a: print i, type(i) 
... 
1 <type 'int'> 
2 <type 'int'> 
3.0 <type 'float'> 
5e-10 <type 'float'> 
99 <type 'int'> 
>>> for i in a: print 0.01*i, type(0.01*i) 
... 
0.01 <type 'float'> 
0.02 <type 'float'> 
0.03 <type 'float'> 
5e-12 <type 'float'> 
0.99 <type 'float'> 
+0

変数cはどうですか?プログラムによって要求されるように、実際には「リスト」を入力として受け取るわけではありません。私は05643のような数字を入力しなければなりません。 [0、5、6、4、3]のような入力をしたいのなら、どうしたらいいですか? – Muavia

+0

入力プロンプトに '0、5、6、4、3'と入力するだけで、cは整数値のリストになります。あなたは囲む 'list(...)'は必要なく、返されたタプルを使うだけです。 – hochl

+0

input()の使用は重大なセキュリティ上のリスクです。インタープリターはユーザーが入力した文字列にeval()関数を適用するので、現在の名前空間から任意のargumnentsを呼び出すことができます。raw_input()を使用して自分で分割するほうがはるかに優れています。 Python 3では、input()はユーザーのタイプを評価せず、raw_input()もなくなりました。 – holdenweb

2

問題がxのローカル割り当てをオーバーライドglobal x、です。私は、グローバルxが何らかの種類のリストであると仮定しています。

編集:この回答の以前のバージョンには、成長率を読み取るための誤ったコードが含まれていました。

成長率のリストを読むには、それを単一の文字列として読んで、文字列を分割し、各部分を変換する必要があります。 inputメソッドは、それ自身で正しいことをしません。

c = raw_input("Enter List of Growth Rates per Year (must be zero for first year): ") 
for i in c.split(): 
    i=float(i) 
関連する問題