Python 使用 ASCII 码的编码问题

Python Encoding Problems using ASCII Code

写一个函数

shiftLetter(letter, n)

其参数,letter应该是单个字符。如果字符在"A""Z"之间,函数returns一个大写字符 n 更远的位置,如果 + n 映射超过 "Z"。同样,它应该映射 "a""z" 之间的小写字符。如果参数 letter 是其他任何东西,或者长度不是 1,函数应该 return letter.

提示:复习本节中的函数 ord()chr(),以及取模运算符 %.


下面是我到目前为止所做的工作。它应该在字母结束后 return 到 A,但是从字母 x 开始它不能正常工作。我猜..?我应该用 ASCII table 为 x、y、z 减去 90(Z) - 65(A) 但对此感到困惑。

def shiftLetter(letter,n):
    if letter >= 'A' and letter <= 'Z':
        return chr(ord(letter) + n )
   elif letter >= 'a' and letter <= 'z':
        return chr(ord(letter) + n )

print(shiftLetter('w',3))

您可以使用 mod 运算符来换行字母表:

def shiftLetter(letter,n):
   if letter >= 'A' and letter <= 'Z':
        return chr((ord(letter) - ord('A') + n) % 26 + ord('A') )
   elif letter >= 'a' and letter <= 'z':
        return chr((ord(letter) - ord('a') + n) % 26 + ord('a') )

print(shiftLetter('w',3))   # z
print(shiftLetter('E',3))   # H
print(shiftLetter('Y',3))   # B
print(shiftLetter('f',26))  # f
print(shiftLetter('q',300)) # e

输出

z
H
B
f
e