0

这是 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)

为什么它翻译bobb而不是ob?如果你b单独输入,它会被翻译成o.

4

2 回答 2

4

因为str.replace()替换该字符的所有实例,即使是您已经替换的实例。从替换中生成新字符串,而不是修改现有字符串。

于 2014-02-24T06:38:58.780 回答
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 正确指出的相同问题。

于 2014-02-24T06:44:35.293 回答