python中的旋转13密码错误

2024-05-20 03:49:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一些竞争性编程时,偶然发现了一个ROT13问题,要求我将每个字母表增加13

这是我的尝试

def rot13(message):
    l2 = []
    l1 = list(message)
    for i in l1:
        i = str(i)
    for i in l1:
        if ord('a') <= ord(i) <= ord('z'):
            i = chr((ord(i) + 13) % 26 + ord('a'))
            l2.append(i)
        elif ord('A') <= ord(i) <= ord('Z'):
            i = chr((ord(i) + 13) % 26 + ord('A'))
            l2.append(i)
    return l2

它返回了错误的输出,例如

对于输入测试,它给出了输出-zkyz,而正确的是“grfg”

对于输入测试,输出是Tkyz,而它应该是Grfg

我还没有加入名单,因为我第一次试图得到正确的答案


Tags: inl1messagefordef编程竞争性字母表
1条回答
网友
1楼 · 发布于 2024-05-20 03:49:09

以下是更正后的代码:

def rot13(message):
    l2 = []
    l1 = list(message)
    for i in l1:
        if ord('a') <= ord(i) <= ord('z'):
            i = chr((ord(i) - ord('a') + 13) % 26 + ord('a'))  # <== changed
            l2.append(i)
        elif ord('A') <= ord(i) <= ord('Z'):
            i = chr((ord(i) - ord('A') + 13) % 26 + ord('A'))  # <== changed
            l2.append(i)
    return l2

和试运行:

>>> rot13('Test')
['G', 'r', 'f', 'g']

问题是需要从最初的ord()调用中减去ord('a')ord('A')。你很接近。除了这个nit,一切都起作用了:-)

相关问题 更多 >