今回は、Pythonのord関数の使い方と具体例をご紹介します。
Pythonのord関数とは
ord関数は、文字列(長さ1)をUnicodeコードポイント(整数)に変換するための組み込み関数です。
たとえば‘A’なら65、‘あ’なら12354という数値が返されます。
アルファベットや日本語など、あらゆる文字を内部で数値として扱うときに役立ちます。
Python3ではASCII以外の文字(日本語、絵文字など)にも対応しており、ユニコードのコードポイントを返します。
このため、プログラム内で文字情報を取り扱う際は多くの場面で活用できます。
ord関数の基本的な使い方
ord関数は、必ず1文字の文字列を引数として渡します。
たとえば、次のように呼び出すと文字列のUnicode値が返されます。
1 2 |
print(ord('A')) # 65 print(ord('あ')) # 12354 |
65
12354
引数を1文字より多くしたり、空文字にしてしまうとTypeErrorが発生する点に注意してください。
また、数値など文字列以外を直接渡すこともできません。
ord関数の具体的な活用例
1. 文字列の各文字のUnicode値をリスト化する
文字列中の各文字にord関数を適用すると、数値のリストとしてまとめることが可能です。
以下のサンプルではリスト内包表記を使って、一度に変換しています。
1 2 3 |
text = "Python" unicode_values = [ord(c) for c in text] print(unicode_values) |
[80, 121, 116, 104, 111, 110]
2. 各文字のコードポイントを順番に取得する
ループと組み合わせることで、文字とそのUnicode値をセットで出力することも簡単です。
1 2 |
for c in "Hello": print(c, ord(c)) |
H 72
e 101
l 108
l 108
o 111
3. シーザー暗号の実装
ord関数と、逆の変換を行うchr関数を組み合わせることで、文字列をシフトさせる(暗号化する)簡単なプログラムも書けます。
次の例は大文字・小文字の英字に対応したシーザー暗号のサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
def caesar_cipher(text, shift): result = "" for ch in text: if 'A' <= ch <= 'Z': # 大文字の場合 result += chr((ord(ch) - ord('A') + shift) % 26 + ord('A')) elif 'a' <= ch <= 'z': # 小文字の場合 result += chr((ord(ch) - ord('a') + shift) % 26 + ord('a')) else: # アルファベット以外はそのまま result += ch return result encrypted = caesar_cipher("Hello, World!", 3) print(encrypted) |
Khoor, Zruog!
よくあるエラーと注意点
TypeError: ord() expected a character, but string of length N found
引数に1文字より長い文字列や空文字を渡した場合に発生します。
必ず長さ1の文字列を渡してください。
Unicode全体に対応しているため、英数字以外の文字(日本語や絵文字など)を扱う際にも利用できます。
ただしord関数の結果はUnicodeのコードポイントなので、ASCIIコードとは限らない点も覚えておくと便利です。
ord関数で取得した数値をchr関数に渡すと、再び元の文字に戻すことができます。
まとめ
ord関数は1文字の文字列を整数値に変換するシンプルな関数です。
文字コードを意識した処理や、暗号化などにも柔軟に対応できます。
エラーを避けるためにも、引数の文字数やデータ型には気をつけて活用してください。