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コードポイントに変換します。chrordは逆の関係にあり、文字列とコードポイントの変換を簡単に行うことができます。

ord関数の基本例

print(ord('A'))  # 出力: 65
print(ord('€'))  # 出力: 8364
print(ord('😀')) # 出力: 128512

ordは文字に対応するUnicodeコードポイントを返します。たとえば、ord('A')は65を、ord('€')は8364を返します。

chrとordを組み合わせた例

chrordを組み合わせて使うことで、文字とコードポイントの変換をスムーズに行えます。

char = 'Z'
code_point = ord(char)
print(f"'{char}' のコードポイントは {code_point} です")
# コードポイントから文字に戻す
print(f"コードポイント {code_point} に対応する文字は '{chr(code_point)}' です")

出力結果:

'Z' のコードポイントは 90 です
コードポイント 90 に対応する文字は 'Z' です

この例では、まず文字'Z'のコードポイントを取得し、それを使って再び文字に変換しています。chrordはこのように相互に変換できるため、文字列の処理に非常に便利です。

chrを使った応用例

カスタムシーザー暗号の実装

シーザー暗号のような文字のシフト操作は、chrordを使って簡単に実装できます。以下の例では、アルファベットを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!

この例では、chrordを使ってアルファベットをシフトさせ、文字列全体を暗号化しています。シフトする量を変更すれば、異なる暗号も簡単に実装できます。

Unicode範囲の探索

chrを 使って、特定の範囲のUnicode文字を探索し、どのような文字が含まれているか確認することができます。これは、特殊文字や絵文字を探したい場合に役立ちます。

# Unicode 128000から128020までの絵文字を表示
emojis = [chr(i) for i in range(128000, 128020)]
print(emojis)
# 出力: ['🀀', '🀁', '🀂', '🀃', '🀄', '🀅', '🀆', '🀇', '🀈', '🀉', '🀊', '🀋', '🀌', '🀍', '🀎', '🀏', '🀐', '🀑', '🀒']

この例では、絵文字の範囲(128000~128020)の文字を表示しています。chrを使えば、さまざまなUnicode範囲を探索し、どのような文字があるか簡単に確認できます。

まとめ

Pythonchr関数は、Unicodeコードポイントを対応する文字に変換するための非常に便利なツールです。テキスト処理や暗号化、特殊文字や絵文字の操作など、幅広い用途に使用できます。chrとその逆関数であるordを使いこなすことで、文字列と数値の変換が簡単になり、Unicodeをベースとしたさまざまな操作が可能になります。 Unicodeコードポイントを使って、テキストや特殊文字を効率的に操作したい場合は、ぜひchrを活用してみてください。