保存迭代工具产品循环值,然后从上一个结果恢复



我正在使用此代码来破解一个简单的密码mycubana,但我想"暂停"迭代工具循环,以便一段时间后,我可以从上次保存的itertools.product值开始恢复循环。有没有办法在不更改大量代码的情况下做到这一点?

法典:

import string
from itertools import chain, product
def bruteforce(charset, minlenght, maxlenght):
return(''.join(candidate) 
for candidate in chain.from_iterable(product(charset, repeat = i)
for i in range(minlenght, maxlenght)))
contador = 0
for attempt in bruteforce(string.ascii_lowercase, 8, 9):
codigo = 'mycubana'
contador+=1
if attempt==codigo:
print(attempt)
contador=0

是的,这实际上非常简单。使用您的环境和bruteforce的定义,以下代码将在生成的序列上执行两次运行,每次 10 个候选项:

bf26_8 = bruteforce(string.ascii_lowercase, 8, 9)
count = 0
for c in bf26_8:
count += 1
print(c)
if count == 10:
break
print("======== PAUSED ========")
for c in bf26_8:
count += 1
print(c)
if count == 20:
break

"诀窍"是将bruteforce的结果存储在变量中。这个结果是一个生成器,所以如果你迭代它,但不要用尽它(即中断迭代循环(,一旦你再次开始迭代,它就会给你延续值。

相关内容

最新更新