0

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

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

1 回答 1

0

ROT13 规范,只有字母应该受到算法的影响,因为空格不是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
于 2020-03-23T13:30:30.507 回答