我是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手册中看到的那样)因为它是循环的一部分,为了使公式工作而不必手动插入任何其他东西。我首先使用字典来创建自动生成的名称,但现在我似乎无法从中获取信息。
什么是最佳解决方案?
提前感谢您的帮助。这让我发疯了。
答案 0 :(得分:2)
这是因为您调用了全局变量discountratesdict
而不是discountrates
(这是您的函数的名称)。
答案 1 :(得分:0)
我建议你不要像你的功能那样命名你的字典,因为后者会覆盖前者。在第1行你说discountrates
是空的dict
,在第2行你说{{1是一个函数对象。如果它们在同一个范围内,你需要在python中给它们不同的名称。
此外,为什么discountrates
需要discountrates
?如果global
小于之前的n
,您是否希望保留旧费率?为了性能,我建议你结合两个循环。除此之外,没有理由为什么第二个循环也不能读取n
,因为无论如何都不再使用x。作为进一步的提示,如果你得出结论,全局是它可能有助于添加for x ...
的唯一方式,因此更容易发现全局意图在这里,即使这不是必需的你的特殊情况,因为global discountratesdict
- 运算符需要一个对象,因此它已经引用了你的全局。
将所有这些放在一起产生:
[]