我使用 unicode 的凯撒密码有问题

Problem with my caesar cipher using unicode

这是我 class 的 python 任务,我正在尝试使用 unicode 制作凯撒密码。如果它通过 z,我已经将小写字母环回到 a。但我似乎无法让大写字母工作。

这是我的函数代码:

def rot(text, key):

    cypher_text = ''
   
    for char in text:
       
        if char.isalpha():
           
            num = ord(char)
            
            if (num + key) > 122 and 90:
                
                x = (num + key) - 122 or 90
                
                cypher_text += chr(x + ord('a') - 1)
            
            elif num + key <= 122 and 90:
               
                cypher_text += chr(num + key)
      
        else:
            cypher_text += char
    
    return cypher_text

例如,如果我输入 Hello!并输入 19 作为旋转键

它打印这个 [xeeh!

这里有什么我遗漏的吗?

你可以这样试试-

def rot(text, key):
    cypher_text = ''
    for char in text:
        if char.isalpha():
            num = ord(char)
            if char.isupper():
                num = (num - ord('A') + key) % 26 + ord('A')
            else:
                num = (num - ord('a') + key) % 26 + ord('a')
            cypher_text += chr(num)
        else:
            cypher_text += char

    return cypher_text

为了计算,您可以从第一个字母(即'A'或'a')开始获得位移。然后将其添加到键中并使用 % 26 环绕。就像假设 char 是 'H' 并且 key 是 19,所以在添加位移和键后它将大于 26 . % 26 将环绕到适当的位移,如果 key 本身大于 26,它也会有所帮助。再次添加 Aa 将获得正确的加密字符