Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
生徒
「Pythonで、文字列が数字かどうかを調べたいんですけど、どうすればいいですか?」
先生
「それならisdigit()
やisnumeric()
というメソッドを使うのが便利ですよ。」
生徒
「似ている名前ですね。何が違うんですか?」
先生
「どちらも“文字列が数値かどうか”を調べますが、少しだけ違いがあります。わかりやすく順番に説明していきましょう。」
1. Pythonで文字列が数字かどうかを判定する方法とは?
Pythonで文字列が数値かどうかを調べたいときは、isdigit()
やisnumeric()
という文字列メソッドを使います。
文字列メソッドとは、文字列(str型)に使える特別な関数のことです。
次のように使います。
text = "123"
print(text.isdigit()) # True
print(text.isnumeric()) # True
True
True
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
このようにすれば、小数やマイナスも含めた「数値かどうか」の判定ができます。