1. 凯撒密码加密与解密

凯撒密码加密与解密 学习卡片

任务目标

实现凯撒密码的加密与解密函数,支持任意整数移位(正数加密、负数解密),并正确处理英文字母的大小写。非字母字符(空格、数字、标点)保持不变。

核心实现

def caesar_encrypt(text: str, shift: int) -> str:
    """凯撒加密:将字母按shift位循环移位,非字母不变"""
    result = []
    for ch in text:
        if 'a' <= ch <= 'z':
            result.append(chr((ord(ch) - ord('a') + shift) % 26 + ord('a')))
        elif 'A' <= ch <= 'Z':
            result.append(chr((ord(ch) - ord('A') + shift) % 26 + ord('A')))
        else:
            result.append(ch)
    return ''.join(result)

def caesar_decrypt(ciphertext: str, shift: int) -> str:
    """凯撒解密:移位取反即可复用加密逻辑"""
    return caesar_encrypt(ciphertext, -shift)

if __name__ == '__main__':
    # 最小验证闭环
    plain = "Hello, World! 123"
    s = 3
    encrypted = caesar_encrypt(plain, s)
    decrypted = caesar_decrypt(encrypted, s)
    print(f"原文: {plain}")
    print(f"加密: {encrypted}")
    print(f"解密: {decrypted}")
    assert decrypted == plain, "加解密往返不一致"
    assert encrypted == "Khoor, Zruog! 123", "加密结果与预期不符"
    print("验证通过")

运行与验证

  1. 将代码保存为 caesar.py,使用 Python 3.6+ 运行:python caesar.py
  2. 预期输出(确定性结果):
原文: Hello, World! 123
加密: Khoor, Zruog! 123
解密: Hello, World! 123
验证通过

判定标准:程序无异常退出,断言通过,控制台显示“验证通过”。

关键说明

  • 移位取模 % 26 保证任意整数移位(包括负数)都能正确循环回字母表范围。
  • 解密直接复用加密函数,将移位取反即可,无需单独实现逆逻辑。
  • 大小写分别处理,互不干扰;非字母字符原样保留。
加密前: H (ASCII 72) +3 加密后: K (ASCII 75) a-z A-Z % 26 循环