4

ユーザー入力からそれがどのタイプかを確認する方法はありますか? そして次のようにします:

if input == str:
   do this
elif input == int:
   do this
else:
   do this
4

5 に答える 5

5

何かのタイプをチェックするために使用できますisinstance-しかし、おそらくこれを行いたくないでしょう...

これは、ユーザーからの入力をどのように取得しているかにも大きく依存します。を使用している場合raw_inputは、常に文字列であり、必要tryな型に変換する必要があります。

try:
   x = int(input):
except ValueError:
   try:
       x = float(input):
   except ValueError:
       print "No recognizable type!"

Python の基本原則の 1 つはダックタイピングです。オブジェクトがアヒルのように見え、アヒルのように聞こえ、アヒルのようなにおいがする場合、それはアヒルです (オブジェクトがどのように見え、においがし、どのように聞こえるかだけを気にする場合)。最終的に、Python では、tryそれが「アヒル」であるかどうかを確認するのが最善です。アヒルでない場合は、例外をキャッチして処理します (方法がわかれば)。isinstanceこれが、人々が自分のコードであまり使用しない主な理由であり、私がそれを使用しないように警告する理由です。

于 2013-02-12T17:54:05.973 に答える
1

キーボード入力を意味する場合、すべての入力は文字列です。ユーザーが「88」のような数値を入力しても、結果は"88"整数ではなく文字列になり88ます。ただし、このパターンを使用して、文字列に数字のみが含まれているかどうかを判断できます。

if input.isdigit():
    print "input is a number"
else:
    print "input is not a number"

さらに良いのは、入力を数値にキャストすることです。これは、コメントに記載されているように、「50.0」や「-10」などの入力を処理します (小数が有効な場合は、ここで int() の代わりに float() または Decimal() を使用します)。 ):

try:
    number = int(input)
except ValueError:
    print "input is not a number"

キーボード入力について言及していない場合は、型をチェックするさまざまな方法がありますが、一般的に最善の方法は、入力を有効であるかのように使用し、有効でない場合に発生する例外をキャッチすることです。このようにして、入力要件をオブジェクトの実際のメソッドと属性の観点から定義し、単なる名目上のクラスではありません (これは「ダック タイピング」です)。

于 2013-02-12T17:55:30.700 に答える
1

http://docs.python.org/2/library/functions.html#isinstanceを使用できますisinstance

isinstance('hello', str)

True を返します

于 2013-02-12T17:55:35.637 に答える
0

を探していると思いますisinstance


あなたは私を打ち負かしましたが、私のものにはリンクが付いています:

http://docs.python.org/2/library/functions.html#isinstance


余談ですが、私は PyCharm IDE をテストしてきましassert isinstance()た。コード内にある場合は自動的に型チェックを行い、自動補完を行います。また、docstring で型引数を指定することもできます。次に、このタイプ情報を使用して、今後のオートコンプリートを支援します。かなり便利...

于 2013-02-12T17:54:13.600 に答える
0

isinstance(input, type)

type組み込み関数でも同じことができますが、isinstance()組み込み関数はオブジェクトの型をテストするために推奨されます。

于 2013-02-12T17:57:37.287 に答える