[英]compare the value with the key in a dictionary
class VariableRateLoan(Loan):
def __init__(self, term, rateDict, face):
super(VariableRateLoan, self).__init__(term, rateDict, face)
self._term = float(term)
self._face = float(face)
if type(rateDict) is not dict:
print('Please enter the rate as a dict')
else:
self._rateDict = rateDict
def getRate(self, T):
keyList = list(self._rateDict.keys())
if T > self._term:
print('Term entered cannot exceed the total terms of this loan!')
for i, v in enumerate(keyList):
if keyList[i] <= T < keyList[i+1]:
return self._rateDict[keyList[i]]
else:
return self._rateDict[max(self._rateDict.keys())]
下面是我的測試程序
def main():
rate_dict = {0: 0.03, 5: 0.05, 11: 0.07}
loan1 = VariableRateLoan(120, rate_dict, 100000)
print(loan1.getRate(7))
所以基本上,如果我為 getRate 輸入 T=7,我應該得到 T=5 的速率,即 0.05,但現在它為我返回 0.07。 但是如果我輸入任何低於 5 的值,它會正確地給出一個從 T=0 開始的 0.03。 我不確定我的代碼有什么問題。
keyList[i] <= T < keyList[i+1] (這里是我嘗試實現的邏輯,如果T輸入在兩個鍵之間的范圍內,它將使用下鍵返回值)
需要注意的一件事:我並沒有真正對鍵進行排序,因為傳入的每個字典都從 0 開始,在后面的術語結束。
可能不是最優雅的,但應該很容易閱讀
def getRate(self, T):
if T > self._term:
print("Term entered cannot exceed the total terms of this loan!")
required_key = max(term for term in self._rateDict if term <= T)
return self._rateDict[required_key]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.