-1

可能なすべての 8 つのシンボル文字列を生成するジェネレーターを作成する必要があります。このようなシンボルの配列から:

leters = ['1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m']

スケルトンは次のようになります。

def generator():
    """
    here algorithm
    """
    yield string

このようなリストを返すとします['00000001','00000002','00000003', ......'mmmmmmmm']

4

4 に答える 4

7
itertools.product(leters, repeat=8)

編集:タプルではなく文字列を与えるには:

def generator(leters):
    a = itertools.product(leters,repeat=3)
    while a:
        yield "".join(a.next())
于 2011-06-08T18:27:14.577 に答える
7

itertools.combinations()ジェネレーターをitertools.combinations_with_replacement()返します

>>> letters = ['a', 'b', 'c']
>>> from itertools import combinations

print()出力を説明するために例で使用しています。に置き換えるとyield、ジェネレーターが得られます。

>>> for c in combinations(letters, 2): 
        print(c)
... 
('a', 'b')
('a', 'c')
('b', 'c')

>>> for c in combinations(letters, 2): 
        print(''.join(c))
... 
ab
ac
bc
>>> 

>>> for c in itertools.combinations_with_replacement(letters, 2): 
        print(''.join(c))
... 
aa
ab
ac
bb
bc
cc

英字と数字を含む 8 文字のパスワードすべてに対してブルート フォースを適用すると、約 2.8 兆の文字列を反復処理することになります。

編集 繰り返し要素がないことがどういうわけかわかっている場合は、使用しますpermutations

>>> for c in itertools.permutations(letters, 2): 
        print(''.join(c))
... 
ab
ac
ba
bc
ca
cb

これにより、abbaの両方が得られます

最も一般的なブルート フォース シーケンスの場合itertools.product()は、Cosmologicon のソリューションのように使用します

于 2011-06-08T18:29:37.180 に答える
2
import itertools
itertools.combinations_with_replacement(leters, 8)

ちなみに文字にはTが2つ付いています。

于 2011-06-08T18:28:04.867 に答える
0

私もこれを行う方法を考えていましたが、これが私が思いついたものです。いくつかの方法を試してみましたが、このように書いたところ、他の方法よりもはるかに速くなりました...表示されていない場合は、lmkしてください

import string

from itertools import permutations

[print(*p,sep='')for p in permutations(list(string.ascii_letters+string.punctuation+string.digits),8)]
于 2019-01-04T05:44:22.663 に答える