0

だから私がやっていることは、string.digits+ string.ascii_letters+を使用する 94char キーを作成することですstring.punctuation

これをキーの生成に使用します(このサイトから取得しました:))

def key_pass(size=94, chars=string.digits + string.ascii_letters + string.punctuation):
    return ''.join(random.choice(chars) for x in range(size))

このようなものを作成します 9bMMqy-lB6Mt},bOxr@1ljey_\Z\gk`xRJBP;3YFR*i<N<!MB}_|0p3f5Q"l8'xEj)WHYGk7O]vQZ1cZ'(diMKS*gW%u$

私が本当にやりたいことは、変数内の 94 文字をランダムに整理することですchars。だから私は繰り返すものを持つことはできません変数をチェックするifステートメントを実装する正しい方法を得ることができないようです

何かアドバイス?

4

2 に答える 2

7

それらをリストに入れてから、randomシャッフルを使用してエラーを発生させ、それらをシャッフルしてから、結合して文字列を作成します。

import string
import random

all_chars = list(string.digits + string.ascii_letters + string.punctuation)
random.shuffle(all_chars)
print ''.join(all_chars[:94])
于 2013-09-09T19:47:03.340 に答える
5

私は使用しますrandom.sample

>>> import string, random
>>> chars=string.digits + string.ascii_letters + string.punctuation
>>> ''.join(random.sample(chars, 4))
'e_/p'
>>> ''.join(random.sample(chars, 10))
'a4NSq`%tQ#'

setオリジナルが一意であると仮定すると、つまり;の呼び出しによって保証される可能性があります。ポイントは、 の同じ要素がchars2 回描画されないことです。 random.sample("aa", 2)を与え["a", "a"]ます。持っているよりも多くの要素を要求すると、素晴らしいエラーが発生します。

>>> ''.join(random.sample(chars, 100))
Traceback (most recent call last):
  File "<ipython-input-9-80959adcfe83>", line 1, in <module>
    ''.join(random.sample(chars, 100))
  File "/usr/lib/python2.7/random.py", line 320, in sample
    raise ValueError("sample larger than population")
ValueError: sample larger than population
于 2013-09-09T19:53:32.310 に答える