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

它给了我错误:期望一个参数,并且在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.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
于 2013-07-24T15:48:49.377 回答