命令行的简单排序程序

2024-04-25 23:54:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

python sort.py  alpha -r

以下是我的整个计划:

示例:python排序.py斯宾塞三角洲 要反转: python排序.py-能干的斯宾塞三角洲 python排序.py--可反转斯宾塞三角洲

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,它应该不会起作用。 我做错什么了?你知道吗


Tags: topy参数stringlenif排序sys
1条回答
网友
1楼 · 发布于 2024-04-25 23:54:11

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

您可以检查len(args.user_string) >= 2,这应该可以工作。你知道吗

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

相关问题 更多 >