Я задавался вопросом, есть ли способ сделать эту строку кода короче: для буквы х - PullRequest
0 голосов
/ 05 ноября 2019

Мне было интересно, есть ли способ сократить эту строку кода (она находится под этим текстом).

Я хочу попробовать для a, затем b, затем c, d, e, f, g ипосле этого aa, ab, ac и т. д. и т. д.

У меня есть Python 3.7.

Я хочу использовать его в какой-то грубой силе.

from pynput.keyboard import Key, Controller
import time

letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
keyboard = Controller()
time.sleep(2)
for i in range(20):
    for x in range(letters):
            keyboard.type(x)
            keyboard.type(y)
            keyboard.press(Key.enter)
            time.sleep(1)

1 Ответ

0 голосов
/ 05 ноября 2019

Эта строка кода:

for x in range(letters):

Не должно работать. Это выдаст TypeError, поскольку range ожидает одно, два или три целых числа, а не список строк.

Вот решение с использованием генератора, который вы можете изменить в соответствии со своими потребностями. Генератор использует itertools.product для получения кортежей, содержащих строки. Количество строк соответствует ключевому слову number_of_digits. Используя itertools.islice, вы можете получить следующие n-кортежей (где n в данном случае равно 5) - может быть удобно захватить только определенное количество кортежей, поскольку 26 ** 2 == 676 (при условии number_of_digits2).

def main():

    from itertools import islice

    def get_product(*, number_of_digits=2):
        from itertools import product
        from string import ascii_lowercase

        for tpl in product(*[ascii_lowercase] * number_of_digits):
            yield tpl

    product_generator = get_product()

    for tpl in islice(product_generator, 5):
        print(tpl)


    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

Вывод:

('a', 'a')
('a', 'b')
('a', 'c')
('a', 'd')
('a', 'e')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...