0

argparse を使用して基本的な電卓を作成しています。基本的に、コマンド ラインからいくつかの数値を受け取り、その後に加算、減算、乗算、除算のいずれかのアクションを実行します。私は今、追加部分しか持っていません。これが私のコードです:

import argparse
from sys import argv

def get_args(args):
    parser = argparse.ArgumentParser(description = 'Calculator')
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
           help='an integer for the accumulator')
    parser.add_argument('--add',dest = 'sum',help = "Adds the set of numbers")
    parser.add_argument('--subtract', 
                    help = "Subtracts the set of numbers")
    args = parser.parse_args()

def main(argv):
    args = get_args(argv[0:])
    if args.a or args.add:
        return sum(args)

if __name__ == "__main__":main(argv)

ただし、入力すると:

calculator.py 1 2 3 --add

それは私にエラーを与えます:1つの引数が期待され、また、Pythonには関数sum()がありますが、減算、乗算、および除算関数もありますか? そうでない場合、sum() 関数を使用せずに合計を返すにはどうすればよいですか。forループを使用してすべての数値を循環すると思いますか?

したがって、for ループを使用すると、次のようになります。

def main:
    args = get_args(argv[0:])
    if args.a or args.add:
        for row in argv[1:]:
            sum = sum + argv[row]
        print sum
4

1 に答える 1

2

コマンド--addライン スイッチに引数が必要です。代わりにスイッチにします:

parser.add_argument('--add', action='store_true', help="Adds the set of numbers")

引数を削除したことに注意してください。結果をではなくdestに格納する必要があります。args.addargs.sum

関数は次の結果を返すget_args()必要があります。parser.parse_args()

def get_args(args):
    # ....
    return parser.parse_args()

args.aのみをテストするだけで、名前空間オブジェクト自体ではなく、属性args.addを合計する必要があります。おそらく結果を印刷したいと思うでしょう:args. integersargs

if args.add:
    print sum(args.integers)

代わりにループを使用したい場合は、次のようにループしargs.integersます。

if args.add:
    result = 0
    for value in arg.integers:
        result += value
    print result
于 2013-07-24T15:48:49.377 に答える