在某些时候,我需要用户输入一些特定的句子。
例如,用户应在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")
答案 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,反之亦然。 希望我帮助过:)