私は Allen B. Downey の「Think Python」を読んでいて、その中に著者が ROT13 関数の作成を求める演習 (8.12) があります。私は自分のことをしましたが、大文字に苦労していたので部分的に機能しました。
著者が提供するソリューションの一部を次に示します。
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 値の先頭から再起動することは明らかですが、その背後にあるメカニズムはわかりません。