ordとは?
Pythonのord関数は、引数に渡した一文字の文字列を、その文字に対応する数値に変換する組み込み関数です。
コンピュータは文字をそのまま扱うよりも、数値として扱う方が得意です。ord関数は、文字を数値に変換することで、文字を使った計算や比較処理を可能にします。
たとえば、次のような場面で活躍します。
- 入力された文字が「アルファベットの大文字(A〜Z)か」を判定したい
- 文字を「あいうえお順(文字コード順)」に並び替えたい
- 文字を3文字分ずらす(例:「A」を「D」にする)ような簡易的な暗号を作りたい
コンピュータの内部では、すべての文字(「A」や「あ」、記号「@」など)に、Unicodeコードポイントと呼ばれる固有の番号が割り当てられています。ord関数は、その番号(整数値)を返します。
・ord('A') → 65
・ord('B') → 66
・ord('a') → 97
・ord('0') → 48
・ord('あ') → 12354
このように、Aは65、Bは66と連続した数値になっています。ord関数を使えば、「文字がA〜Zの範囲か」を「数値が65〜90の範囲か」という、コンピュータが得意な数値の比較処理で判定できるようになります。
ord関数の特徴
- 引数には必ず一文字の文字列を渡す
- 文字に対応するUnicodeコードポイント(整数値)を返す
- 数値から文字に戻すchr関数と対になる関数
文字コードの仕組みを理解したり、文字列を扱うプログラムを作ったりする際に役立ちます。
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
基本構文
ord関数の使い方はとてもシンプルです。ord(文字)のように、調べたい一文字の文字列を引数に指定するだけです。
まずは、基本的なアルファベットや数字を引数に渡して、どのような数値(Unicodeコードポイント)が返ってくるかを見てみましょう。
出力結果
65
97
48この例では、ord関数を使って文字に対応する数値を取得しています。大文字の「A」は65、小文字の「a」は97、数字の「0」は48という結果になりました。大文字と小文字は区別され、異なる数値が割り当てられていることがわかります。
さらに日本語文字や特殊記号にも適用可能です。
出力結果
12354
64
32この例では、ひらがなや記号を指定しています。「あ」は12354、「@」マークは64、そして半角スペースにも32という数値が割り当てられていることがわかります。ord関数は、コンピュータが扱うさまざまな文字に対応する固有の数値を返します。
実用例
ord関数が実際のプログラムでどのように使われるのか、サンプルコードを見ながら解説していきます。文字コードの確認だけでなく、文字の種類を判定したり、簡単な暗号化処理を作ったりと、幅広い場面で活用できます。各例では動物名を使用して、親しみやすく理解しやすい形で説明します。
文字コード確認の基本例
for文と組み合わせることで、文字列に含まれる各文字のUnicodeコードポイントを順番に調べられます。ここでは動物名を一文字ずつ取り出して、ord関数で数値に変換します。
出力結果
文字: ネ, コード: 12493
文字: コ, コード: 12467この例では、for文で文字列「ネコ」から「ネ」と「コ」を順番に取り出し、それぞれの文字をord関数に渡しています。f文字列(フォーマット済み文字列リテラル)を使って、文字と変換後のコードポイントを分かりやすく表示しています。
アルファベット判定システム
入力された文字がアルファベットかどうかを判定するシステムです。ord関数を使用して文字コードの範囲を確認します。
出力結果
イ: アルファベット以外
ヌ: アルファベット以外
c: アルファベット
A: アルファベット
t: アルファベットこの例では、is_alphabet関数が文字のコードポイントを調べ、指定された範囲(アルファベット)内にあるかを判定しています。
リストの要素が順番にis_alphabet関数に渡され、結果が三項演算子(if result else)によって「アルファベット」か「アルファベット以外」に振り分けられて表示されます。「c」「A」「t」は範囲内のため「アルファベット」、「イ」「ヌ」は範囲外のため「アルファベット以外」と判定されています。
パスワード強度チェッカー
ord関数とany関数を組み合わせることで、文字列に特定の種類(大文字、小文字、数字)の文字が含まれているかを簡単にチェックできます。ここでは、大文字、小文字、数字がそれぞれ1文字でも含まれているかを判定し、含まれている種類の数を「強度レベル」としています。
出力結果
ウマ123: 強度レベル: 1/3
dog: 強度レベル: 1/3
CAT456: 強度レベル: 2/3この例では、check_password_strength関数がパスワードの強度を判定しています。
any関数は、for文で取り出した各文字をord(c)で数値化し、それが指定範囲内にあるか(例:大文字か)を調べ、一つでも当てはまればTrue(真)を返します。「ウマ123」は数字のみ(1/3)、「dog」は小文字のみ(1/3)、「CAT456」は大文字と数字(2/3)が含まれると判定されています。
文字列の数値変換処理
文字列を数値に変換する際の基本的な処理です。文字コードを利用して数字文字を整数値に変換します。ord関数を使うと、数字の文字(「0」〜「9」)を実際の数値(0〜9)に変換できます。
出力結果
抽出された数字: [5, 3]この例では、char_to_digit関数が文字を数値に変換しています。
if '0' <= char <= '9':という条件で、文字が数字かどうかを判定しています。ord(char) - ord('0')で文字を数値に変換し、Noneでなかった(=数字だった)場合だけdigitsリストに追加しています。「トラ5ヒツジ3」から「5」と「3」が数値として抽出されました。
シーザー暗号の実装
ord関数で文字を数値に変換し、その数値をずらし(シフト)、chr関数(数値から文字に変換)で文字に戻すことで、シーザー暗号(簡易的な暗号化)が実装できます。
出力結果
元の文字: dog
暗号化後: grjこの例では、caesar_cipher関数がシーザー暗号処理を行っています。
「dog」という文字列の各文字「d」「o」「g」をord関数で数値化し、3(shift)を加算しています。26で割った余りで計算することで、「z」の次が「a」に戻るようにしています。最後にchr関数で文字に戻すことで、「dog」が「grj」(d->e->f->g, o->p->q->r, g->h->i->j)に暗号化されました。
文字の分類システム
if文とord関数を使って、文字のコードポイントがどの範囲に含まれるかに応じて、文字の種類(数字、大文字、小文字など)を判定できます。
出力結果
'ネ' (コード: 12493) -> その他
'コ' (コード: 12467) -> その他
'C' (コード: 67) -> 大文字
'3' (コード: 51) -> 数字
'a' (コード: 97) -> 小文字この例では、classify_character関数が文字の分類を行っています。
ord関数で取得したcodeが、数字(48〜57)、大文字(65〜90)、小文字(97〜122)のどの範囲にあるかをif/elif/else文で順番に判定しています。「ネコC3a」という文字列を一文字ずつチェックし、「ネ」と「コ」はどの範囲にも当てはまらないため「その他」に分類されました。
ファイル名の文字チェック
ファイル名には、OS(オペレーティングシステム)によって使用できない特定の記号(例:<, >, :, / など)があります。あらかじめファイル名に使用できない文字のコードポイントをリストにしておき、特定の文字コード範囲を避ける処理を実装します。
出力結果
無効な文字: '<' (コード: 60)
無効な文字: '>' (コード: 62)
有効な文字列: ウサギ写真.txtこの例では、is_valid_filename_char関数がファイル名として使える文字かを判定しています。
リストにはあらかじめ使用できない文字のコードポイントを格納しておきます。ファイル名「ウサギ<写真>.txt」を一文字ずつチェックし、「<」と「>」がinvalid_codesに含まれていたため「無効な文字」として表示され、それ以外の有効な文字はvalid_charsリストに追加されています。
入力値検証システム
ord関数は、ユーザーからの入力値が、あらかじめ決められた文字種(例:半角英数字とひらがなのみ)だけで構成されているかを調べる際にも役立ちます。
許可する文字のコードポイント範囲をリストで定義し、入力された文字が範囲のいずれかに含まれているかを確認します。
出力結果
'ひつじ123': 入力値は有効です
'カモ!': 許可されていない文字: 'カ' (コード: 12459)
'dog456': 入力値は有効ですこの例では、validate_input関数が入力文字列の検証を行っています。
allowed_rangesに許可する文字(数字、大文字、小文字、ひらがな)のコードポイント範囲が定義されています。「カモ!」という入力では、「カ」(カタカナ)がallowed_rangesのどの範囲にも含まれなかったため、if not is_allowed: がTrue(真)となり、エラーメッセージが返されています。
「!」も範囲外ですが、関数は最初に見つけた許可されていない文字「カ」の時点で判定を終了しています。
まとめ
Pythonのord関数は、文字を対応する数値(Unicodeコードポイント)に変換する重要な組み込み関数です。この記事では、基本的な使い方から活用例まで解説しました。
ord関数が活躍する場面
- 文字が特定の範囲(例:アルファベット)か判定するとき
- 簡易的な暗号化処理で文字を数値に置き換えるとき
- 文字列の入力チェックで一文字ずつ検証するとき
- 文字コードを直接確認したいとき
- 文字の順序(前後関係)を比較したいとき
ord関数を用いる上で、押さえておきたいポイントを覚えておきましょう。
重要なポイント
- 引数には必ず一文字の文字列を指定する
- 文字列が複数文字だとエラー(TypeError)になる
- 返り値はUnicodeコードポイントの整数値
- 数値から文字に戻す場合はchr関数を使う
初めてPythonを学ぶ方も、この記事で紹介したord関数を実際に書いて、基本的な使い方を試してみてください。
文字を数値として扱う処理は、さまざまな場面で必要になります。マスターしておけば役立つこと間違いなしです。ぜひord関数をマスターして、より実用的なプログラムを作成できるようになりましょう。