使用Argparse创建计算器

时间:2013-07-24 15:45:08

标签: python command-line-arguments argparse

我正在使用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

它给了我错误:期望一个参数,并且在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

1 个答案:

答案 0 :(得分:2)

您的--add命令行开关想要参数。改为改为开关:

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

请注意,我删除了dest参数,您希望结果存储在args.add中,而不是args.sum

您的get_args()函数需要返回 parser.parse_args()的结果:

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

不会有args.a,只测试args.add,并且您希望对args. integers属性求和,而不是args命名空间对象本身。您可能想要打印结果:

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

如果您想使用循环,请循环遍历args.integers

if args.add:
    result = 0
    for value in arg.integers:
        result += value
    print result