[英]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.