Python ordの使い方

この記事のポイント

Pythonのord関数は、一つの文字を、その文字に対応するUnicodeコードポイント(整数値)と呼ばれる整数値に変換する関数です。

この記事を読むと、次のようなことが身に付きます。

  • 文字を数値に変換する使い方がわかる
  • 文字を数値として扱うことで、どのような処理ができるかがわかる
  • 文字エンコーディングや暗号化処理における実用的な使い方がわかる

この記事を通して、ord関数の正しい使い方をマスターすれば、文字と数値を扱う処理がスムーズに書けるようになります。

目次

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コードポイント)が返ってくるかを見てみましょう。

# 基本的な使用例 print(ord('A')) print(ord('a')) print(ord('0'))

出力結果

65
97
48

この例では、ord関数を使って文字に対応する数値を取得しています。大文字の「A」は65、小文字の「a」は97、数字の「0」は48という結果になりました。大文字と小文字は区別され、異なる数値が割り当てられていることがわかります。

さらに日本語文字や特殊記号にも適用可能です。

# 日本語や記号の例 print(ord('あ')) print(ord('@')) print(ord(' '))

出力結果

12354
64
32

この例では、ひらがなや記号を指定しています。「あ」は12354、「@」マークは64、そして半角スペースにも32という数値が割り当てられていることがわかります。ord関数は、コンピュータが扱うさまざまな文字に対応する固有の数値を返します。

実用例

ord関数が実際のプログラムでどのように使われるのか、サンプルコードを見ながら解説していきます。文字コードの確認だけでなく、文字の種類を判定したり、簡単な暗号化処理を作ったりと、幅広い場面で活用できます。各例では動物名を使用して、親しみやすく理解しやすい形で説明します。

文字コード確認の基本例

for文と組み合わせることで、文字列に含まれる各文字のUnicodeコードポイントを順番に調べられます。ここでは動物名を一文字ずつ取り出して、ord関数で数値に変換します。

animal = "ネコ" for char in animal: code = ord(char) print(f"文字: {char}, コード: {code}")

出力結果

文字: ネ, コード: 12493
文字: コ, コード: 12467

この例では、for文で文字列「ネコ」から「ネ」と「コ」を順番に取り出し、それぞれの文字をord関数に渡しています。f文字列(フォーマット済み文字列リテラル)を使って、文字と変換後のコードポイントを分かりやすく表示しています。

アルファベット判定システム

入力された文字がアルファベットかどうかを判定するシステムです。ord関数を使用して文字コードの範囲を確認します。

def is_alphabet(char): code = ord(char) return (65 <= code <= 90) or (97 <= code <= 122) animals = ["イ", "ヌ", "c", "A", "t"] for animal in animals: result = is_alphabet(animal) print(f"{animal}: {'アルファベット' if result else 'アルファベット以外'}")

出力結果

イ: アルファベット以外
ヌ: アルファベット以外
c: アルファベット
A: アルファベット
t: アルファベット

この例では、is_alphabet関数が文字のコードポイントを調べ、指定された範囲(アルファベット)内にあるかを判定しています。

リストの要素が順番にis_alphabet関数に渡され、結果が三項演算子(if result else)によって「アルファベット」か「アルファベット以外」に振り分けられて表示されます。「c」「A」「t」は範囲内のため「アルファベット」、「イ」「ヌ」は範囲外のため「アルファベット以外」と判定されています。

パスワード強度チェッカー

ord関数とany関数を組み合わせることで、文字列に特定の種類(大文字、小文字、数字)の文字が含まれているかを簡単にチェックできます。ここでは、大文字、小文字、数字がそれぞれ1文字でも含まれているかを判定し、含まれている種類の数を「強度レベル」としています。

def check_password_strength(password): has_upper = any(65 <= ord(c) <= 90 for c in password) has_lower = any(97 <= ord(c) <= 122 for c in password) has_digit = any(48 <= ord(c) <= 57 for c in password) # Trueは1、Falseは0として合計する strength = sum([has_upper, has_lower, has_digit]) return f"強度レベル: {strength}/3" test_passwords = ["ウマ123", "dog", "CAT456"] for pwd in test_passwords: print(f"{pwd}: {check_password_strength(pwd)}")

出力結果

ウマ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)に変換できます。

def char_to_digit(char): if '0' <= char <= '9': return ord(char) - ord('0') return None animal_codes = "トラ5ヒツジ3" digits = [] for char in animal_codes: digit = char_to_digit(char) if digit is not None: digits.append(digit) print(f"抽出された数字: {digits}")

