今回は、Pythonで変数が数値かどうかを確認する例をいくつか紹介します。
Pythonは動的型付けです。
変数の型を宣言する必要はなく、実行時にインタプリタが型を推論します。
variable = 4
another_variable = 'hello'
さらに、変数はいつでも新しい型に代入することができます。
# Assign a numeric value
variable = 4
# Reassign a string value
variable = 'four'
この方法には利点がある一方で、いくつかの問題がある。
つまり、変数を受け取ったとき、それがどの型であるかは通常わからない。
Number を期待していたのに variable
を受け取った場合、それを扱う前にそれが数値であるかどうかを確認したくなるでしょう。
type()関数の使い方
Pythonの type()
関数は、渡した引数の型を返すので、この目的のために便利な関数です。
myNumber = 1
print(type(myNumber))
myFloat = 1.0
print(type(myFloat))
myString = 's'
print(type(myString))
という結果になります。
<class 'int'=""
<class 'float'=""
<class 'str'=""
このように、型を確認する方法としては
myVariable = input('Enter a number')
if type(myVariable) == int or type(myVariable) == float:
# Do something
else:
print('The variable is not a number')
ここでは、ユーザが入力した変数の型が int
か float
かをチェックし、そうであればプログラムを続行します。
そうでない場合は、ユーザが数値以外の変数を入力したことを通知します。
intや
floatのように複数の型と比較する場合は、
type()` 関数を 2 回とも使用しなければならないことに注意してください。
一見問題ないように見える if type(var) == int or float
とだけ記述すると、問題が発生します。
myVariable = 'A string'
if type(myVariable) == int or float:
print('The variable a number')
else:
print('The variable is not a number')
これは、入力に関係なく、以下を返します。
コード偽
これは、Pythonが文の真理値をチェックするためです。
Pythonの変数は、 False
, None
, 0
と []
, {}
, set()
, ()
, ''
や ""
といった空のコンテナ以外は True
として評価することができます。
したがって、 if
条件で or float
と記述した場合は、 or True
と記述した場合と同じで、常に True
と評価されます。
numbers.Number
変数が数字であるかどうかを確認する良い方法は numbers
モジュールです。
変数が Number
クラスのインスタンスであるかどうかは、 isinstance()
関数で確認することができます。
The variable is a number
これは次のような結果になります。
import numbers
variable = 5
print(isinstance(5, numbers.Number))
Note: この方法は、コア Python 以外の数値型では予期せぬ振る舞いをすることがあります。
ある種のフレームワークでは、 Number
ではない数値の実装があるかもしれません。
Try-exceptブロックの使用
変数が数値かどうかを調べるもう一つの方法は、try-except ブロックを使うことです。
try ブロックでは、与えられた変数を int
または float
にキャストします。
tryブロックの実行に成功すると、変数が数値、つまり
intまたは
float` のどちらかであることを意味します。
True
これは int
と float
の両方に対して動作します。
なぜなら、 int
を float
に、 float
を int
にキャストすることができるからです。
もし、変数がこれらのどちらかであるかだけを調べたい場合は、 type()
関数を使用する必要があります。
結論
Pythonは動的型付け言語なので、期待している型とは異なるデータ型を受け取る可能性があります。
データ型を強制したい場合、変数が目的の型であるかどうかをチェックすることは価値があります。
この記事では、Pythonで変数がNumberかどうかを確認する3つの方法について説明しました。
</class