python - 定时用户输入

时间:2017-08-24 10:21:41

标签: python python-3.x input

在某些时候,我需要用户输入一些特定的句子。

例如,用户应在10秒内写下以下句子:

Hello! World.

但是,如果用户无法完成完整的句子,那么应该接受所写的任何内容。因此,如果一个人只能写Hello! Wo,那么就应该存储它。

问题 - 如果用户未在时间之前点击Return / Enter,则不会保存任何内容。怎么克服这个?这是我的方法 -

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 个答案:

答案 0 :(得分:1)

我会采取不同的方法(不需要线程); 我会在打印之前保存当前的dat结束时间" 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

答案 1 :(得分:1)

为此,您必须使用自己的事件处理程序创建自己的窗口,该事件处理程序会在用户按下键盘上的某个键时检测到。 wxPython中的标准input()方法甚至自定义的textControl小部件很酷,但总是等到用户按Enter键。所以我不幸认为你必须使用一些GUI库(例如wxpython,它提供了你的操作系统的本机外观和一堆有用的小部件),并自己处理事件处理。如果你宁愿实现超时而不是GUI,你可以在一个线程中运行用户输入,并立即用计时器启动第二个。然后写一个处理程序,当计时器结束时,它会杀死inputThread,反之亦然。 希望我帮助过:)