我正在编写一个包含两个参数的代码,即初始数量和转换为小数的速率。我所要做的就是使用for循环来查找初始数量增长一定速率10年的速率。
def bankInterest(iniBalance, rate):
rate = (int(rate)*(.01))
list = [1,2,3,4,5,6,7,8,9,10]
for x in list:
iniBalance = format((int(iniBalance) + (int(iniBalance)* rate)),'.4f')
print (iniBalance)
它是正确的方法。问题是,当我使用参数(100,10)
时,我得到的答案是256.3
,我想要得到的答案是259.37
并且手动执行该功能,我知道我输了数字因为我的for循环只转到第一个小数。我尝试过使用格式(x,' .2f')我尝试过使用float
,但我无法弄清楚如何使用完整小数制作四个循环号。
答案 0 :(得分:1)
我删除了所有不需要的东西:
def bankInterest(iniBalance, rate):
rate = rate * 0.01
for x in range(1, 11):
iniBalance += iniBalance * rate
print('{:.2f}'.format(iniBalance))
bankInterest(100, 10)
输出看起来不错:
259.37
您不需要一次又一次地将相同的号码投射到int
。而不是list = [1,2,3,4,5,6,7,8,9,10]
只使用range(1, 11)
(list
是内置名称,不应该用于自己的变量)。将iniBalance
保留为浮点数,只有在使用.format()
方法将其打印出来时才转换为字符串。
要利用Python功能,您的功能应该更像这样:
from decimal import Decimal
def bank_interest(balance, rate, years=10):
"""Calulate the new balance with given rate for number of years.
Parameters
----------
balance : initial balance
rate : interest rate in percent, e.g. 7.8 for 7.8%
years : years for which compound interest is to be calculated (default is 10)
`balance` and `rate` need to of type `int` or `decimal.Decimal`
Returns
-------
balance : new balance including compound interest
"""
rate = rate * Decimal('0.01')
for x in range(1, 1 + years):
balance += balance * rate
return balance
print('{:.2f}'.format(bank_interest(100, 10)))
print('{:.2f}'.format(bank_interest(100, Decimal('7.8'))))
输出:
259.37
211.93
按照惯例,变量名称应使用下划线。因此,iniBalance
应该成为ini_balance
。你硬连线years
。它使您的函数更易于使用,years
作为默认参数,值为10
。
为您的函数提供描述文档字符串。输入以下命令可以使用此文档字符串:
>>> help(bank_interest)
在Python提示符下。
此外,将balance
作为函数结果返回允许您再次使用此函数,例如在循环中。在调用函数后,将打印作为最后一件事。只允许使用整数或小数。见下面的警告。
在进行数学计算时不要使用浮点数因为舍入误差而不安全。在Python中,您应该使用Decimal
,如下所示:
from decimal import Decimal
balance = Decimal('100.00')
rate = Decimal('0.02')
new_rate = rate * Decimal('0.01')
答案 1 :(得分:0)
您希望使用round()
代替int()
进行中间计算:
def bank_interest(ini_balance, rate, periods):
rate = int(rate) / 100.0
for x in range(periods):
ini_balance = round(ini_balance * (1 + rate), 2)
return ini_balance
print bank_interest(100, 10, 10)