Pythonでは、値や変数には数値型や文字列型があり、文字列を使って数値を表すことはよくあります。
今回は、文字列が数字であるかを判定させる方法について解説します。
文字列が数字であるかを判定する
文字列が数字であるかを判定する
Pythonでは、文字列か数字かを判定するには、組み込み関数である
- isdecimal()
- isdigit()
- isnumeric()
を使うことで判定させることができます。
str.isdecimal()
str.isdecimal() は、1文字以上の文字列があり、すべて10進数数字であれば「True」を返し、それ以外は「False」 を返します。
ただし、全角数字でも10進数数字であれば「True」となります。
str.isdigit()
str.isdigit() は、1文字以上の文字列があるとき、それらがすべて数字なら「True」を返し、それ以外は「False」を返します。
数字については、10進数数字に加えて、上付き数字(2乗を表す)ような文字も「True」を返します。
str.isnumeric()
str.isnumeric() は、1文字以上の文字列があり、すべて数を表す文字であれば「True」を返し、それ以外は「False」を返します。
str.isnumeric() は、str.isdecimal()、str.isdigit()よりも、数値とみなす文字の範囲が大きくなります。
数字に加えて、漢数字などのUnicode文字も「True」を返します。
サンプルコード
サンプルコード
文字列の10進数数字の場合
text = '1234'
print(text.isdecimal())
# 実行結果: True
print(text.isdigit())
# 実行結果: True
print(text.isnumeric())
# 実行結果: True
全角数字で10進数数字の場合
text = '1234'
print(text.isdecimal())
# 実行結果: True
print(text.isdigit())
# 実行結果: True
print(text.isnumeric())
# 実行結果: True
丸付き数字の場合
text = '①②③④'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: True
print(text.isnumeric())
# 実行結果: True
丸付き数字に数字以外の文字が含まれている場合( 例: ピリオド)
text = '①②③.④'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: False
print(text.isnumeric())
# 実行結果: False
漢数字の場合
text = '一二三四'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: False
print(text.isnumeric())
# 実行結果: True
text = '壱弐参四'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: False
print(text.isnumeric())
# 実行結果: True
漢数字で数字以外の文字が含まれている場合( 例: -符号)
text = '-壱弐参四'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: False
print(text.isnumeric())
# 実行結果: False
10進数数字で小数点がある場合
text = '123.4'
print(text.isdecimal())
# 実行結果: False
print(text.isdigit())
# 実行結果: False
print(text.isnumeric())
# 実行結果: False
(符号やピリオドが含まれていると「False」になります。)
符号やピリオドが含まれているときの対処方法
符号やピリオドが含まれているときの対処方法
解説してきました3つの組み込み関数では、文字列に数を表す文字以外が含まれていると「False」となりますが、
数値として認識させるためには、float()に文字列を渡せば、float型である数値型に変換することができます。
text = '123.4'
a = float(text)
print(a)
# 実行結果: 123.4
print(type(a))
# 実行結果: <class 'float'>
text = '-1234'
print(float(text))
# 実行結果: -1234.0
カンマが含まれている場合の対処方法
カンマが含まれている場合の対処方法
float() は、文字列の数字にカンマが含まれていると、ValueErrorとなってしまいます。
数字として扱いたい場合は、str.replace()を使って、カンマを除去してから、float()へ変換することで数値として扱うことができます。
def is_num(t: str) -> bool:
try:
float(t.replace(',', ''))
return True
except ValueError:
return False
text = '1,234'
print(is_num(text))
# 実行結果: True
まとめ: Python 文字列が数字であるかを判定する方法
まとめ: Python 文字列が数字であるかを判定する方法
文字列が数字であるかを判定する
Pythonでは、文字列か数字かを判定するには、組み込み関数である
- isdecimal()
- isdigit()
- isnumeric()
を使うことで判定させることができます。
それぞれ数字とみなす文字の範囲が異なるということを解説しました。
text = '1234'
print(text.isdecimal())
# 実行結果: True
text = '一二三四'
print(text.isnumeric())
# 実行結果: True
text = '①②③④'
print(text.isdigit())
# 実行結果: True