首页 > 解决方案 > python中旋转13密码错误

问题描述

我正在做一些有竞争力的编程,偶然发现了一个 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”

对于 input - Test ,输出是 Tkyz 而它应该是 Grfg

我还没有加入这个列表,因为我第一次尝试得到正确的答案。

标签: pythonpython-3.x

解决方案


这是更正后的代码:

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('a')或者ord('A')需要从最初的ord()调用中减去。你非常接近。除了这个尼特,一切都奏效了:-)


推荐阅读