首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rot13不旋转'b‘

rot13不旋转'b‘
EN

Stack Overflow用户
提问于 2014-02-24 06:35:19
回答 2查看 101关注 0票数 0

下面是python中的rot13函数:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-24 06:38:58

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

票数 4
EN

Stack Overflow用户

发布于 2014-02-24 06:44:35

您可能会更容易地替换如下字符:

代码语言:javascript
复制
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正确指出的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21980521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档