4

我有一个 Python 3.2 程序,可以计算未来任意时间段的投资价值,它可能适用于单利和复利。问题是我定义了两个函数,“main()”和“main2()”,第一个是简单的,第二个是复利的。现在我想做的是,给定用户的一些输入,程序在运行 main() 或 main2() 之间进行选择。关于如何做到这一点的任何想法?

4

2 回答 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/elsePython 构造来调用您的simplecompound计算例程

考虑到 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 回答