2011-12-14 101 views
2

我是一名python学习者。我试图找到一个退休基金模拟器,它有三个参数:工资(salary),您的工资的一定百分比(save)以及投资年增长百分比列表(growthRates)。最后一个参数的长度定义了您计划工作的年数 ; growthRates[0]是第一年的增长速度,growthRates[1]是第二年上运行的程序我在这个错误的增长率等 :如何删除“TypeError:无法乘以类型'float'的非int的序列?

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

我写的代码是:

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这样的数字,并且他们会一个接一个地被选中。如果我想给[0, 5, 6, 4, 3]这样的输入怎么办?

+0

您应该指出哪条线路正在抛出错误或发布完整的回溯。 – joaquin 2011-12-14 15:28:46

+1

也是,它失败的确切输入是什么? – NPE 2011-12-14 15:29:08

回答

2

声明float(i)什么都不做。请使用i=float(i)或在float(i)的公式中将i替换为i,因为它只出现一次。

根据用户输入的内容,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'> 
2

的问题是与global x,它覆盖的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) 
相关问题