繁体   English   中英

来自代码战的 ROT13 Python 3

[英]ROT13 Python 3 from codewars

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

我正在尝试解决 Codewars 中的问题,

“ROT13 是一种简单的字母替换密码,它用字母表中的 13 个字母替换一个字母。ROT13 是凯撒密码的一个例子。

创建一个 function,它接受一个字符串并返回使用 Rot13 加密的字符串。 如果字符串中包含数字或特殊字符,则应按原样返回。 只有拉丁/英语字母表中的字母应该被移动,就像在原始的 Rot13 “实现”中一样。”

我试图尽我最大的能力对其进行编码,结果是这样的。

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

它有效(似乎),但它说它不正确。 哪里错了? 我知道这很丑,但还好。 先感谢您。

如果我没记错的话,您指的是https://www.codewars.com/kata/530e15517bc88ac656000716 注意测试用例做了什么:

test.assert_equals(rot13("test"),"grfg")
test.assert_equals(rot13("Test"),"Grfg")

他们不希望您打印结果,而是希望您返回结果。 这与任务相匹配,它说

创建一个 function 接受一个字符串并返回用 Rot13 加密的字符串

如果您只是将最后一行从

print(''.join(v))

return ''.join(v)

它通过了测试。

还有一些问题go详细介绍一下打印和退货的区别,比如这个

编辑:请注意,您的算法到目前为止是正确的,但仅当您假设您的输入仅包含ascii 字符时。 对于非 ascii 字符,您可能不想旋转它们,但 python 可以将它们识别为小写或大写。 一个例子是德语变音符号“ä”、“ö”和“ü”。 对于这些情况,Matthias 和 Jon 提供了一些想法(也允许更优雅的实现)。 此外,您可以查看 Codewars 上的其他提交,看看其他人是如何做到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM