1

使用Wing ide 3.3.5

我将如何编写一个函数 my_abs(value) 来返回其 x 的绝对值,而不使用 Python 中的内置 abs 函数。

例如:

Test                Result
print(my_abs(3.5))  3.5
print(my_abs(-7.0)) 7.0
4

2 回答 2

4

一个刻薄的答案是使用内置__abs__()函数:

>>> print((-7.0).__abs__())
7.0

这是一个天真的单线(基本上相当于@Nabin的答案):

def simple_abs(num):
    return -num if num < 0 else num

然而,事实证明有一个错误,因为

>>> -0.0 < 0
False
>>> simple_abs(-0.0)
-0.0                        ← Buggy
>>> abs(-0.0)
0.0                         ← Correct

事实证明,在 Python 中测试负零是很困难的。一种可能的测试是str(-0.0) == '-0.0'。这是@JasonS 帮助我想出的:

import math

def my_abs(num):
    return -num if math.copysign(1, num) < 0 else num

或者,以更长、更易读的形式:

def my_abs(num):
    if math.copysign(1, num) < 0:
        return -num
    else:
        return num
于 2014-08-16T07:05:00.260 回答
1

一个简单的算法是:

if number<0:
    return number*-1
else:
    return number

您必须检查该数字是否为负数。是这样,然后将它与 -1 相乘并返回。或者您必须原封不动地返回号码。

于 2014-08-16T05:48:14.187 回答