如何简化我的Python程序?

时间:2013-02-25 05:53:07

标签: python loops

我正在尝试在互联网上找到的这个复利问题:

A = P(1 + r)n,其中P是投资金额,r是年度百分比率(小数5.0%= 0.050),n是投资年数。

3个代表投资,费率和条款的清单

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]

我制作了这样的程序,但我觉得不是像我一样写出来的东西,我可以使用一个叫做循环的东西,但是我不知道如何每次我都能正确地使用for循环,我弄得一团糟它:

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))

等等。

如果这真的很长,我很抱歉。我只是想知道如何循环使用它所以我不必如此重复。

谢谢!

5 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

这将给出一个包含您想要的A1,A2,A3..etc

的列表

答案 2 :(得分: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

答案 3 :(得分: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)

答案 4 :(得分: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将标签字符放在打印输出中,以分隔值并使事物垂直排列。

这样的代码,带有嵌套循环和带有格式代码的print语句,可以在C语言,C ++和各种其他语言以及Python中使用。