簡體   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