2017-08-24 141 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,反之亦然。 希望我帮助:)