さまざまな方法で実装できますが、これが私の解決策です。
文字の位置を変更するだけの関数を書きました:
def scramble(s):
s = list(s) #i think more easier, but it is absolutely performance loss
p = s.pop(random.randint(0, len(s)-1))
s.insert(random.randint(0, len(s)-1), p)
return "".join(s)
そして、文字列に何度も適用される関数を書きました:
def scramble_factor(s, n):
for i in range(n):
s = scramble(s)
return s
これで使用できます。
>>> s = "paragraph"
>>> scramble_factor(s, 0)
'paragraph'
>>> scramble_factor(s, 1)
'pgararaph'
>>> scramble_factor(s, 2)
'prahagrap'
>>> scramble_factor(s, 5)
'pgpaarrah'
>>> scramble_factor(s, 10)
'arpahprag'
もちろん、関数を組み合わせたり入れ子にしたりすることはできますが、それは明らかだと思います。
編集:
距離は考慮されていませんが、スクランブル機能は隣接する文字を交換するだけで簡単に置き換えられます. ここに1つがあります:
def scramble(s):
if len(s)<=1:
return s
index = random.randint(0, len(s)-2)
return s[:index] + s[index + 1] + s[index] + s[index+2:]