我需要使用Python更改字符串中的3个随机字符,例如字符串:
Adriano Celentano
Luca Valentina
我需要替换3个字符,而不是替换相同的字符或数字,而不是替换空格。我怎么能用Python做到这一点?
需要这样的输出:
adraano cettntano
lacr vilenntina
我不知道从哪里可以开始做到这一点。
到目前为止我的代码:
for i in xrange(4):
for n in nume :
print n.replace('$', random.choice(string.letters)).replace('#', random.choice(string.letters))
答案 0 :(得分:2)
如果您只想更改非空格的字符而不是索引相同的字符,则可以先拉出非空格字符所在的索引:
import random
inds = [i for i,_ in enumerate(s) if not s.isspace()]
print(random.sample(inds,3))
然后使用这些索引替换。
s = "Adriano Celentano"
import random
inds = [i for i,_ in enumerate(s) if not s.isspace()]
sam = random.sample(inds, 3)
from string import ascii_letters
lst = list(s)
for ind in sam:
lst[ind] = random.choice(ascii_letters)
print("".join(lst))
如果您希望每次更换一个唯一的字符:
s = "Adriano Celentano"
import random
from string import ascii_letters
inds = [i for i,_ in enumerate(s) if not s.isspace()]
sam = random.sample(inds, 3)
letts = iter(random.sample(ascii_letters, 3))
lst = list(s)
for ind in sam:
lst[ind] = next(letts)
print("".join(lst))
输出:
Adoiano lelenhano
答案 1 :(得分:0)
您可以分两个阶段完成此操作。在第一阶段,您在字符串中选择符合搜索条件的3个随机位置(isalnum
):
import random
import string
replacement_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
# replacement_chars = string.letters + string.digits
input = 'Adriano Celentano'
input_list = list(input)
input_dic = dict(enumerate(input_list))
valid_positions=[key for key in input_dic if input_dic[key].isalnum()]
random_positions=random.sample(valid_positions,3)
在第二部分中,您将生成3个随机字符并替换先前所选位置中的字符。我添加了一个while循环来生成一个新的随机字符,如果它与现有值匹配
random_chars = random.sample(replacement_chars,len(random_positions))
char_counter = 0
for position in random_positions:
#check if the replacement character matches the existing one
#and generate another one if needed
while input_list[position]==random_chars[char_counter]:
random_chars[char_counter] = random.choice(replacement_chars)
input_list[position]=random_chars[char_counter]
char_counter = char_counter + 1
print "".join(input_list).lower()