Python 用输入中断循环

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

我试着在一个问题上做一个输入计时器,给用户5秒钟的时间来回答这个问题,然后再决定没有输入和错误的答案是一样的,但是没有人想用10英尺长的杆子去碰它,所以我试着用另一种方式去做,用输入来打破一个for循环? 有人有什么建议吗

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)