2011-12-14 9 views
5

私は、ユーザー入力が数値であるかどうかを確認するためにnumpyのを使用しようとしている、私が使用して試してみた:それ自身でnumpyの - ISNAN使う(x)の

from numpy import * 

a = input("\n\nInsert A: ") 

if isnan(a) == True: 
    print 'Not a number...' 
else: 
    print "Yep,that's a number" 

をし、それが正常に動作します、しかし、I

def test_this(a): 

    if isnan(a) == True: 
     print '\n\nThis is not an accepted type of input for A\n\n' 
     raise ValueError 
    else: 
     print "Yep,that's a number" 

a = input("\n\nInsert A: ") 

test_this(a) 

* numpyのインポートから

その後、私は誰もが、これは動作しない方法を説明することができ、それはこのタイプのために実装されていないと言ってNotImplementationErrorを取得:など、この場合のように関数にそれを埋め込みますか?

ご協力いただければ幸いです。

+2

は、テストするためにあなたの目的か? –

+0

@SvenMarnachはい、私は単純に: タイプ(a)!= intまたはタイプ(a)!=浮動小数点: –

+3

の場合は、1を避けることをお勧めします。 'from numpy import *'を避け、 'numpy np'とし、後で 'np.isnan()'などを使用します。 2. 'True 'と比較しないで' if np.isnan(a) 'を直接使用します。 3. 'input()'は 'eval(raw_input(prompt))'を実行します。これはおそらくあなたが望むものではありません。 – jfs

答えて

11

"Not a Number"または "NaN"は、IEEE-754規格に準拠した特別な種類の浮動小数点値です。 numpy.isnan()math.isnan()関数は、与えられた浮動小数点数がこの特別な値(またはいくつかの "NaN"値の1つ)を持つかどうかをテストします。これらの関数の1つに浮動小数点数以外のものを渡すと、結果はTypeErrorになります。

入力チェックを行うには、input()を使用しないでください。代わりにraw_input(),try:を使用して、返された文字列をfloatに変換し、失敗した場合はエラーを処理します。

例:@ J.Fとして

def input_float(prompt): 
    while True: 
     s = raw_input(prompt) 
     try: 
      return float(s) 
     except ValueError: 
      print "Please enter a valid floating point number." 

。セバスチャンは、指摘

input()eval(raw_input(prompt))を行い、それはあなたが望むものをおそらくではありません。

以上明確にするためには、一度evalに送信文字列に沿ったraw_inputパスが評価され、それは入力の値ではなく、入力文字列自体とコマンドであったかのように扱われます。ユーザー入力がPythonで有効な数値がfloat値に変換し、例外をキャッチしようとしているかどうかをチェックするのほとんど網羅方法の

0
a = raw_input("\n\nInsert A: ") 

try: f = float(a) 
except ValueError: 
    print "%r is not a number" % (a,) 
else: 
    print "%r is a number" % (a,) 
2

一つ。

コメントやその他の回答に示されているように、NaNのチェックでは、有効なユーザー数値入力とは関係ありません。数値オブジェクトが特別な値でないかどうかを確認します。

def check_if_numeric(a): 
    try: 
     float(a) 
    except ValueError: 
     return False 
    return True 
0

あなたは直接入力の種類を確認することができます。ユーザーが入力した値が有効な数値であれば

a = input("\n\nInsert A: ") 
num_types = ("int", "float", "long", "complex") 

if type(a).__name__ in num_types 
    print "Yep,that's a number"  
else: 
    print '\n\nThis is not an accepted type of input for A\n\n' 
    raise ValueError 
関連する問題