Python 用输入中断循环
我试着在一个问题上做一个输入计时器,给用户5秒钟的时间来回答这个问题,然后再决定没有输入和错误的答案是一样的,但是没有人想用10英尺长的杆子去碰它,所以我试着用另一种方式去做,用输入来打破一个for循环? 有人有什么建议吗Python 用输入中断循环,python,python-3.x,Python,Python 3.x,我试着在一个问题上做一个输入计时器,给用户5秒钟的时间来回答这个问题,然后再决定没有输入和错误的答案是一样的,但是没有人想用10英尺长的杆子去碰它,所以我试着用另一种方式去做,用输入来打破一个for循环? 有人有什么建议吗 import random import operator qLimit = 10 oqLimit = 10 score = 0 maxNum = 10 timeLimit = 0 otimeLimit = 5 import time ops = { '+':ope
import random
import operator
qLimit = 10
oqLimit = 10
score = 0
maxNum = 10
timeLimit = 0
otimeLimit = 5
import time
ops = {
'+':operator.add,
'-':operator.sub
}
def generateQuestion():
x = random.randint(1,maxNum)
y = random.randint(1,maxNum)
op = random.choice(list(ops.keys()))
a = ops.get(op)(x,y)
print("What is {} {} {}?\n".format(x, op, y))
return a
def askQuestion(a):
timeLimit = otimeLimit
for i in range(0,timeLimit):
guess = input("")
print (timeLimit - i)
time.sleep(1)
if timeLimit == 0:
try:
integer_input = int(guess)
except ValueError:
print('Please enter a valid number')
return
global score
if integer_input == a:
print("Correct!")
score += 1
else:
print("Wrong, the answer is",a)
while qLimit != 0:
askQuestion(generateQuestion())
qLimit -= 1
print ("You have", qLimit, "questions remaining")
print("Your score is",score)
if (qLimit == 0):
break
将示例改编为:
input
是一种阻塞功能,这意味着您的代码将停止,直到收到至少一个换行符。你必须以某种方式获得一个非阻塞版本,否则你的尝试将不起作用。。。也许您可以看看,您可以使用信号中断阻塞同步功能,如带有超时处理程序的input
。这是在Python中实现这一点的最简单方法。请参阅文本模式控制台不是为此而设计的。图形用户界面框架是。例如,使用tkinter,可以很容易地显示一个问题,并启动计时器,在x秒内触发无应答功能。手柄应答功能可以取消无应答计时器。结果应该适用于所有平台,包括Windows。@cDake该函数实际上是信号.报警(秒)
(其中0秒取消任何现有报警)。
import signal
class OutOfTime(Exception):
"too slow"
def handler(signum, frame):
raise OutOfTime("no input received")
try:
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
ans = input('What is your favorite color? ')
signal.alarm(0)
except OutOfTime:
print('\nout of time! too slow!')
else:
print('%s, huh? Mine, too!' % ans)