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("验证通过")
运行与验证
- 将代码保存为
caesar.py,使用 Python 3.6+ 运行:python caesar.py - 预期输出(确定性结果):
原文: Hello, World! 123
加密: Khoor, Zruog! 123
解密: Hello, World! 123
验证通过
判定标准:程序无异常退出,断言通过,控制台显示“验证通过”。
关键说明
- 移位取模
% 26保证任意整数移位(包括负数)都能正确循环回字母表范围。 - 解密直接复用加密函数,将移位取反即可,无需单独实现逆逻辑。
- 大小写分别处理,互不干扰;非字母字符原样保留。