我有一个 Python 3.2 程序,可以计算未来任意时间段的投资价值,它可能适用于单利和复利。问题是我定义了两个函数,“main()”和“main2()”,第一个是简单的,第二个是复利的。现在我想做的是,给定用户的一些输入,程序在运行 main() 或 main2() 之间进行选择。关于如何做到这一点的任何想法?
问问题
4293 次
2 回答
10
首先,给你的函数起更好的名字。然后使用映射:
def calculate_compound(arg1, arg2):
# calculate compound interest
def calculate_simple(arg1, arg2):
# calculate simple interest
functions = {
'compound': calculate_compound,
'simple': calculate_simple
}
interest = functions[userchoice](inputvalue1, inputvalue2)
因为 Python 函数是一等公民,所以您可以将它们存储在 Python 字典中,使用键查找它们,然后调用它们。
于 2013-01-20T15:58:27.257 回答
2
您可以将解决方案用作 Martijn 的海报,但您也可以使用if/else
Python 构造来调用您的simple
或compound
计算例程
考虑到 Compound Interest 例程应该采用额外的参数n
,即感兴趣的频率计算,因此您可以根据参数长度切换函数调用。
此外,您的驱动程序例程应该接受可变参数以接受两种函数的参数
>>> def calc(*args):
if len(args) == 3:
return calc_simple(*args)
elif len(args) == 4:
return calc_compund(*args)
else:
raise TypeError("calc takes 3 or 4 arguments ({} given)".format(len(args)))
>>> def calc_compund(*args):
P, r, n, t = args
print "calc_compund"
#Your Calc Goes here
>>> def calc_simple(*args):
P, r, t = args
print "calc_simple"
#Your Calc Goes here
>>> calc(100,10,2,5)
calc_compund
>>> calc(100,10,5)
calc_simple
>>> calc(100,10)
Traceback (most recent call last):
File "<pyshell#108>", line 1, in <module>
calc(100,10)
File "<pyshell#101>", line 7, in calc
raise TypeError("calc takes 3 or 4 arguments ({} given)".format(len(args)))
TypeError: calc takes 3 or 4 arguments (2 given)
>>>
于 2013-01-20T16:14:55.513 回答