Python - 我改变了变量,但输出保持不变

时间:2017-06-27 23:57:31

标签: python

我已经建立了一个非常基本的计算方法来计算可变年数的复利。我定义了这样的变量:

>>> initial = 100
>>> rate = 1.1
>>> years = 5
>>> final = (initial*rate**years)

我认为这段代码很好,因为我可以得到正确答案:

>>> print(final)
161.051...

好的,现在我想为变量分配一个新值,然后再使用新变量重试。所以我这样做:

>>> rate = 1.05
>>> print(final)
161.051...

无论我重新分配变量多少次,答案都会保持不变。

我错过了什么?我对一些叫做指针算术的东西有一些模糊的回忆,我想知道这是否完全相关,但我似乎无法找到答案。

3 个答案:

答案 0 :(得分:3)

假设你有两桶油漆:红色和蓝色。你从每个油漆中取出一些油漆并在第3桶中混合在一起。真棒!现在你有额外的紫罗兰色。现在用绿色油漆桶替换红色油漆桶。第3桶的颜色会变化吗?不,为什么会这样?混合颜色后没有触摸它。

现在让我们谈谈你的代码。你永远不会在乘法后改变'final'变量,你只是改变了其中一个因素。所以要注意你必须再次增加的变化:

>>>rate=1.05
>>>final=(initial*rate**years)
>>>print(final)

答案 1 :(得分:0)

当你没有再次计算时,为什么最终改变的价值呢! 在分配新的价值后,您需要再次计算最终价值。然后只有python会计算最终的新值。

>>>rate=1.05
>>>final=(initial*rate**years)
>>>print(final)
127.62815625

答案 2 :(得分:0)

根据对问题的评论,这样重新计算的最简单方法是定义一个执行计算的函数。

E.g。

def calculate_final_loan_principal(initial, rate, years):
    return initial*rate**years

然后可以这样调用:

>>> calculate_final_loan_principal(initial=100, rate=1.1, years=5)
161.05100000000004
>>> calculate_final_loan_principal(initial=100, rate=1.05, years=5)
127.62815625000003

为了清楚起见,参数名称包含在那里,但在调用函数时实际上并不需要:

>>> calculate_final_loan_principal(100, 1.05, 5)
127.62815625000003

或者,如果您定义了一个类,那么您可以使用属性。我认为这有点过分,但OP特别询问了这一点。

class CompoundInterestLoan:
    def __init__(self, initial, rate, years):
        self.initial = initial
        self.rate = rate
        self.years = years

    @property
    def final(self):
        return self.initial*self.rate**self.years

然后,您需要创建该类的实例才能使用它:

>>> loan = CompoundInterestLoan(initial=100, rate=1.1, years=5)
>>> loan.final
161.05100000000004
>>> loan.rate = 1.05
>>> loan.final
127.62815625000003