我正在尝试创建一个遍历字符串的函数,找到与字典中的键匹配的字符,并将该字符替换为该键的字典中的值。但是它目前只替换字典中第一次出现的字母并停在那里,我哪里出错?
===
答案 0 :(得分:1)
你的return语句在if语句中,所以如果一个字符匹配,你的函数将替换该单个字符,然后返回。
如果你想要替换所有的字符,让它通过在for循环之外移动你的return语句来遍历字符串的所有字符。
def cypher(string):
result = string
for i in string:
if i in d:
result = result.replace(i,d[i])
return result
答案 1 :(得分:0)
您在for循环中调用return
过早地结束了代码。您可以通过将新字符串存储在循环外部来修复它,只有在循环完成后才返回:
def cypher(string):
a = string # a new string to store the replaced string
for i in string:
if i in d:
a = a.replace(i, d[i])
return a
但逻辑也有问题。如果字典中的值也是字典中的键,则键可能会被替换两次。例如,如果您有d = {'I': 'i', 'i': 'a'}
,输入为Ii
,则输出为aa
。
这是一个使用join
的更简洁的实现,没有这个问题。
def cypher(string):
return ''.join(d.get(l, l) for l in string)
答案 2 :(得分:0)
正如zachyee指出的那样,你的return
语句在循环中。
您可能需要查看str.translate
,它完全符合您的要求:
def cypher(string):
return string.translate(str.maketrans(d))
请注意使用str.maketrans
可以在string.translate
可以使用的内容中转换您的字典。但是,此方法仅限于单个字符的映射。
答案 3 :(得分:0)
一个衬垫 - > print ''.join(d[c] if c in d else c for c in s)
示例输出:
>>> s = 'Hello World'
>>> d = {
'I':'1', 'R':'2', 'E':'3', 'A':'4', 'S':'5', 'G':'6', 'T':'7', 'B':'8', 'O':'0',
'l':'1', 'z':'2', 'e':'3', 'a':'4', 's':'5', 'b':'6', 't':'7', 'g':'9', 'o':'0',
}
>>> print ''.join(d[c] if c in d else c for c in s)
H3110 W0r1d