我一直在阅读 Allen B. Downey 的“Think Python”,其中有一个练习(8.12),作者要求创建一个 ROT13 函数。我做了我的,它部分工作,因为我在与大写字母作斗争。
以下是作者提供的部分解决方案:
def rotate_letter(letter, n):
"""Rotates a letter by n places. Does not change other chars.
letter: single-letter string
n: int
Returns: single-letter string
"""
if letter.isupper():
start = ord('A')
elif letter.islower():
start = ord('a')
else:
return letter
c = ord(letter) - start
i = (c + n) % 26 + start
return chr(i)
此处使用模数使该函数适用于大写,但我不知道为什么!很明显,通过使用它,我们在大写的 ASCII 值的开头重新开始,但我无法弄清楚它背后的机制。