Проблемы с бесконечным while

import random
import keyboard
while True:
   while True:
       if keyboard.is_pressed("`"):
           print(keyboard.is_pressed('`'))
           t_list = ["1", "2", "3", "4"]
           random_index = random.randint(0, len(t_list))
           print(t_list[random_index])
           if random_index == 1:
               keyboard.send('f1')
           if random_index == 2:
               keyboard.send('f2')
           if random_index == 3:
               keyboard.send('f3')
           if random_index == 4:
               keyboard.send('f4')
           break

Хочу чтобы при запуске файла он не вырубался пока я его сам не остановлю, и во время того как я нажму 'ё' он 1 раз нажмёт выбранную рандомом кнопку! Но оно останавливается и не знаю почему! Помогите пожалуйста!


Ответы (2 шт):

Автор решения: ganz

В следующий раз выкладывай вывод исключения

True
3
4
True
2
3
True
2
3
True
0
1
True
4
Traceback (most recent call last):
  File "C:\Users\maxim\Desktop\ai\test.py", line 10, in <module>
    print(t_list[random_index])
IndexError: list index out of range

Данное исключение означает, что интерпретатор пытается получить доступ к элементу list[4] хотя размер списка равен четырём то есть [0, 1, 2, 3, 4] в списке существует элемент с индексом четыре только если его размер равен пяти. Внеси следующие изменения

random_index = random.randint(0, len(t_list)-1)
→ Ссылка
Автор решения: Алексей Белкин

Использование бесконечного цикла в бесконечном цикле - не очень хорошея затея, т.к. есть вероятность зависания ПК.

Если еще актуально, то вот решение с Вашей логикой (с обходом индексов) + без двойного while:

import random
import keyboard

t_list = ['f'+str(i) for i in range(1, 5)]  #  Через генератор делаем клавиши ['f1', 'f2', 'f3', 'f4']

keyboard.wait('`')  # ожидаем нажатия апострофа - ` (на букве ё)
key = t_list[random.randint(0, len(t_list)-1)]  # по случайному индексу вытаскиваем клавишу
print('Send key: ', key)
keyboard.send(key)  
→ Ссылка