Я хотел бы ввести опечатки в строке. У меня есть параметр typo_prob, который переворачивает символ в строке с вероятностью typo_prob.
Например, если typo_prob равно 0,1, каждый десятый символ будет заменен случайным символом.
Пока что делаю так:
message = "Where do you live?"
message = list(message)
n_chars_to_flip = round(len(message) * typo_prob)
pos_to_flip = []
for i in range(n_chars_to_flip):
pos_to_flip.append(random.randint(0, len(message) - 1))
for pos in pos_to_flip:
message[pos] = random.choice(string.ascii_lowercase)
message = ''.join(message)
Пожалуйста, дайте мне знать, есть ли более элегантный или эффективный способ сделать это.
Что вы имеете в виду под очевидным способом?






Я бы сказал следующее:
[x if random.random() >= 0.5 else random.choice(string.ascii_lowercase) for x in list(message)]
0,5 - вероятность замены символа.
Поскольку ожидается str, возможно, ''.join(x if ...)
random () возвращает значения [0,1), поэтому лучше использовать random() >= prob, чтобы поймать угловой случай, когда вероятность равна 0.
import random
import string
message = "Where do you live?"
message = list(message)
for pos, char in enumerate(message):
message[pos] = random.choice(string.ascii_lowercase) if random.random() < 0.1 else char
message = "".join(message)
Почему бы не сделать это очевидным способом?