0

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

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

ETC...

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

等等。

如果这真的很长,我很抱歉。我只想知道如何循环遍历所有内容,这样我就不必如此重复。

谢谢!

4

5 回答 5

5

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

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

    print '${0:.02f}'.format(A)
于 2013-02-25T05:56:26.087 回答
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 循环的更多信息,请查看此链接

于 2013-02-25T06:00:04.403 回答
0
  Alist = [int(Investment[i]) * (1 + ratedecimal[i])*int(term[i]) for i in range(0,len(investment)]

这将给出一个列表,其中包含您想要的 A1、A2、A3..etc

于 2013-02-25T05:55:00.023 回答
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)
于 2013-02-25T06:04:47.370 回答
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 中使用。

于 2013-02-25T07:32:08.707 回答