2015-03-24 3 views
2

Я пытаюсь сделать таймер ввода по вопросу, который дает пользователю 5 секунд, чтобы ответить на вопрос, прежде чем решить, что вход не совпадает с неправильным ответом, но ни одно тело не хочет прикасаться он с 10-футовым полюсом, поэтому я пытаюсь пойти по-другому и сломать петлю с вводом? У кого-нибудь есть предложения?Разрыв петли с вводом

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 
+4

'input' является функцией блокировки, которая означает, что ваш код будет останавливаться до тех пор, пока не получит по крайней мере, на новую строку. Вы должны каким-то образом получить неблокирующую версию, иначе ваша попытка не сработает ... возможно, вы можете взглянуть на [это] (https://repolinux.wordpress.com/2012/10/09/non-blockingreadread -from-stdin-in-python /) – swenzel

+0

Вы можете использовать сигналы для прерывания синхронной функции блокировки типа 'input' с обработчиком тайм-аута. Это самый простой способ сделать это в Python. См. Https://docs.python.org/3/library/signal.html – Shashank

+0

Консоли текстового режима не предназначены для этого. Рамки Gui. Например, с помощью tkinter было бы легко отобразить вопрос и запустить таймер для запуска функции без ответа за x секунд. Функция ответа-ответа может отменить таймер без ответа. Результат должен работать на всех платформах, включая Windows. –

ответ

0

Адаптирование пример из the Python docs:

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) 
Смежные вопросы