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.absabs

您还应该使用该isinstance()函数进行类型检查,而不是使用type()和比较,例如:

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

请注意,您可能还希望包含longcomplex作为有效的数字类型

于 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 指出的问题,long并且complex不会被考虑。这个例子使用“鸭子打字”(如果它像鸭子一样走路和像鸭子一样嘎嘎,那它一定是鸭子)。如果abs有效,则您的功能成功。如果您提供的东西abs不知道如何处理,ValueError则会引发它,它将返回您的错误消息。

于 2013-05-31T18:47:03.240 回答
0

现在对于完全不同的东西,这里有一个表达式:

(-num, num)[num > 0] if None < num < '' else "Not a number!"
于 2013-05-31T19:12:28.457 回答
0

试试看嘛:

print(str(abs(4)))

呃,我不能让这个更短。

以下是可用的数学函数:http
://docs.python.org/2/library/math.html 以下是 无需导入即可直接调用的内置函数:http: //docs.python.org/ 2/库/functions.html

于 2013-05-31T18:04:53.080 回答
0

python 数学模块没有 abs 函数,因为此功能由基本 Python 提供。但是,查看此处的 python 数学文档页面,您可以看到它们实际上具有 fabs 函数。也就是说,您可以根据您希望使用数学模块与基本 python 的程度将代码更改为以下任一:

print str(abs(4))

或者

import math
print str(math.fabs(4))
于 2013-05-31T18:48:01.097 回答