Python 命令行中的简单排序程序
我试图阻止这个简单的排序程序在反向打印时只接受1个参数。这是我键入的内容,它仍然会通过: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
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