1

仕事:

  1. 1 つのパラメーターを使用して関数を定義しdistance_from_zeroます。
  2. その関数に次のことをさせます。
    • 受け取った入力のタイプを確認してください。
    • タイプがintまたはの場合float、関数は関数入力の絶対値を返す必要があります。
    • 型が他の型の場合、関数は返す必要があります"Not an integer or float!"

うまくいかない私の答え:

def distance_from_zero(d):
    if type(d) == int or float:
        return abs(d)
    else:
        return "Not an integer or float!"
4

6 に答える 6

8

isinstanceではなく、ここで使用する必要がありますtype

def distance_from_zero(d):
    if isinstance(d, (int, float)):
        return abs(d)
    else:
        return "Not an integer or float!"

iftype(d) == int or floatは常にTrue評価されるとおりfloatになり、True値です。

>>> bool(float)
True

ヘルプisinstance:

>>> print isinstance.__doc__
isinstance(object, class-or-type-or-tuple) -> bool

Return whether an object is an instance of a class or of a subclass thereof.
With a type as second argument, return whether that is the object's type.
The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
isinstance(x, A) or isinstance(x, B) or ... (etc.).

関連 : Python でオブジェクトの型を比較す​​るには?

于 2013-05-30T14:05:33.977 に答える
7

タイプチェックは

if isinstance(d, int) or isinstance(d, float):

短縮できるもの

if isinstance(d, (int, float))

現在のコードがテストしているのは

(type(d) == int) or float

または、言い換えれば、「のタイプがdis int、またはfloattrue のいずれか」です。技術的な理由から、この式全体は常に true です。プログラミング言語の論理式は、自然言語よりも少し正確に指定する必要があります。

于 2013-05-30T14:05:50.577 に答える
1

この種の「自然言語ベースの論理連結」は使用できません。つまり、論理条件の一部を明示的に記述する必要があるということです。

if type(d) == int or type(d) == float

このようにして、それ自体を表す 2 つの比較がif type(d) == int得られtype(d) == floatます。この結果は、or-operator と組み合わせることができます。

于 2013-05-30T14:05:47.327 に答える
0

プログラミングでは、if ステートメントは平易な言語のようには機能しません。のようなことを言いたい場合は、次のようThis fruit is an apple or an orangeにプログラムする必要があります。

if type(fruit) == Apple or type(fruit) == Orange

サブクラス化を適切に説明するため、問題により具体的には、isinstance()の代わりに使用したいと考えています。詳細については、この回答を参照してください。type()isinstance()

したがって、次のような結果になるはずです

def distance_from_zero(d):
    if isinstance(d, int) or isinstance(d, float):
        return abs(d)
    else:
        return "Not an integer or float!"
于 2013-05-30T14:06:35.687 に答える
0

あなたが犯している間違いは、英語のショートフォームを少し使いすぎていることです.

if type(d) == int or float:

これは、タイプが isintまたはfloatisTrueであるかどうかを確認することを意味しますが、これは必要なものではありません。

if type(d) == int or type(d) == float:

これにより、必要な結果が得られます。

于 2018-01-25T13:38:44.047 に答える
0

正しいコードは次のとおりです。

def distance_from_zero(d):
        if type(d) in (int, float):
                return abs(d)
        else:
                return "Not an integer or float!"

print distance_from_zero(3)
print distance_from_zero(-5.4)
print distance_from_zero("abc")

出力:

3
5.4
Not an integer or float!

インデントに注意してください。Python では、他の言語と比較して非常に重要です。

于 2013-05-30T14:09:39.340 に答える