出力結果

抽出された数字: [5, 3]

この例では、char_to_digit関数が文字を数値に変換しています。

if '0' <= char <= '9':という条件で、文字が数字かどうかを判定しています。ord(char) - ord('0')で文字を数値に変換し、Noneでなかった(=数字だった)場合だけdigitsリストに追加しています。「トラ5ヒツジ3」から「5」と「3」が数値として抽出されました。

シーザー暗号の実装

ord関数で文字を数値に変換し、その数値をずらし(シフト)、chr関数(数値から文字に変換)で文字に戻すことで、シーザー暗号(簡易的な暗号化)が実装できます。

def caesar_cipher(text, shift): result = "" for char in text: if 'A' <= char <= 'Z': shifted = (ord(char) - ord('A') + shift) % 26 result += chr(shifted + ord('A')) elif 'a' <= char <= 'z': shifted = (ord(char) - ord('a') + shift) % 26 result += chr(shifted + ord('a')) else: result += char return result animal_name = "dog" encrypted = caesar_cipher(animal_name, 3) print(f"元の文字: {animal_name}") print(f"暗号化後: {encrypted}")

出力結果

元の文字: 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関数を使って、文字のコードポイントがどの範囲に含まれるかに応じて、文字の種類(数字、大文字、小文字など)を判定できます。

def classify_character(char): code = ord(char) if 48 <= code <= 57: return "数字" elif 65 <= code <= 90: return "大文字" elif 97 <= code <= 122: return "小文字" else: return "その他" test_chars = "ネコC3a" for char in test_chars: category = classify_character(char) print(f"'{char}' (コード: {ord(char)}) -> {category}")

出力結果

'ネ' (コード: 12493) -> その他
'コ' (コード: 12467) -> その他
'C' (コード: 67) -> 大文字
'3' (コード: 51) -> 数字
'a' (コード: 97) -> 小文字

この例では、classify_character関数が文字の分類を行っています。

ord関数で取得したcodeが、数字(48〜57)、大文字(65〜90)、小文字(97〜122)のどの範囲にあるかをif/elif/else文で順番に判定しています。「ネコC3a」という文字列を一文字ずつチェックし、「ネ」と「コ」はどの範囲にも当てはまらないため「その他」に分類されました。

ファイル名の文字チェック

ファイル名には、OS(オペレーティングシステム)によって使用できない特定の記号(例:<, >, :, / など)があります。あらかじめファイル名に使用できない文字のコードポイントをリストにしておき、特定の文字コード範囲を避ける処理を実装します。

def is_valid_filename_char(char): invalid_codes = [ord(c) for c in '<>:"/\\\\\\\\|?*'] return ord(char) not in invalid_codes filename = "ウサギ<写真>.txt" valid_chars = [] for char in filename: if is_valid_filename_char(char): valid_chars.append(char) else: print(f"無効な文字: '{char}' (コード: {ord(char)})") print(f"有効な文字列: {''.join(valid_chars)}")

出力結果

無効な文字: '<' (コード: 60)
無効な文字: '>' (コード: 62)
有効な文字列: ウサギ写真.txt

この例では、is_valid_filename_char関数がファイル名として使える文字かを判定しています。

リストにはあらかじめ使用できない文字のコードポイントを格納しておきます。ファイル名「ウサギ<写真>.txt」を一文字ずつチェックし、「<」と「>」がinvalid_codesに含まれていたため「無効な文字」として表示され、それ以外の有効な文字はvalid_charsリストに追加されています。

入力値検証システム

ord関数は、ユーザーからの入力値が、あらかじめ決められた文字種(例:半角英数字とひらがなのみ)だけで構成されているかを調べる際にも役立ちます。

許可する文字のコードポイント範囲をリストで定義し、入力された文字が範囲のいずれかに含まれているかを確認します。

def validate_input(text): allowed_ranges = [ (48, 57), # 数字 (65, 90), # 大文字 (97, 122), # 小文字 (12353, 12438) # ひらがな基本範囲 ] for char in text: code = ord(char) is_allowed = any(start <= code <= end for start, end in allowed_ranges) if not is_allowed: return False, f"許可されていない文字: '{char}' (コード: {code})" return True, "入力値は有効です" test_inputs = ["ひつじ123", "カモ!", "dog456"] for input_text in test_inputs: valid, message = validate_input(input_text) print(f"'{input_text}': {message}")

出力結果

'ひつじ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関数をマスターして、より実用的なプログラムを作成できるようになりましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python ordの使い方