15

こんにちは、これは、入力された整数または浮動小数点数の絶対値を返す関数を作成することになっているコードです。何が問題なのかわからないようです。ここにコードとエラーがあります。どんな助けでも大歓迎です!

関数のコードは次のとおりです。

import math
def distance_from_zero(num):
    type_entry = type(num)
    if type_entry == int:
        return math.abs(num)
    elif type_entry == float:
        return math.abs(num)
    else:
        return "Not an integer or float!"

ここで、結果を出力してコードをテストしました

print distance_from_zero(4)

これが発生するエラーです

Traceback (most recent call last):
  File "python", line 12, in <module>
  File "python", line 5, in distance_from_zero
AttributeError: 'module' object has no attribute 'abs'
4

5 に答える 5

26

abs()は組み込み関数なので、出現するすべての を に置き換えるだけmath.absですabs

使用して比較isinstance()する代わりに、型チェックにも関数を使用する必要があります。次に例を示します。type()

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

longおよびcomplexを有効な数値型として含めることもできます。

于 2013-05-31T18:04:35.723 に答える
2

他の人が指摘したように、abs組み込みなので、mathモジュールからインポートされません。

あなたの型チェックについてコメントしたかったのです。最も「pythonic」な別の方法は、try: except:ブロックを使用して型をチェックすることです。

def distance_from_zero(num):
    try:
        return abs(num)
    except ValueError:
        return "Not an numeric type!"

これにより、FJ が指摘した問題が処理され、考慮さlongcomplexません。この例では、「アヒルのタイピング」を使用しています (アヒルのように歩き、アヒルのように鳴く場合、それはアヒルに違いありません)。機能する場合abs、関数は成功します。abs処理方法がわからないものValueErrorを指定すると、エラー メッセージが返されます。

于 2013-05-31T18:47:03.240 に答える
0

この機能は基本的な Python によって提供されるため、python math モジュールには abs 関数がありません。ただし、ここの python math のドキュメント ページを見ると、実際に fabs 関数があることがわかります。そうは言っても、数学モジュールと基本的な python をどれだけ使いたいかに応じて、コードを次のいずれかに変更できます。

print str(abs(4))

また

import math
print str(math.fabs(4))
于 2013-05-31T18:48:01.097 に答える
0

ちょうど試して:

print(str(abs(4)))

ええと、これ以上短くすることはできません。

数学の利用可能な関数は次のとおりです: http://docs.python.org/2/library/math.html
そして、インポートせずに直接呼び出すことができる組み込み関数は次のとおりです: http://docs.python.org/ 2/library/functions.html

于 2013-05-31T18:04:53.080 に答える