2017-06-27 27 views
-1

我已經設置了一個非常基本的計算方法來計算可變年數的複合利息。我定義變量是這樣的:Python - 我更改變量,但輸出保持不變

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

我覺得這段代碼是好的,因爲我可以得到正確的答案,像這樣:

>>> print(final) 
161.051... 

好了,所以我現在要分配一個新的值添加到變量中,然後再次使用新變量重試。所以我這樣做:

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

無論多少次我重新分配變量,答案將保持不變。

它是什麼我失蹤?我有一些模糊的回憶稱爲指針算術,我想知道這是否是相關的,但我似乎無法在任何地方找到答案。

+6

的'basic'標籤名爲BASIC語言,而不是那些簡單的問題。 –

+1

...如果你想自動重新計算(反應式編程,&c),Python的工作是錯誤的語言。設定'final =(initial * rate ** years)'給'final'賦值*,它不建立*關係*。 –

+1

'final'是用你的第一個數字定義的,如果你再次輸入'final =(initial * rate ** years)'這行,這應該起作用 – PRMoureu

回答

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 
+0

感謝大衛,非常清楚的解釋。 – BigDog

0

爲什麼最後的變化值沒有再計算一次! 分配新的價值率後,你需要再次計算最終的價值。那麼只有python會計算final的新值。

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

比方說,你有2桶油漆:紅色和藍色。你從每個油漆中取出一些油漆,並在第3桶混合。真棒!現在你有更多的紫羅蘭色。現在你用紅色油漆桶替換紅色油漆桶。第三桶顏色會改變嗎?不,爲什麼呢?混合顏色後,你沒有碰它。

現在讓我們來談談你的代碼。在乘法之後,你永遠不會改變'最終'變量,你只是改變了其中一個因素。所以要注意,你必須再乘以變化:

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