Python 変数が数値かどうかをチェックする

今回は、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')


ここでは、ユーザが入力した変数の型が intfloat かをチェックし、そうであればプログラムを続行します。

そうでない場合は、ユーザが数値以外の変数を入力したことを通知します。

intfloatのように複数の型と比較する場合は、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


これは intfloat の両方に対して動作します。

なぜなら、 intfloat に、 floatint にキャストすることができるからです。

もし、変数がこれらのどちらかであるかだけを調べたい場合は、 type() 関数を使用する必要があります。

結論

Pythonは動的型付け言語なので、期待している型とは異なるデータ型を受け取る可能性があります。

データ型を強制したい場合、変数が目的の型であるかどうかをチェックすることは価値があります。

この記事では、Pythonで変数がNumberかどうかを確認する3つの方法について説明しました。

</class

タイトルとURLをコピーしました