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
'input' является функцией блокировки, которая означает, что ваш код будет останавливаться до тех пор, пока не получит по крайней мере, на новую строку. Вы должны каким-то образом получить неблокирующую версию, иначе ваша попытка не сработает ... возможно, вы можете взглянуть на [это] (https://repolinux.wordpress.com/2012/10/09/non-blockingreadread -from-stdin-in-python /) – swenzel
Вы можете использовать сигналы для прерывания синхронной функции блокировки типа 'input' с обработчиком тайм-аута. Это самый простой способ сделать это в Python. См. Https://docs.python.org/3/library/signal.html – Shashank
Консоли текстового режима не предназначены для этого. Рамки Gui. Например, с помощью tkinter было бы легко отобразить вопрос и запустить таймер для запуска функции без ответа за x секунд. Функция ответа-ответа может отменить таймер без ответа. Результат должен работать на всех платформах, включая Windows. –