Нажмите enter, чтобы уклониться… (Событие быстрого времени) [Python 3]

#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. Спасибо, это на самом деле очень просто.