我一直在使用字典编写随机字符串集。我已经得到了我的代码来替换我想要的字母,但在某些情况下,它会多次替换一个字符,当我真的只想要它替换字符串中的字母一次。这就是我所拥有的:
def encode(msg,code):
for i in msg:
for i in code:
msg = msg.replace(i, code[i])
return msg
出于测试目的,我使用了函数调用: 初始:
encode("blagh", {"a":"e","h":"r"})
和更复杂的字符串:
encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'})
对于上面的第二个,我正在寻找输出: ' ouncei uapoun ae tiomei'
但我发现自己:
" ounceio uapoun aeio tiomeio"
如何将循环限制为仅替换每个字符一次?
答案 0 :(得分:1)
而不是使用str.replace
,而是逐字符替换:
def encode(msg, code):
result = ''
for ch in msg:
result += code.get(ch, ch)
return result
def encode(msg, code):
return ''.join(code.get(ch, ch) for ch in msg)
答案 1 :(得分:1)
Python 3的str.translate
函数可以满足您的需求。请注意,翻译词典必须使用Unicode序列作为键,因此该函数使用字典理解将其转换为正确的格式:
def encode(msg,code):
code = {ord(k):v for k,v in code.items()}
return msg.translate(code)
print(encode("blagh", {"a":"e","h":"r"}))
print(encode("once upon a time",{'a':'ae','e':'ei','i':'io','o':'ou','u':'ua'}))
输出:
blegr
ouncei uapoun ae tiomei
如果您使用Unicode字符串或在文件顶部添加以下内容以使字符串默认为Unicode,那么它也适用于Python 2:
from __future__ import unicode_literals