命令行中的简单排序程序

时间:2019-10-03 20:15:24

标签: python

我试图防止这种简单的排序程序在反向打印时仅接受1个参数。这是我输入的内容,仍然可以通过:

python sort.py  alpha -r

这是我的整个程序:

示例:python sort.py能够启用Spencer增量 扭转: python sort.py -rable spencer delta python sort.py-可逆spencer delta

import argparse
import sys

def wordsorter():
    argparser = argparse.ArgumentParser()
    argparser.add_argument('user_string', nargs='*')
    argparser.add_argument("-r","-- 
reverse",action="store_true",default="False",dest="z_to_a")
args = argparser.parse_args()
if (len(sys.argv)==1 or len(sys.argv)==2):
    print("Invalid command line arguments to program. Please, supply two or more strings to sort.")
    sys.exit(1)

if args.z_to_a == True and len(sys.argv)>1:
    words_to_sort= sorted(args.user_string, reverse = True)
    print(*words_to_sort)
    print("if 1")
else:

    words_to_sort = sorted(args.user_string)
    print(*words_to_sort)
    print("if 2")
if __name__ == '__main__':
    wordsorter ()

当我输入一个参数而不进行反向排序时,它可以工作 如果我尝试对一个参数使用反向,则它不起作用。 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您的问题是由以下事实引起的:您告诉argparse期望user_string的任意数量的参数,而不是至少两个,然后检查len(sys.argv) >= 2(顺便说一句,这样更好的方式写成条件),但如果您传递-ruser_string仅一个参数,则可以等于2。

您可以检查len(args.user_string) >= 2并且应该可以使用。

如果您想通过argparse做到这一点:不幸的是,虽然可以告诉它至少期望一个参数,但无法直接告诉它至少期望两个this答案中描述了一种可能的解决方法。