为什么 ROT 13 在空格中显示 g?

Why is ROT 13 displaying g in spaces?

我正在编写基于 ROT13 算法的代码,但是当我收到消息 "ROT ALGORITHM" 时,它显示为 "EBGgNYTBEVGUZ"。我不确定 'g' 是否错误,因为它是 ROT 和 ALGORITHM 之间的 space?

def rot13(message,shift):
    result = "" 

    for i in range(len(message)):
        char = message[i]
        if (char.isupper()):
               result += chr((ord(char) + shift-13) % 26 + 65)
        else:
               result += chr((ord(char) + shift-13) % 26 + 97)
     return result

shift = 13
message = "ROT ALGORITHM"

print("Shift:", shift)    
print(message)
print(rot13(message,shift))

ROT13 spec 开始,只有字母会受到算法的影响,这里因为 space 不是 upper() 你去 else 部分

您可以处理 2 分钟的用例:小写和大写,只需使用字母表进行旋转

from string import ascii_lowercase, ascii_uppercase

def rot13(message, shift):
    result = ""
    for char in message:
        if char in ascii_uppercase:
            result += ascii_uppercase[(ascii_uppercase.index(char) + shift) % 26]
        elif char in ascii_lowercase:
            result += ascii_lowercase[(ascii_lowercase.index(char) + shift) % 26]
        else:
            result += char
    return result