#python #python-3.x #input #time
#python #python-3.x #ввод #время
Вопрос:
Я искал этот ответ по всему stackoverflow, но, похоже, не могу найти никаких обновленных ответов.
Я хочу, чтобы было приглашение с надписью Press enter to dodge
(это может быть любая кнопка, например пробел, если это проще, я предполагаю if keyboard.is_pressed
)
Одновременно должен быть таймер, который отсчитывает время от целочисленной переменной timer
, и когда он достигает нуля, он сообщает пользователю, что они были сбиты и установлены dodge = False
, в противном случае, если они нажмут клавишу, он сообщит им, что они уклонились и установили dodge = True
Я пробовал это, но это работает плохо, потому что он всегда обнаруживает, что нажата клавиша enter, независимо от того, вовремя они уклоняются или нет :
from threading import Timer
dodge = False
timeout = 3
t = Timer(timeout, print, ['You were hit!'])
t.start()
prompt = f"You have {timeout} seconds to dodge, press enter...n"
answer = input(prompt)
t.cancel()
if answer == " ":
print("You didn't dodge!")
dodge = False
else:
print("You dodged")
dodge = True
print(dodge)
Есть ли какой-либо другой метод, который проще сделать это?
Пожалуйста, дайте мне знать, если я что-то упустил… Я все еще относительно новичок и хочу учиться. Спасибо 🙂
Ответ №1:
Чтобы упростить задачу, вы можете отслеживать время, когда вы запрашиваете пользователя, и время после ввода им ответа. Вычитание этих двух — это их время реакции, которое вы можете сравнить с таймаутом.
from threading import Timer
import time
timeout = 3
t = Timer(timeout, print, ["You were hit!"])
t.start()
start_time = time.time()
prompt = f"You have {timeout} seconds to dodge, press enter...n"
answer = input(prompt)
t.cancel()
end_time = time.time()
reaction_time = end_time - start_time
if reaction_time > timeout:
print("You didn't dodge!")
dodge = False
else:
print("You dodged")
dodge = True
print(dodge)
Комментарии:
1. Спасибо, это на самом деле очень просто.