Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
chr():把數字變成對應的字元
chr() 接收一個整數(Unicode 碼位),回傳對應的字元。
語法:chr(i) # i 是 0 ~ 1114111 之間的整數基本用法:
print(chr(65)) # A
print(chr(97)) # a
print(chr(48)) # 0
print(chr(9731)) # ☃(雪人符號)數字 65 對應大寫 A,97 對應小寫 a,48 對應字元 '0'。這些都是 Unicode 標準定義好的。
搭配 ord() 互相轉換
chr() 和 ord() 是一對互逆函數。ord() 把字元變數字,chr() 把數字變字元:
print(ord('A')) # 65
print(chr(65)) # A
print(chr(ord('A'))) # A(轉回來)
print(ord(chr(65))) # 65(轉回來)記住:chr() 和 ord() 永遠互為反函數,chr(ord(c)) == c,ord(chr(n)) == n。
用 chr() 產生字母序列
因為英文字母在 Unicode 中是連續的,可以用 chr() 搭配 range() 來產生字母:
# 產生 A ~ Z
uppers = [chr(i) for i in range(65, 91)]
print(uppers)
# ['A', 'B', 'C', ..., 'Z']
# 產生 a ~ z
lowers = [chr(i) for i in range(97, 123)]
print(lowers)
# ['a', 'b', 'c', ..., 'z']不用死背數字,記得 ord('A') == 65、ord('a') == 97 就好,或是直接用 ord() 算起始值。
chr() 處理中文和特殊符號
chr() 不只能處理英文,任何 Unicode 字元都可以:
print(chr(20320)) # 你
print(chr(22909)) # 好
print(chr(128522)) # 😊(表情符號)
print(chr(9829)) # ♥(愛心)Python 3 的字串原生就是 Unicode,所以 chr() 可以直接輸出各國文字和 emoji。
chr() 的範圍限制
chr() 只接受 0 到 1114111(0x10FFFF)之間的整數,超出範圍會報錯:
print(chr(0)) # \x00(空字元,不會顯示)
print(chr(1114111)) # 最大的 Unicode 碼位
# chr(1114112) # ValueError: chr() arg not in range(0x110000)
# chr(-1) # ValueError: chr() arg not in range(0x110000)小小綜合例子
來做一個簡單的凱撒密碼加密器,用 chr() 和 ord() 把字母往後移動 N 位:
# 凱撒密碼加密器
def caesar_encrypt(text, shift):
result = []
for c in text:
if c.isalpha():
base = ord('A') if c.isupper() else ord('a')
encrypted = chr((ord(c) - base + shift) % 26 + base)
result.append(encrypted)
else:
result.append(c)
return ''.join(result)
message = 'Hello, Python!'
shift = 3
encrypted = caesar_encrypt(message, shift)
print(f'原文:{message}')
print(f'加密(位移 {shift}):{encrypted}')
# 輸出:
# 原文:Hello, Python!
# 加密(位移 3):Khoor, Sbwkrq!
# 解密就是反向位移
decrypted = caesar_encrypt(encrypted, -shift)
print(f'解密:{decrypted}')
# 輸出:
# 解密:Hello, Python!