Pythonのord()関数を徹底解説!文字から数値への変換をマスター
Pythonでプログラミングをしていると、特定の文字がどの数値(文字コード)に対応するのかを知りたい場面があります。例えば、文字列内の文字を数値として操作したり、文字コードについて深く理解したりする場合などです。このようなときに非常に役立つのが、Pythonの組み込み関数である**ord()関数**です。この記事では、ord()関数の基本的な使い方から、その役割、そして具体的な活用事例までを初心者にもわかりやすく解説しますします。
ord()関数とは?文字と数値の橋渡し
Pythonのord()関数は、引数として渡された単一の文字(文字列)に対応するUnicodeコードポイントを整数として返す組み込み関数です。これにより、文字と数値の間で双方向の変換が可能になります。
基本的な使い方
ord()関数は、1つの文字列引数を取ります。この文字列は、ちょうど1つの文字で構成されている必要があります。
# ASCII文字の変換例
print(f"文字 'A' の数値: {ord('A')}") # 出力: 文字 'A' の数値: 65
print(f"文字 'a' の数値: {ord('a')}") # 出力: 文字 'a' の数値: 97
print(f"文字 '!' の数値: {ord('!')}") # 出力: 文字 '!' の数値: 33
print(f"文字 '5' の数値: {ord('5')}") # 出力: 文字 '5' の数値: 53 (数字としての5ではなく、文字としての'5'のコード)
# 日本語文字(Unicode)の変換例
print(f"文字 'こ' の数値: {ord('こ')}") # 出力: 文字 'こ' の数値: 12371
print(f"文字 '𠮋' の数値: {ord('𠮋')}") # 出力: 文字 '𠮋' の数値: 38283
# 絵文字(Unicode)の変換例
print(f"文字 '😀' の数値: {ord('😀')}") # 出力: 文字 '😀' の数値: 128512
# 複数の文字を指定した場合
try:
print(ord("AB"))
except TypeError as e:
print(f"エラー: {e}") # 出力: エラー: ord() expected a character, but string of length 2 found
# 空文字列を指定した場合
try:
print(ord(""))
except TypeError as e:
print(f"エラー: {e}") # 出力: エラー: ord() expected a character, but string of length 0 found
ord()関数は、Unicodeの文字を受け取るため、ASCII文字だけでなく、世界中の様々な言語の文字や絵文字のコードポイントを取得できます。
ord()関数とchr()関数の関係
ord()関数と対になる組み込み関数が**chr()関数**です。
-
ord(character): 単一の文字を対応する**整数(コードポイント)**に変換します。 -
chr(integer): 整数(コードポイント)を文字に変換します。
これらは、文字と数値の間で相互変換を行うためのセットとして機能します。
# 文字から数値へ (ord)
char_x = 'X'
char_ありがとう = 'あ'
print(f"文字 '{char_x}' の数値: {ord(char_x)}") # 出力: 文字 'X' の数値: 88
print(f"文字 '{char_ありがとう}' の数値: {ord(char_ありがとう)}") # 出力: 文字 'あ' の数値: 12354
# 数値から文字へ (chr)
num_88 = 88
num_12354 = 12354
print(f"数値 {num_88} の文字: {chr(num_88)}") # 出力: 数値 88 の文字: X
print(f"数値 {num_12354} の文字: {chr(num_12354)}") # 出力: 数値 12354 の文字: あ
# 相互変換の例
original_char = '👍'
converted_num = ord(original_char)
converted_char = chr(converted_num)
print(f"元の文字: {original_char}, 数値変換後: {converted_num}, 文字再変換後: {converted_char}")
# 出力: 元の文字: 👍, 数値変換後: 128077, 文字再変換後: 👍
ord()関数の活用事例
ord()関数は、文字列内の文字を数値として操作したり、文字コードの特性を利用したりする特定のシナリオで役立ちます。
1. 文字列の比較やソートのカスタマイズ
文字コードの数値を利用して、文字列の独自の比較ロジックやソート順を実装できます。
# 文字列内の各文字のコードポイントの合計で比較する関数(例)
def sum_of_char_codes(s):
return sum(ord(c) for c in s)
words = ["apple", "banana", "cat", "zebra"]
# 文字コードの合計でソート
sorted_words = sorted(words, key=sum_of_char_codes)
print(f"文字コード合計でソート: {sorted_words}")
# 出力: 文字コード合計でソート: ['cat', 'apple', 'banana', 'zebra'] (アルファベット順とは異なる結果になることがある)
# 特定の文字範囲内にあるかどうかのチェック
def is_uppercase_alpha(char):
return ord('A') <= ord(char) <= ord('Z')
print(f"'P' は大文字アルファベットか: {is_uppercase_alpha('P')}") # 出力: True
print(f"'p' は大文字アルファベットか: {is_uppercase_alpha('p')}") # 出力: False
2. 暗号化や難読化の簡易的な実装
簡単な文字コードのシフト暗号(シーザー暗号など)を実装する際に、文字を数値に変換し、操作し、再び文字に戻すという流れでord()とchr()が使われます。
def caesar_cipher(text, shift):
encrypted_text = []
for char in text:
if 'a' <= char <= 'z':
start = ord('a')
elif 'A' <= char <= 'Z':
start = ord('A')
else:
encrypted_text.append(char) # アルファベット以外はそのまま
continue
# シフト処理(26で割った余りを取ることで循環させる)
shifted_code = (ord(char) - start + shift) % 26 + start
encrypted_text.append(chr(shifted_code)) # chr()で数値から文字に戻す
return "".join(encrypted_text)
original_message = "Python"
shifted_message = caesar_cipher(original_message, 3)
print(f"元のメッセージ: {original_message}") # 出力: 元のメッセージ: Python
print(f"暗号化されたメッセージ: {shifted_message}") # 出力: 暗号化されたメッセージ: Sbwkrq
3. 文字コードのデバッグと学習
特定の文字や記号のUnicodeコードポイントを調べたり、異なる文字エンコーディングの挙動を理解したりする際に、ord()とchr()を使って実験することができます。特に、文字化けの問題に遭遇した際に、文字がどのようなコードポイントとして認識されているかを確認するのに役立ちます。
まとめ
Pythonのord()関数は、単一の文字(文字列)を与えられたときに、それに対応するUnicodeコードポイントを整数として返す組み込み関数です。対になるchr()関数と合わせて使用することで、文字と数値の間で相互変換が可能になります。この機能は、文字列の比較、簡易的な暗号化、文字コードの理解といった特定の場面で非常に有効です。
-
ord(character): 単一の文字を対応する**整数(Unicodeコードポイント)**に変換します。 -
chr(integer): 整数(Unicodeコードポイント)を文字に変換します。 -
引数にはちょうど1つの文字を含む文字列を指定する必要があります。
-
文字列のソート、特定の文字範囲のチェック、文字コードに基づく処理の実装に役立ちます。
この関数を理解し適切に活用することで、Pythonでの文字と数値の変換をスムーズに行い、より高度なテキスト処理やデータ操作が可能になるでしょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



