Pythonのchr()関数を徹底解説!数値から文字への変換をマスター


 

Pythonでプログラミングをしていると、特定の数値がどの文字に対応するのかを知りたい場面があります。例えば、ASCIIコードやUnicodeの数値を直接操作して文字を生成したり、文字コードについて深く理解したりする場合などです。このようなときに非常に役立つのが、Pythonの組み込み関数である**chr()関数**です。この記事では、chr()関数の基本的な使い方から、その役割、そして具体的な活用事例までを初心者にもわかりやすく解説しますします。

 

chr()関数とは?数値と文字の橋渡し

 

Pythonのchr()関数は、引数として渡された整数(Unicodeコードポイント)に対応する単一の文字を文字列として返す組み込み関数です。これにより、数値と文字の間で双方向の変換が可能になります。

 

基本的な使い方

 

chr()関数は、1つの整数引数を取ります。この整数は、有効なUnicodeコードポイントの範囲内である必要があります(通常、0から1,114,111 (0x10FFFF) まで)。

Python
 
# ASCII文字の変換例
print(f"数値 65 は文字: {chr(65)}")  # 出力: 数値 65 は文字: A
print(f"数値 97 は文字: {chr(97)}")  # 出力: 数値 97 は文字: a
print(f"数値 33 は文字: {chr(33)}")  # 出力: 数値 33 は文字: !

# 日本語文字(Unicode)の変換例
print(f"数値 12371 は文字: {chr(12371)}") # 出力: 数値 12371 は文字: こ
print(f"数値 38283 は文字: {chr(38283)}") # 出力: 数値 38283 は文字: 𠮋 (サロゲートペア対応の環境で正しく表示)

# 絵文字(Unicode)の変換例
print(f"数値 128512 は文字: {chr(128512)}") # 出力: 数値 128512 は文字: 😀

# 無効な範囲の数値を指定した場合
try:
    print(chr(-1))
except ValueError as e:
    print(f"エラー: {e}") # 出力: エラー: chr() arg not in range(0x110000)

try:
    print(chr(1114112)) # 0x10FFFF + 1
except ValueError as e:
    print(f"エラー: {e}") # 出力: エラー: chr() arg not in range(0x110000)

chr()関数は、Unicodeのコードポイントを受け取るため、ASCII文字だけでなく、世界中の様々な言語の文字や絵文字も扱うことができます。

 

chr()関数とord()関数の関係

 

chr()関数と対になる組み込み関数が**ord()関数**です。

  • chr(integer): 整数(コードポイント)を文字に変換します。

  • ord(character): 単一の文字を対応する**整数(コードポイント)**に変換します。

これらは、文字と数値の間で相互変換を行うためのセットとして機能します。

Python
 
# 文字から数値へ (ord)
char_a = 'A'
char_こ = 'こ'
print(f"文字 '{char_a}' の数値: {ord(char_a)}") # 出力: 文字 'A' の数値: 65
print(f"文字 '{char_こ}' の数値: {ord(char_こ)}") # 出力: 文字 'こ' の数値: 12371

# 数値から文字へ (chr)
num_65 = 65
num_12371 = 12371
print(f"数値 {num_65} の文字: {chr(num_65)}") # 出力: 数値 65 の文字: A
print(f"数値 {num_12371} の文字: {chr(num_12371)}") # 出力: 数値 12371 の文字: こ

# 相互変換の例
original_char = 'X'
converted_num = ord(original_char)
converted_char = chr(converted_num)
print(f"元の文字: {original_char}, 数値変換後: {converted_num}, 文字再変換後: {converted_char}")
# 出力: 元の文字: X, 数値変換後: 88, 文字再変換後: X

 

chr()関数の活用事例

 

chr()関数は、直接的に文字コードを扱うような特定のシナリオで役立ちます。

 

1. 文字列の動的生成

 

特定のパターンを持つ文字列や、通常では入力しにくい特殊文字を生成する際に利用できます。

Python
 
# 'A'から'Z'までのアルファベットを生成
alphabets = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
print(f"A-Z: {''.join(alphabets)}") # 出力: A-Z: ABCDEFGHIJKLMNOPQRSTUVWXYZ

# ランダムなパスワードの一部を生成(例: ASCII文字の範囲で)
import random
password_chars = [chr(random.randint(33, 126)) for _ in range(8)]
print(f"ランダムなパスワード: {''.join(password_chars)}") # 出力例: ランダムなパスワード: ;Z)p+G$!

 

2. 暗号化や難読化の簡易的な実装

 

簡単な文字コードのシフト暗号(シーザー暗号など)を実装する際に、文字を数値に変換し、操作し、再び文字に戻すという流れでchr()ord()が使われます。

Python
 
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))
    return "".join(encrypted_text)

original_message = "Hello World"
shifted_message = caesar_cipher(original_message, 3)
print(f"元のメッセージ: {original_message}")   # 出力: 元のメッセージ: Hello World
print(f"暗号化されたメッセージ: {shifted_message}") # 出力: 暗号化されたメッセージ: Kelli Zruog

 

3. 文字コードのデバッグと学習

 

特定の文字や記号のUnicodeコードポイントを調べたり、異なる文字エンコーディングの挙動を理解したりする際に、chr()ord()を使って実験することができます。

 

まとめ

 

Pythonのchr()関数は、与えられたUnicodeコードポイントに対応する単一の文字を返す、数値から文字への変換を行う組み込み関数です。対になるord()関数と合わせて使用することで、文字と数値の間で相互変換が可能になります。この機能は、文字列の動的な生成、簡易的な暗号化、文字コードの理解といった特定の場面で非常に有効です。

  • chr(integer): 整数(Unicodeコードポイント)を文字に変換します。

  • ord(character): 単一の文字を対応する**整数(Unicodeコードポイント)**に変換します。

  • 有効なUnicodeコードポイントの範囲は0から0x10FFFF (1,114,111) までです。

  • 文字列の動的な生成や、文字コードに基づく処理の実装に役立ちます。

この関数を理解し適切に活用することで、Pythonでの文字と数値の変換をスムーズに行い、より高度なテキスト処理やデータ操作が可能になるでしょう。


 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座