質問
い機能を持っているところ期待の実数は整数または浮)としてその入力がないと思うように検証するこの入力前に、数学的操作します。
私の初めての本能はキャストを入力として浮からtry-exceptブロックです。
try:
myinput = float(input)
except:
raise ValueError("input is not a well-formed number")
かも isinstance(mydata, (float, int, long) )
ものリストを"すべてこの数字が表示されているとき"のように見えるビットinelegant。
何が最もpythonic方法かけているのでしょうか?しおりを付けることができ最大のオンには見逃?
解決
引用から身 どのくらいの入力の検証が必となっていっpythonの機能方法を教えてください。:
計算のように和の要因など、ジャケット内蔵タイプチェックしまいます。計算終了彰呼び出しの追加、ulなどの種類が壊れ、その正しい例外ます。徹底させることにより、ご自身のチェックが無効な作業入力します。
このように、最良のオプションですが、タイプ-チェック。場合の計算に失敗した場合、Pythonの型チェックをくらまえホールにおいて例外ではないので、あなただけの重複コードというより作ることができます。
他のヒント
はPython 2.6と3.0では、数値抽象データ型の型階層は、てきましたあなたがチェックを行うことができるように、の追加など:
>>> import numbers
>>> isValid = isinstance(myinput , numbers.Real)
numbers.Realは、整数または浮動小数点型と一致しますが、いない非数値型、または複素数(そのためnumbers.Complexを使用します)。また、有理数と一致しますが、おそらくあなたは、同様にそれらを含めたいと思います。すなわちます:
>>> [isinstance(x, numbers.Real) for x in [4, 4.5, "some string", 3+2j]]
[True, True, False, False]
残念ながら、これは全てのPython> = 2.6であるので、あなたが2.5またはそれ以前のバージョン用に開発している場合に便利ではありません。
もしかしたら利用できるので、組み合わせ assert
や isinstance
記述です。以下のようなものではないと思いますpythonicすることはできないものとき、例外をスローする場合は必ずご入力しないでください。残念ながら私なりの定義の有効な番号です。もっとよりよいアイデアです。
number = (float, int, long)
assert isinstance(mydata, (float, int, long))
私は質問を得ることはありません。
乱暴に異なる意味を持つ2つのものがあり、「代替」として周りに投げます。
型変換は一つのことです。これは、実際に数値でそのうちのいくつかのオブジェクト、かなり多様なことができ__float__
を、サポートしている任意のオブジェクトで動作します。
try:
myinput = float(input)
except:
raise ValueError("input is not a well-formed number")
# at this point, input may not be numeric at all
# it may, however, have produced a numeric value
型テストは別のものです。これは、クラスの特定のセットの適切なインスタンスであるオブジェクトでのみ動作します。
isinstance(input, (float, int, long) )
# at this point, input is one of a known list of numeric types
ここでfloat
に応答する例のクラスですが、それでも、数値ではありません。
class MyStrangeThing( object ):
def __init__( self, aString ):
# Some fancy parsing
def __float__( self ):
# extract some numeric value from my thing
質問「実数(整数または浮動小数点数のいずれか)」は、一般的には無関係です。多くのものは、「数値」であり、数値演算で使用することができるが、int型または浮動小数点数ではありません。たとえば、あなたがダウンロードまたは有理数パッケージを作成している場合があります。
あなたには、いくつかのタイプでは動作しませんアルゴリズムを持っていない限り、overvalidating入力にはポイントは、ありません。これらはまれであるが、いくつかの計算は、彼らが整数の除算および剰余演算を行うことができ、具体的ので、整数が必要です。人のために、あなたはあなたの値がint型であることを主張したい場合があります。