首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码战争中的ROT13 Python 3

代码战争中的ROT13 Python 3
EN

Stack Overflow用户
提问于 2021-05-28 09:51:42
回答 1查看 622关注 0票数 0

这是我第一次问问题,因为我是个编程新手。

我在努力解决Codewar的问题,

"ROT13是一个简单的字母替换密码,它用字母13个字母代替字母,ROT13是凯撒密码的一个例子。“ 创建一个函数,该函数接受一个字符串并返回使用Rot13加密的字符串。如果字符串中包含数字或特殊字符,则应按原样返回它们。只有拉丁字母/英文字母表中的字母应该被移除,就像在最初的Rot13“实现”中一样。

我试着用我最好的能力来编码它,结果是这样的。

代码语言:javascript
复制
def rot13(message):
    v = []
    for i in message:
        if i.isupper()== True:
            d = ord(i) + 13
            e = chr(d)
            if d > 90:
                u = (d - 91)
                o = chr(u+65)
                v.append(o)
            else:
                v.append(e)
        elif i.islower() == True:
            x = (ord(i)+13)
            y = chr(x)
        
            if x > 122:
                z = (x - 123)
                p = chr(z+97)
                v.append(p)
            
            else:
                v.append(y)
        else:
            v.append(i)

    print(''.join(v))

它看起来起了作用,但它说它不正确。哪里出了问题?我知道这很难看,但是很好。提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2021-05-28 10:06:04

如果我没弄错的话,你指的是https://www.codewars.com/kata/530e15517bc88ac656000716。注意测试用例的作用:

代码语言:javascript
复制
test.assert_equals(rot13("test"),"grfg")
test.assert_equals(rot13("Test"),"Grfg")

他们不想让你打印结果,他们想让你把结果还回去。这与任务相匹配,也就是说

创建一个接受字符串的函数,返回使用Rot13加密的字符串

如果您只需将最后一行更改为

代码语言:javascript
复制
print(''.join(v))

代码语言:javascript
复制
return ''.join(v)

它通过了测试。

还有一些关于打印和返回之间的区别的其他问题,例如这一个

编辑:请注意,到目前为止,您的算法是正确的,但前提是您的输入只包括ascii字符。对于非ascii字符,您可能不想旋转它们,但是用python可以将它们识别为小写或大写。一个例子是德国的货币“a”、“u”和"ü“。对于这些情况,Matthias和Jon提供了一些想法(这也允许更优雅的实现)。此外,您还可以查看关于Codewar的其他意见,看看其他人是如何做到的。

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

https://stackoverflow.com/questions/67736663

复制
相关文章

相似问题

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