Python 命令行中的简单排序程序

Python 命令行中的简单排序程序,python,Python,我试图阻止这个简单的排序程序在反向打印时只接受1个参数。这是我键入的内容,它仍然会通过: python sort.py alpha -r 以下是我的整个计划: 示例:python sort.py-able spencer delta 要反转: python sort.py-r-able spencer delta python sort.py——可反转的spencer delta import argparse import sys def wordsorter(): argpar

我试图阻止这个简单的排序程序在反向打印时只接受1个参数。这是我键入的内容,它仍然会通过:

python sort.py  alpha -r
以下是我的整个计划:

示例:python sort.py-able spencer delta 要反转: python sort.py-r-able 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 ()
当我输入一个参数而不按相反顺序排序时,它就起作用了 如果我试着在一个参数中使用reverse,它将不起作用。
我做错了什么?

您的问题是由以下事实引起的:您告诉argparse要为
user\u string
期望任意数量的参数,而不是至少两个,然后检查
len(sys.argv)>=2
(顺便说一句,这是编写if条件的更好方法),但是,如果传递
-r
并且只有一个
user\u string
参数,则它可以等于2

您可以检查
len(args.user\u string)>=2
,这应该可以工作


如果您想通过argparse执行此操作:不幸的是,虽然可以告诉它至少需要一个参数,但无法直接告诉它至少需要两个。答案中描述了一种可能的解决方法。

有2个空格的原因吗
sort.py alpha
2个空格或10个空格参数解析
if(len(sys.argv)==1或len(sys.argv)==2)
不要这样做,让argparsetry使用
if len(args.user_字符串)<2:
而不是检查
sys.argv