簡體   English   中英

將值與字典中的鍵進行比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM