4

私は、投資の価値を計算する Python 3.2 プログラムを持っています。このプログラムは、将来の任意の期間にわたって実行されます。単利と複利の両方で機能する可能性があります。問題は、「main()」と「main2()」という 2 つの関数を定義したことです。1 つ目は単利用で、2 つ目は複利用です。ここで私がやりたいことは、ユーザーからの入力を考慮して、プログラムが 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 コンストラクトを使用してルーチンsimpleまたはcompound計算ルーチンを呼び出すこともできます

複利ルーチンが追加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 に答える