繁体   English   中英

限制Python 3.x中的整数列表中的用户输入

[英]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.splitmaxsplit参数将您的拆分限制为前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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM