[英]Limiting user input in a list of integers in Python 3.x
我是Python的新手,在我的一个练习中,我需要编写一个程序,它将在列表中存储输入到控制台的5个整数,然后打印它的长度,列表类型,并打印排序列表。
到目前为止,我可以做到的最优雅的方式是将输入限制为5个整数:
a = [int(x) for x in input().split()]
print(len(a), type(a), sorted(a))
但是,我无法理解如何添加命令以仅存储用户在列表中输入的5个数字而忽略其余数字。
我想在范围(5)中对x使用int(input()),但它不起作用,我也不知道如何添加拆分。
我知道有一种方法可以使用map()在列表中存储项目,但我还没有在我的课程中遇到过这个问题,所以如果有一个更简单,更有效的方法来使用list(map())如果有人能指导我,我将非常感激。
我才开始学习,所以任何建议都会受到赞赏。 谢谢!
您有两种选择:
后者会给用户更好的反馈,第一个可能会导致意外( 我的行尾的数字怎么了? )
忽略其余的很容易; 切片你创建的列表; [:5]
创建一个只包含(最多)5个值的新列表:
a = [int(x) for x in input().split(maxsplit=5)[:5]]
上面还告诉str.split()
最多只拆分5次,以避免进一步的工作。
通过命令行工具约定,应将错误消息写入sys.stderr
并使用非零退出代码退出:
a = [int(x) for x in input().split()]
if len(a) > 5: # or len(a) != 5 if you must have exactly 5 values
print('No more than 5 values, please!', file=sys.stderr)
sys.exit(1)
当您使用库来处理命令行解析时,库通常包含一个处理错误通信和退出的函数(例如argparse
,您可以使用parser.error(message)
来发出问题并一步退出)。
通过str.split
的maxsplit
参数将您的拆分限制为前5个数字。
然后切片到但不包括结果列表的最后一个元素。
a = [int(x) for x in input().split(maxsplit=5)[:-1]]
注意你也可以用list
+ map
重写它:
a = list(map(int, input().split(maxsplit=5)[:-1]))
这将保留列表中的前5个项目:
a = [int(x) for x in input().split()[:5]]
使用此选项可为列表中的所有项目提供小于5的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.