我正在尝试在互联网上找到的这个复利问题:
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))
等等。
如果这真的很长,我很抱歉。我只是想知道如何循环使用它所以我不必如此重复。
谢谢!
答案 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中使用。