カテゴリ: Python 更新日: 2026/03/02

Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い

Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い

先生と生徒の会話形式で理解しよう

生徒

「Pythonで、文字列が数字かどうかを調べたいんですけど、どうすればいいですか?」

先生

「それならisdigit()isnumeric()というメソッドを使うのが便利ですよ。」

生徒

「似ている名前ですね。何が違うんですか?」

先生

「どちらも“文字列が数値かどうか”を調べますが、少しだけ違いがあります。わかりやすく順番に説明していきましょう。」

1. Pythonで文字列が数字かどうかを判定する方法とは?

1. Pythonで文字列が数字かどうかを判定する方法とは?
1. Pythonで文字列が数字かどうかを判定する方法とは?

Pythonで文字列が数値かどうかを調べたいときは、isdigit()isnumeric()という文字列メソッドを使います。どちらも「文字列が数字だけでできているか」をチェックし、結果はTrue(はい)かFalse(いいえ)の真偽値で返ってきます。

使い方はとてもシンプルで、str型(文字列)の後ろに「.メソッド名()」と書くだけです。


text = "123"
print(text.isdigit())    # True:数字だけなので「はい」
print(text.isnumeric())  # True:同じく数字だけなので「はい」

True
True

もう少し実感しやすい例を見てみましょう。数字ではない文字が混ざると、判定はFalseになります。


samples = ["123", "abc", "123", "123abc", " 123 "]
for s in samples:
    # 前後に空白があると数字判定は失敗するため、必要ならstrip()で除去してから判定
    print(s, "=>", s.strip().isdigit(), s.strip().isnumeric())

123 => True True
abc => False False
123 => True True
123abc => False False
 123  => True True

ポイントは「文字列に対して呼び出す」ことと、「結果がTrueかFalseで返る」こと。まずはこの基本だけ覚えておけば、次の章からの詳細もすっと理解できます。

2. isdigit()メソッドの特徴

2. isdigit()メソッドの特徴
2. isdigit()メソッドの特徴

isdigit()は、文字列が「0〜9の数字だけで構成されているか」を調べるメソッドです。結果はTrueFalseで返ります。数字以外(英字・記号・スペースなど)が1文字でも混じるとFalseになります。

基本の使い方は次のとおりです。半角・全角の数字はどちらも判定できます。


print("123".isdigit())     # True(0〜9だけ)
print("123".isdigit())   # True(全角数字もOK)
print("123a".isdigit())    # False(aが混ざっている)

True
True
False

初心者がつまずきやすいポイントも確認しておきましょう。


samples = [" 123 ", "+123", "123.0", "", "123 "]
for s in samples:
    # 前後の空白があるとFalseになるため、必要に応じてstrip()で除去
    print(repr(s), "=>", s.isdigit(), " / strip後:", s.strip().isdigit())

' 123 ' => False  / strip後: True
'+123'  => False  / strip後: False
'123.0' => False  / strip後: False
''      => False  / strip後: False
'123 ' => False / strip後: True

コツ:ユーザー入力を判定するときは、まずstrip()で前後の空白を取り除いてからisdigit()を呼ぶと実用的です。空文字(長さ0)はFalseになる点も覚えておくと安心です。

3. isnumeric()メソッドの特徴

3. isnumeric()メソッドの特徴
3. isnumeric()メソッドの特徴

isnumeric()は、数字として使われるあらゆる文字を対象にしています。

たとえば、漢数字(「一」「二」「三」)やローマ数字もTrueになります。


print("三".isnumeric())     # True(漢数字)
print("Ⅲ".isnumeric())     # True(ローマ数字)
print("123".isnumeric())   # True
print("123.45".isnumeric()) # False(小数点がNG)

True
True
True
False

ただし、小数点(.)やマイナス記号(-)が入っていると、数値であってもFalseになります。

4. isdigit()とisnumeric()の違いまとめ

4. isdigit()とisnumeric()の違いまとめ
4. isdigit()とisnumeric()の違いまとめ

どちらも数字だけで構成されているかを調べるメソッドですが、対応している文字に違いがあります。

文字列isdigit()isnumeric()
"123"
"123"(全角)
"三"(漢数字)×
"Ⅲ"(ローマ数字)×
"123.45"××
"-100"××

漢数字やローマ数字を含む文字列を「数字」として扱いたい場合はisnumeric()を使いましょう。

5. 数字として使いたい場合の実用例

5. 数字として使いたい場合の実用例
5. 数字として使いたい場合の実用例

例えば、ユーザーから年齢を入力してもらうとき、数字でなければ「数字を入力してください」とエラー表示したいですよね。

そのときは次のように書きます。


age = input("年齢を入力してください:")
if age.isdigit():
    print(f"{age}歳ですね!")
else:
    print("数字だけを入力してください。")

年齢を入力してください:25
25歳ですね!

6. 小数やマイナスの数を判定したい場合の注意点

6. 小数やマイナスの数を判定したい場合の注意点
6. 小数やマイナスの数を判定したい場合の注意点

isdigit()isnumeric()も、小数(例:3.14)やマイナス(例:-5)Falseになります。

そのため、小数や負の数も数値として扱いたい場合は、例外処理を使って数値に変換できるかを調べる方法がおすすめです。


def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

print(is_number("3.14"))   # True
print(is_number("-10"))    # True
print(is_number("abc"))    # False

True
True
False

このようにすれば、小数やマイナスも含めた「数値かどうか」の判定ができます。

まとめ

まとめ
まとめ

Pythonで文字列が数値かどうかを判定する方法について改めて振り返ってみると、isdigit()isnumeric()という二つのメソッドがとても便利であり、それぞれが異なる特徴を持っていることがよくわかります。特に、日常的なプログラムの中でユーザー入力を検証したり、データ処理を正確に行うためには、文字列が数字で構成されているかどうかを素早く判断できる仕組みが欠かせません。Pythonにおける文字列判定の仕組みを理解すると、数字チェックだけでなく、文字列データの扱いがより柔軟になり、最終的にはコード全体の品質向上にもつながります。 また、今回の内容では、isdigit()が半角・全角の数字に対応していること、そしてisnumeric()が漢数字やローマ数字にも対応していることを実例とともに確認しました。特に、漢数字の「一」「二」「三」やローマ数字の「Ⅲ」などが数値として扱われる点は、普段意識していないと見落としがちな部分です。日本語環境や国際化されたアプリケーションを作る際には、この違いを理解しておくことで、より幅広い入力に対応できる堅牢な仕組みを構築できます。 また、数値判定の場面では小数や負の数を扱いたいケースも多くありますが、isdigit()isnumeric()もこれらには対応していません。そのため、例外処理を使ってfloat()への変換を試みる方法が実用的であり、現場でもよく利用されます。たとえば、金額計算や統計処理などでは小数の扱いは避けて通れないため、より柔軟なチェックができる関数をあらかじめ用意しておくと作業がスムーズになります。 さらに、今回のまとめでは、実際のコード例も交えて、どのような状況でどのメソッドを活用すべきかを整理しました。年齢入力のチェックのような基本的なケースから、数値として扱えるかどうかの総合的な判断まで、さまざまな応用が可能であることを理解できたと思います。プログラムを作るときには、見た目では数字に見える文字列でも、実際には全角であったり漢数字であったりすることも多いため、データの性質を正確に判断するための仕組みは重要です。 以下のような簡単なサンプルコードをまとめとして再掲します。実際の開発の中で必要に応じて組み合わせることで、ユーザー入力を丁寧にチェックする仕組みを構築できます。


def check_value(s):
    if s.isdigit():
        return "半角や全角の数字として認識できます。"
    elif s.isnumeric():
        return "漢数字やローマ数字など、数字として扱える文字です。"
    else:
        return "数字ではありません。"

samples = ["123", "123", "三", "Ⅲ", "3.14", "-5"]

for value in samples:
    print(value, ":", check_value(value))

このように、用途に合わせたメソッド選びができるようになると、Pythonでの文字列処理が格段にスムーズになります。文字列としての数字判定は、データ入力チェック、データ解析、Webフォーム処理、スクレイピングしたデータの加工など、さまざまな場面で求められる基本技術です。細かな違いを理解して正しく使い分けることで、バグを減らし、より信頼性の高いコードを書くことができます。 また、文字列の種類やユーザーが入力する値の多様性を考えると、単純な数字チェックだけでなく、入力の背景にある文脈も考慮する必要があります。たとえば、あるシステムでは「三」や「Ⅲ」が許容される場合もありますし、逆に絶対に半角数字のみを許可したいケースもあります。このような要件に応じてメソッドを選択したり、独自の検証ロジックを追加したりすることで、より柔軟なシステムが構築できます。 今回のまとめで触れた内容をもとに、Pythonでの文字列処理の幅を広げ、実務や学習の場面で役立ててみてください。

先生と生徒の振り返り会話

生徒

「先生、今日の内容でisdigit()isnumeric()の違いがやっと理解できました!」

先生

「よかったですね。どちらも数字を判定するメソッドですが、対応している文字の種類が違うので使い分けが大切なんです。」

生徒

「漢数字やローマ数字まで判断できるなんてisnumeric()ってすごいですね。でも小数やマイナスはダメなんですね。」

先生

「そうなんです。その場合は例外処理を使ってfloatに変換できるかどうかを調べる方法が便利なんですよ。」

生徒

「なるほど!それなら数字の種類が多い入力フォームでも安全にチェックできますね。」

先生

「その通り。実際の開発では、こういう細かいチェックが品質に大きく影響します。ぜひ活かしてみてくださいね。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Pythonで文字列が数値かどうかを判定する基本は何を使えばいいの?isdigitとisnumericのどちらを選べばいいの?

まずは文字列のまま数字判定をしたいときに便利なのが文字列メソッドのisdigitとisnumericです。半角数字と全角数字だけを素早く確認したいならisdigit、漢数字やローマ数字など広い意味の数値文字も扱いたいならisnumericという使い分けが分かりやすいです。目的が「数値として計算すること」なら判定後にintやfloatへ変換する前提で考えると手順が整理しやすく、入力チェックと変換処理を分けると読みやすいコードになります。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Python
Pythonのダックタイピングを完全ガイド!初心者でもわかる動的なオブジェクト指向設計
New2
PHP
PHPのmatch文をやさしく解説!初心者でもわかるPHP8の新機能
New3
PHP
PHP のクラス(class)とオブジェクトの基本
New4
Python
Pythonの例外処理を完全理解!初心者でもわかるエラースタックトレースの表示と取得方法
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでエラーメッセージを取得する方法を完全解説!初心者でもわかるExceptionオブジェクト
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.7
Java&Spring記事人気No7
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作