这是python中的rot13函数:
from string import ascii_lowercase
def rot13(string):
l = list(ascii_lowercase)
nl = [l[:13],l[13:]]
tr_dict1 = dict(zip(nl[0], nl[1]))
tr_dict2 = dict(zip(nl[1], nl[0]))
#print tr_dict1
#print tr_dict2
for char in string:
if char in tr_dict1:
string = string.replace(char, tr_dict1[char])
if char in tr_dict2:
string = string.replace(char, tr_dict2[char])
print string
string = raw_input('Enter string: ')
rot13(string)
为什么将bo
翻译为bb
而不是ob
?如果您单独输入b
,则会转换为o
。
答案 0 :(得分:4)
因为str.replace()
取代了该字符的 所有 实例,即使是已经替换过的实例也是如此。从替换中生成新字符串,而不是修改现有字符串。
答案 1 :(得分:2)
您可以更轻松地更换这样的字符:
from string import ascii_lowercase
l = list(ascii_lowercase)
tr = dict(zip(l, l[13:] + l[:13]))
def rot13(inval):
return "".join(tr.get(char, char) for char in inval)
string = raw_input('Enter string: ')
print rot13(string)
由于它不使用替换,因此它不会遇到@Ignacio正确指出的相同问题。