5

NumPy を使用して、ユーザー入力が数値かどうかを確認しようとしています。私は使用してみました:

import numpy as np

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

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

それ自体では t は正常に動作しますが、この場合のように関数に埋め込むと:

import numpy as np

def test_this(a):   
    if np.isnan(a):
        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)

それからNotImplementationError、このタイプには実装されていないと言っていますが、これがどのように機能していないのか誰か説明できますか?

4

3 に答える 3

11

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

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

例:

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

@JFセバスチャンが指摘したように、

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

または、より明確にraw_inputするために、文字列を渡します。これは、に送信さevalれると、入力文字列自体ではなく、入力の値を持つコマンドであるかのように評価され、扱われます。

于 2011-12-14T16:13:28.080 に答える
2

ユーザー入力が Python で有効な数値かどうかをチェックする最も包括的な方法の 1 つは、それを float 値に変換して例外をキャッチしようとすることです。

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

def check_if_numeric(a):
   try:
       float(a)
   except ValueError:
       return False
   return True
于 2011-12-14T16:17:50.653 に答える
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,)
于 2011-12-14T16:14:18.947 に答える