我想知道是否有任何方法可以使此代码行更短:对于x以字母表示

问题描述 投票:0回答:1

我想知道是否有任何方法可以缩短这段代码(在本文下方)。

我想先尝试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)
python for-loop brute-force
1个回答
0
投票

此行代码:

for x in range(letters):

不应该。因为TypeError需要一个,两个或三个整数,而不是字符串列表,所以将抛出range

这里是使用生成器的解决方案。生成器使用itertools.product生成包含字符串的元组。字符串数与number_of_digits关键字参数相对应。使用itertools.islice可以获取下一个n元组(在这种情况下,n为5)-由于26 ** 2 == 676(假设number_of_digits是2)。

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')
© www.soinside.com 2019 - 2024. All rights reserved.