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

Python—我更改了变量,但输出保持不变,python,Python,我已经建立了一个非常基本的计算方法来计算出可变年数的复利。我这样定义变量: >>> initial = 100 >>> rate = 1.1 >>> years = 5 >>> final = (initial*rate**years) >>> calculate_final_loan_principal(initial=100, rate=1.1, years=5) 161.05100000000004

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

>>> initial = 100
>>> rate = 1.1
>>> years = 5
>>> final = (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
我认为这段代码很好,因为我可以得到这样的正确答案:

>>> print(final)
161.051...
好的,现在我想给变量分配一个新值,然后用新变量再试一次。所以我这样做:

>>> rate = 1.05
>>> print(final)
161.051...
无论我重新分配变量多少次,答案都将保持不变


我错过了什么?我模糊地记得一种叫做指针算术的东西,我想知道它是否相关,但我似乎在任何地方都找不到答案。

为什么当你不再计算它时,最终值会改变呢! 分配新的速率值后,需要再次计算final的值。然后只有python将计算final的新值

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

假设你有两桶油漆:红色和蓝色。你们从每一个桶里取一些油漆,在第三个桶里混合。令人惊叹的现在你有了额外的紫罗兰色。现在你用绿色油漆桶代替红色油漆桶。第三个桶的颜色会改变吗?不,为什么会这样?混合颜色后你没有碰它

现在让我们谈谈你的代码。乘法后,你永远不会改变“final”变量,你只是改变了它的一个因子。因此,要注意变化,必须再次乘以:

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

根据对问题的评论,重新计算类似的内容的最简单方法是定义一个执行计算的函数

例如

然后可以这样称呼它:

>>> initial = 100
>>> rate = 1.1
>>> years = 5
>>> final = (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

basic标签是针对名为basic的语言的,而不是针对简单的问题……如果您想要自动重新计算反应式编程,&c,那么Python就不适合这个工作了。设置final=initial*rate**years为final指定了一个值,它不会建立关系。final是用您的第一个数字定义的,如果您再次输入final=initial*rate**years行,这应该是有效的。您没有设置非常基本的计算,您已经执行了非常基本的计算。代码final=初始*费率**年意味着计算初始的当前值乘以费率的当前值乘以当前年份值的幂,并将结果分配给变量final。对于分配到最终值时已存在的值,此操作仅执行一次。如果希望在每次调用时都重新计算某些内容,请查看如何定义函数。变量“final”的值保持不变,因为变量是保存您设置的信息的地址。如果你没有重置你保存在那个地址上的任何信息,它不会改变。您需要调用代码:final=initial*rate*years以使用rate的新值重新初始化final的新值。改变一个变量并不意味着它改变了以前使用该变量的所有声明;