0

我对 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 手册中看到的那样)因为它是循环的一部分,为了使公式能够工作而无需手动插入任何其他内容。我首先使用字典来创建自动生成的名称,但现在我似乎无法从中获取信息。

什么是最好的解决方案?

在此先感谢您的帮助。这让我快疯了。

4

2 回答 2

2

这是因为您discountratesdict没有调用全局变量discountrates(这是您的函数的名称)。

于 2013-03-06T23:34:21.020 回答
0

我建议你不要像你的函数一样命名你的字典,因为后者会覆盖前者。在第 1 行你说discountrates是一个空dict,在第 2 行你说discountrates是一个函数对象。如果它们,你需要在 python 中给它们不同的名称在同一范围内。

此外,你为什么discountrates需要globaln如果低于以前的价格,您愿意保留旧价格n吗?为了性能,我建议您将两个循环结合起来。除此之外,没有理由为什么第二个循环也不能读取for x ...,因为 zou 无论如何都不再使用 x 了。作为进一步的提示,如果您得出结论,全局是它可能有助于添加的唯一方法global discountratesdict,因此更容易发现这里是全局的,即使在您的特定情况下这不是必需的,因为[]-operator 需要一个对象,因此它已经引用了您的全局对象。

将所有这些放在一起产生:

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) 
于 2013-03-07T08:53:32.890 回答