我试图阻止这个简单的排序程序在反向打印时只接受一个参数。这是我键入的内容,它仍然通过:
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,它应该不会起作用。 我做错什么了?你知道吗
您的问题是由以下事实引起的:告诉argparse为
user_string
期望任意数量的参数,而不是至少两个,然后检查len(sys.argv) >= 2
(顺便说一下,这是编写if条件的更好方法),但是如果传递-r
,并且只为user_string
传递一个参数,则它可以等于2。你知道吗您可以检查
len(args.user_string) >= 2
,这应该可以工作。你知道吗如果您想通过argparse执行此操作:不幸的是,虽然可以告诉它至少需要一个参数,但不能直接告诉它至少需要两个。一个可能的解决方法在this答案中描述。你知道吗
相关问题 更多 >
编程相关推荐