簡體   English   中英

按下某個鍵時停止讀取輸入

[英]Stop reading input when a key is pressed

我是編程新手,已經開始學習Python了。 我的工作簿中的一個問題要求我繼續接受輸入,直到按下一個鍵。 我想出了兩個解決方案,我想知道一個是否優先於另一個。 有人告訴我,我應該避免產生無限循環的條件,所以我想知道解決方案1.這里它們是:

解決方案1

while True:
integer = int(input("Please enter an integer (0 exits): "))
if integer != 0:
    list.append(integer)
else:
    break

解決方案2

integer = int(input(“Enter an integer (0 exits): “))
while integer != 0:
    list.append(integer)
    integer = int(input(“Enter an integer (0 exits): “))

更多pythonic方式:

sentinel = 0
[int(n) for n in iter(input,sentinel)]

Input:
1
2
4
0
Result:
[1,2,4]

你需要小心字符串輸入,如字符或特殊字符。 您需要添加一些try / catch代碼來處理這些情況。

final = []
while True:
    try:
        integer = int(input("Enter an integer (0 exits): "))
        if integer == 0: break
        final.append(integer)
    except:
        print ("Input wasn't a int.")

試圖保持盡可能接近現有解決方案並盡可能可讀。

您可以將lambdaiter結合使用,以允許您向輸入添加字符串以向用戶提供消息,並允許try/except捕獲輸入的任何值,這些值無法強制轉換為int,向用戶輸出相應的消息,第二個arg to iter是一個哨兵值,一旦輸入就會打破循環。 它必須是一個字符串,因為我們沒有投射,直到我們進入try / except:

res = []
for val in iter(lambda: input("Please enter an integer (0 exits): "), "0"):
    try:
        res.append(int(val))
    except ValueError:
        print("Integers only")
print(res)

我們需要lambda作為iter的第一個arg必須是可調用的,因為我們已經添加了用戶輸出消息,我們已經調用了該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM