Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
生徒
「Pythonで、文字列が数字かどうかを調べたいんですけど、どうすればいいですか?」
先生
「それならisdigit()やisnumeric()というメソッドを使うのが便利ですよ。」
生徒
「似ている名前ですね。何が違うんですか?」
先生
「どちらも“文字列が数値かどうか”を調べますが、少しだけ違いがあります。わかりやすく順番に説明していきましょう。」
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()メソッドの特徴
isdigit()は、「0〜9の数字だけで構成されているか」を判定するメソッドです。
つまり、文字列の中に「0〜9」以外の文字があるとFalseになります。
print("123".isdigit()) # True
print("123".isdigit()) # True(全角数字もOK)
print("123a".isdigit()) # False
True
True
False
半角の数字だけでなく、全角の数字(123など)もOKです。
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()の違いまとめ
どちらも数字だけで構成されているかを調べるメソッドですが、対応している文字に違いがあります。
| 文字列 | isdigit() | isnumeric() |
|---|---|---|
| "123" | 〇 | 〇 |
| "123"(全角) | 〇 | 〇 |
| "三"(漢数字) | × | 〇 |
| "Ⅲ"(ローマ数字) | × | 〇 |
| "123.45" | × | × |
| "-100" | × | × |
漢数字やローマ数字を含む文字列を「数字」として扱いたい場合はisnumeric()を使いましょう。
5. 数字として使いたい場合の実用例
例えば、ユーザーから年齢を入力してもらうとき、数字でなければ「数字を入力してください」とエラー表示したいですよね。
そのときは次のように書きます。
age = input("年齢を入力してください:")
if age.isdigit():
print(f"{age}歳ですね!")
else:
print("数字だけを入力してください。")
年齢を入力してください:25
25歳ですね!
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に変換できるかどうかを調べる方法が便利なんですよ。」
生徒
「なるほど!それなら数字の種類が多い入力フォームでも安全にチェックできますね。」
先生
「その通り。実際の開発では、こういう細かいチェックが品質に大きく影響します。ぜひ活かしてみてくださいね。」