Это может быть реализовано многими способами, но вот мое решение:
Написал функцию, которая просто меняет место буквы:
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'
Конечно, функции могут быть объединены или вложены, но я думаю, это понятно.
Редактировать :
Он не учитывает расстояние, но функция скремблирования легко заменяется только для замены соседних букв.Вот один из них:
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:]