2013-03-06 66 views
0

我對Python非常陌生,作爲練習,我嘗試使用代碼解決基本的財務練習。我的目標是獲得即期匯率字典,然後根據這些字典計算折扣率字典。我曾想過這樣的事情:在Python函數中訪問循環創建的字典的特定值

discountrates={} 

def discountrates(n): 
    spotrates={} 
    for x in range(1,n+1): 
     spotrates['s'+str(x)]=float(input('What is s'+str(x)+'? (not in percentage)')) 
    for y in range(1,n+1): 
     discountrates['d(0,'+str(y)+')']= 1/((1+float(spotrates['s'+str(y)]))**y) 
    for key, value in discountrates.items(): 
     print (key, value) 

現在的問題是字典項目不能在函數中訪問。當我查看你的論壇時,我找到了解開字典的解決方案,但是在我的情況下,這不起作用,因爲我需要訪問字典中的特定元素,其名稱不能完全指定(正如我在Python手冊中看到的)因爲它是循環的一部分,以便公式無需手動插入其他任何東西即可工作。我首先使用了字典來創建自動生成的名稱,但現在我似乎無法從中獲取信息。

什麼是最佳解決方案?

在此先感謝您的幫助。這讓我瘋狂。

回答

2

這是因爲你叫你的全局變量discountratesdict而不是discountrates(這是你的函數的名稱)。

0

我建議你不要「噸命名的字典一樣的功能,因爲稍後會覆蓋前者。在第1行,你說discountrates是一個空dict,在第2行,你說discountrates是一個函數對象,你需要給在python他們不同的名字,如果他們在同一個範圍。

而且爲什麼你需要discountratesglobal?你想保持舊利率,如果n比先前的n小?出於性能方面的,我建議你結合兩個循環,除此之外,沒有理由爲什麼第二個循環無法讀取for x ...,因爲zou不再使用x了。呃暗示,如果你得出結論,一個全球性是它可能有助於增加global discountratesdict的唯一途徑,所以這裏更容易發現一個全球性的意圖,儘管在你的特殊情況下這不是必需的,因爲[]操作員需要一個對象,因此它已經指向你的全局。

把所有這一起產量:

discountratedict={} 

def discountrates(n): 
    global discountratedict 
    spotrates={} 

    for x in range(1,n+1): 
     spotrates['s'+str(x)]=float(input('What is s'+str(x)+'? (not in percentage)')) 
     discountratedict['d(0,'+str(x)+')']= 1/((1+float(spotrates['s'+str(x)]))**x) 

    for key, value in discountratedict.items(): 
     print (key, value)