下面是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。
发布于 2014-02-24 06:38:58
因为str.replace()取代了所有该字符的实例,即使是您已经替换过的实例。从替换中生成一个新字符串,而不是修改现有字符串。
发布于 2014-02-24 06:44:35
您可能会更容易地替换如下字符:
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正确指出的问题。
https://stackoverflow.com/questions/21980521
复制相似问题