2017-08-24 118 views
2

在一定的時間內我需要用戶輸入一些特定的句子。python - 定時用戶輸入

例如,用戶應該寫在下面句子在10秒時:

Hello! World. 

但是,如果用戶是無法完成那麼完整的句子不管一個人寫了應該被接受。所以,如果一個人只能寫Hello! Wo那麼它應該被存儲。

問題 - 如果用戶在時間前沒有按回車/回車鍵,則不會保存任何內容。如何克服這一點?這是我的方法 -

import time 
from threading import Thread 

print('Hello! World') 
user = None 

def check(): 
    time.sleep(10) 
    if user != None: 
     return 
    print ("Too Slow") 

Thread(target = check).start() 

user = input("Enter above string: \n") 
+2

檢查了這一點:https://stackoverflow.com/questions/3523174/raw-input-in-python-without-pressing-enter –

+0

與鍵盤聽者嘗試 – Gahan

回答

1

我會採取不同的方法(即不需要線程); 我會在打印「hello world」之前保存當前數據結束時間,然後比較當前時間。

from datetime import datetime, timedelta 

start = datetime.now() 
print("Hello world!") 
if input() == "Hellow world!" and datetime.now()<=start + timedelta(seconds = 10): 
    #the user got it right 
else: 
    #the user was either too slow or got it wrong 
+0

我需要停止用戶在確切的指定時間,否則你的方法可能會有用。 – dataLeo

+0

然後你不能真正使用輸入() – Treehee

+0

也許嘗試使用pygame這種事情;) – Treehee

1

要做到這一點你必須用你自己的事件處理程序,當用戶打他的鍵盤上的鍵,將檢測到創建自己的窗口。標準input()方法甚至wxPython中的自定義textControl小部件都很酷,但一直等到用戶點擊Enter鍵。所以我不幸地認爲你必須使用一些GUI庫(例如wxpython,它提供了你的操作系統的本地外觀和一些有用的小部件),並且自己處理事件處理。如果您寧願實現比該GUI更長的超時時間,則可以在一個線程中運行用戶輸入,並立即用計時器啓動第二個線程。然後編寫一個處理程序,在定時器完成時終止inputThread,反之亦然。 希望我幫助:)