Python кратно l oop методом проб и ошибок - PullRequest
0 голосов
/ 02 августа 2020

Я думаю создать al oop, который позволяет мне выводить разные значения. Под этим я подразумеваю что-то вроде этого:

list = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 
117, 118, 119, 120, 121, 122]

for i in range(0,len(list)):
    n = list[i]
    con_1 = chr(n)

    for i in range(0,len(list)):
        n = list[i]
        con_2 = chr(n)

        for i in range(0,len(list)):
            n = list[i]
            con_3 = chr(n)

            for i in range(0,len(list)):
                n = list[i]
                con_4 = chr(n)

                for i in range(0,len(list)):
                    n = list[i]
                    con_5 = chr(n)

                    for i in range(0,len(list)):
                        n = list[i]
                        con_6 = chr(n)

                        for i in range(0,len(list)):
                            n = list[i]
                            con_7 = chr(n)

                            for i in range(0,len(list)):
                                n = list[i]
                                con_8 = chr(n)

                                con = con_1 + con_2 +con_3 + con_4 + con_5 + con_6 + con_7 + con_8
                                
                                f = open("wifi_8sf.txt","a+")
                                f.write(con+"\n")
                                f.close()
                                print(con)

Это код, который я сделал для декодера Wi-Fi 8 di git (я знаю, что это наименее эффективный способ взломать код, но просто делаю это для на практике).

Однако это всего лишь 8 ди git, и это занимает столько времени, представьте себе 50 ди git или что-то выше.

Итак, я думаю о способе достижения этого например, используя globals(), мне нужно 50 цифр вывода, поэтому я буду использовать globals(), чтобы определить 50 различных переменных, и каждая из них будет l oop как индивидуальная и сложится как строка в конец.

Согласно этой идее, у кого-нибудь есть способ решить эту проблему?

1 Ответ

0 голосов
/ 02 августа 2020

Как упоминалось в комментариях, вы можете использовать модуль itertools для достижения результата вышеуказанных восьми жестко закодированных циклов. Это позволит вам иметь переменное количество буквенно-цифровых символов в построенной строке и сделать ваш код более читаемым.

См. Ниже:

import itertools

my_list = range(48,58) + range(65,123)

number_of_digits = 8

cartesian_product = itertools.product(my_list, repeat=number_of_digits)

for prod in cartesian_product:

    con = ""
    for digit in prod:
        con += chr(digit)

    print(con)
    # and do other things you want with con

Также помимо вышеуказанного решения еще две вещи :

  1. Этот фрагмент из вашего кода:
for in range(0, len(list)):
    n = list[i]
    con_1 = chr(n)

можно было бы заменить на более читаемый и pythoni c:

for i in list:
    con_1 = chr(i)
Вы открываете и закрываете файл для записи в него на каждой итерации, что неэффективно. Чтобы ускорить процесс, вы можете хотя бы один раз открыть его перед итерацией l oop и закрыть после sh.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...