chr関数とは?
chr関数は、Python
で指定されたUnicodeコードポイントを対応する文字に変換するための組み込み関数です。たとえば、chr(65)
はUnicodeコードポイント65に対応する文字である'A'
を返します。この関数は、Unicode標準に基づいて、数値(コードポイント)から文字へのマッピングを行う非常に便利なツールです。
Python
は文字列を内部的にUnicodeで管理しており、chr
を使うことで、整数値(コードポイント)から直接文字を取得することができます。
chr関数の基本的な使い方
基本的な構文
chr(コードポイント)
- コードポイント: 文字に変換する整数値。範囲は0から1,114,111(0x10FFFF)までの有効なUnicodeコードポイントです。
例 - 英字や記号の変換
print(chr(65)) # 出力: 'A'
print(chr(97)) # 出力: 'a'
print(chr(8364)) # 出力: '€' (ユーロ記号)
この例では、chr(65)
が文字'A'
を返し、chr(97)
が文字'a'
を返しています。また、ユーロ記号('€'
)はコードポイント8364に対応しており、chr(8364)
で得られます。
例 - 特殊文字や絵文字
Unicodeには、多くの特殊文字や絵文字も含まれており、chr
を使ってこれらも取得できます。
print(chr(128512)) # 出力: '😀' (スマイリーフェイス)
print(chr(9786)) # 出力: '☺' (スマイル顔)
このように、chr
を使って簡単に絵文字や特殊文字を扱うことができます。絵文字などの文字は、特定のコードポイントで定義されており、chr
によって対応する文字が得られます。
chr関数の活用例
アルファベットのリストを作成
chr
関数を使って、アルファベットのリストを簡単に作成することができます。アルファベットは連続したUnicodeコードポイントを持っているため、ループを使って生成できます。
# 大文字アルファベットのリストを作成
uppercase_letters = [chr(i) for i in range(65, 91)]
print(uppercase_letters)
# 出力: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
# 小文字アルファベットのリストを作成
lowercase_letters = [chr(i) for i in range(97, 123)]
print(lowercase_letters)
# 出力: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
この例では、chr
を使ってASCIIコードに基づき、アルファベットをリストとして生成しています。大文字アルファベットはコードポイント65から始まり、小文字は97から始まります。
Unicodeコードポイントの範囲で特殊文字を表示
chr
を使えば、任意の範囲でUnicode文字を表示することが可能です。以下の例では、いくつかの数学記号やギリシャ文字を表示します。
# いくつかの特殊文字を表示
special_chars = [chr(i) for i in range(8704, 8710)]
print(special_chars)
# 出力: ['∀', '∁', '∂', '∃', '∄', '∅']
この例では、chr
を使って数学記号のコードポイント(8704~8710)を文字に変換しています。
chrとord関数の関係
Python
には、chr
関数の逆を行うord
関数があります。ord
関数は、文字をUnicodeコードポイントに変換します。chr
とord
は逆の関係にあり、文字列とコードポイントの変換を簡単に行うことができます。
ord関数の基本例
print(ord('A')) # 出力: 65
print(ord('€')) # 出力: 8364
print(ord('😀')) # 出力: 128512
ord
は文字に対応するUnicodeコードポイントを返します。たとえば、ord('A')
は65を、ord('€')
は8364を返します。
chrとordを組み合わせた例
chr
とord
を組み合わせて使うことで、文字とコードポイントの変換をスムーズに行えます。
char = 'Z'
code_point = ord(char)
print(f"'{char}' のコードポイントは {code_point} です")
# コードポイントから文字に戻す
print(f"コードポイント {code_point} に対応する文字は '{chr(code_point)}' です")
出力結果:
'Z' のコードポイントは 90 です
コードポイント 90 に対応する文字は 'Z' です
この例では、まず文字'Z'
のコードポイントを取得し、それを使って再び文字に変換しています。chr
とord
はこのように相互に変換できるため、文字列の処理に非常に便利です。
chrを使った応用例
カスタムシーザー暗号の実装
シーザー暗号のような文字のシフト操作は、chr
とord
を使って簡単に実装できます。以下の例では、アルファベットを3文字ずつシフトするシーザー暗号を実装しています。
def caesar_cipher(text, shift):
encrypted_text = ''
for char in text:
if char.isalpha():
# 大文字と小文字に対応
base = ord('A') if char.isupper() else ord('a')
encrypted_char = chr((ord(char) - base + shift) % 26 + base)
encrypted_text += encrypted_char
else:
encrypted_text += char
return encrypted_text
message = "Hello, World!"
shifted_message = caesar_cipher(message, 3)
print(shifted_message) # 出力: Khoor, Zruog!
この例では、chr
とord
を使ってアルファベットをシフトさせ、文字列全体を暗号化しています。シフトする量を変更すれば、異なる暗号も簡単に実装できます。
Unicode範囲の探索
chr
を
使って、特定の範囲のUnicode文字を探索し、どのような文字が含まれているか確認することができます。これは、特殊文字や絵文字を探したい場合に役立ちます。
# Unicode 128000から128020までの絵文字を表示
emojis = [chr(i) for i in range(128000, 128020)]
print(emojis)
# 出力: ['🀀', '🀁', '🀂', '🀃', '🀄', '🀅', '🀆', '🀇', '🀈', '🀉', '🀊', '🀋', '🀌', '🀍', '🀎', '🀏', '🀐', '🀑', '🀒']
この例では、絵文字の範囲(128000~128020)の文字を表示しています。chr
を使えば、さまざまなUnicode範囲を探索し、どのような文字があるか簡単に確認できます。
まとめ
Python
のchr
関数は、Unicodeコードポイントを対応する文字に変換するための非常に便利なツールです。テキスト処理や暗号化、特殊文字や絵文字の操作など、幅広い用途に使用できます。chr
とその逆関数であるord
を使いこなすことで、文字列と数値の変換が簡単になり、Unicodeをベースとしたさまざまな操作が可能になります。
Unicodeコードポイントを使って、テキストや特殊文字を効率的に操作したい場合は、ぜひchr
を活用してみてください。