2013-02-25 45 views
1

我正在尝试在互联网上发现的这个复利兴趣问题:如何简化我的Python程序?

A = P(1 + r)n,其中P是投资金额,r是年百分比率(小数点后五分之一= 0.050),n是投资年数。代表投资,利率和条款

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00] 
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40] 

我做了我这样的程序,但我感觉,而不是写出来的一切像我一样,我可以使用一种叫做环,但我

3列出不知道我怎么可以用一个for循环正确的Cuz每次我这样做,我搞砸了:

rateindecimal = [int(rate[0])/100.0, int(rate[1])/100.0, int(rate[2])/100.0), int(rate[3])/100.0, int(rate[4])/100.0] 

我转换的百分比率成十进制,但我怎么能使用一个循环,而不是通过速度表运行并轻松转换它?

然后我做到了。我觉得这是过于重复,再次,我觉得我需要一个循环,但我不使用一个很好的...

A1 = int(Investment[0]) * (1 + ratedecimal[0])**int(term[0]) 
A2 = int(Investment[1]) * (1 + ratedecimal[1])**int*term[1]) 

等等

print "$" + str(round(A1, 2)) 
print "$" + str(round(A2, 2)) 

等与以及。

对不起,如果这真的很长。我只想知道如何循环播放,所以我不必如此重复。

谢谢!

+0

你确实需要学习一些Python编程的基础知识。有一个教程可以使用,叫做“Python学习困难之路”。最好从头开始,但如果你愿意,你可以跳到循环中的章节。您可以免费使用本教程;或者如果您愿意,可以购买某种视频。 http://learnpythonthehardway.org/ – steveha 2013-02-25 07:35:42

回答

0
Alist = [int(Investment[i]) * (1 + ratedecimal[i])*int(term[i]) for i in range(0,len(investment)] 

这会给包含您打算A1,A2列表,A3..etc

5

使用zip()来压缩在一起,然后.format()输出:

for investment, rate, term in zip(investments, rates, terms): 
    A = investment * (1 - rate/100) ** term 

    print '${0:.02f}'.format(A) 
0

为什么不试试以下基本方法,这是在Python中循环的最简单方法之一:

A = list() 
# The following will execute the body of the loop for all numbers from 0 to the number 
# of items in investment - 1. So in your case i = 0 to 4 
for i in range(len(investment)): 
    rateindecimal = int(rate[i])/100 
    A.append(int(investment[i]) * (1 + ratedecimal)**int(term[i])) 
    print "$", str(round(A,2)) 

虽然我不确定四舍五入,因为我认为因为经常使用int(),所以 将不会有一个浮点数来轮回......也许你应该尝试使用float()来代替。

有关python for循环的更多信息,请查看this link

0

这是一些循环,可以做你想要的东西。

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00] 
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40] 

# this is how I would use a loop in your first problem 
rateindecimal = list() 
for i in range(0, len(rate)): 
    rateindecimal.append(int(rate[i])/100.0) 

# this is how i'd solve your second problem 
a = list() 
for i in range(0, len(investment)): 
    a.append(int(investment[i]) * (1 + rateindecimal[i])**int(term[i])) 

# then a loop for the printing 
for result in a: 
    # print "${0}".format(str(round(result, 2))) 
    print '$%.3f' % round(result, 2) 
+0

可能要更改为0的指数来我比,你的第二个循环;) – MrHug 2013-02-25 06:05:51

+0

@KevinMullin非常感谢你的帮助!但是,有没有办法让A到百分之一?我试过了,但它不工作... – user2006236 2013-02-25 06:46:52

+0

@ user2006236我调整了我的答案,以不同的方式输出浮点值。您可以通过更改此字符串中的数字来自行调整它,该数字指定显示多少个小数位。 '%.3f' – 2013-02-25 17:59:14

0

对于这样的基本问题,我认为最好保持代码简单。简单的代码易于阅读和理解,并且易于编写。

下面是一个使用三个嵌套for循环的解决方案:

lst_investment_amt = [10000.00, 10000.00, 10000.00, 10000.00, 1.00] 
lst_rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
lst_term = [20, 40, 20, 40, 40] 


for amt in lst_investment_amt: 
    for rate in lst_rate: 
     for term in lst_term: 
      r = 1.0 + (rate/100.0) 
      final = amt * r**term 
      print("amt: $%6d\trate: %2.1f\tterm: %2d\tfinal: %15.2f" % 
       (int(amt), rate, term, final)) 
    print('') # insert blank line to set off previous amount from next one 

注意,因为我们有三个实际嵌套循环,我可以添加一个print('')语句打印空白行,每个金额分开从每个下一个数量。

Python有一些非常漂亮的功能:名单解析,发电机表情,zip()。但对于这个简单的问题,我真的认为上面的代码是要走的路。

注意我是如何使用的%格式代码在这里。当你做一个像%6.2f这样的代码时,这意味着“打印一个浮点值,其中总值将是6个字符长,小数点后面会有两个数字”。小数点计为一个字符,因此这将是一个格式为123.45的数字,小数点前三位数字,后两位数字。如果数字太大(例如,100000.55),那么它将被允许扩大出的6个字符的限制,但如果过小(例如,1.0)将用空格填充了。

还请注意我用的\t把制表符在打印输出,分离值,使事情垂直对齐。

这样的代码,具有嵌套循环,并用格式代码打印语句,可以在C语言中使用,C++,和各种其它的语言,以及Python的。