На самом деле вы можете обнаружить, что ваш невероятно быстрый компьютер завершил выполнение этого всего фрагмента кода, в то время как ваш человечески медленный палец все еще находится на клавише enter
: -)
Если это В этом случае вам просто нужно дождаться освобождения ключа перед следующей проверкой, например, с:
import time
:
while keyboard.is_pressed("enter"):
time.sleep(0.01)
Также очень неэффективно открывать и читать эти текстовые файлы каждый раз время через l oop (если только они не могут сильно меняться на диске, что было бы необычно). Вам было бы лучше прочитать файл один раз до начала l oop и просто использовать случайность для выбора элемента.
Также имейте в виду, что, если текущее время работы для программа или текущее время дня влияет на random.choice()
(и я не верю, что это так), то, что вы делаете, не имеет значения - вы получите те же значения независимо от того, ждете вы или нет enter
клавиша, которую нужно нажать.
Предполагая, что вы хотите использовать пользователя в качестве источника энтропии, вы можете использовать такую функцию, как:
import keyboard, time, random
def userRand(seq, prompt = None):
# Wait until ENTER key up then prompt if desired.
while keyboard.is_pressed("enter"):
time.sleep(0.01)
if prompt is not None:
print(prompt, end = "")
# Get random choice from sequence, until ENTER key down.
retVal = random.choice(seq)
while not keyboard.is_pressed("enter"):
time.sleep(0.01)
retVal = random.choice(seq)
Затем вызовите что с гораздо более кратким:
with open("masteries.txt", "r") as f:
masteries = f.read().splitlines()
random_mastery1 = userRand(masteries, "Press ENTER for first mastery: ")
with open(f"{random_mastery1.lower()}_skills.txt", "r") as f:
skills = f.read().splitlines()
random_skill = userRand(skills, "Press ENTER for primary skill: ")
random_mastery2 = userRand(masteries, "Press ENTER for second mastery: ")
Такой вид рефакторинга (перенос обычных вещей в функции) имеет несколько преимуществ, среди которых:
- сокращение дублирования кода, так что он легче исправить или улучшить вещи; и
- делая ваш основной код более читаемым, удаляя ненужные детали.