用户定义的获取绝对值函数

2 投票
2 回答
6112 浏览
提问于 2025-04-18 17:29

使用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

2 个回答

1

一个简单的算法可以这样写:

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

你需要检查这个数字是不是负数。如果是负数,就把它乘以-1,然后返回这个结果。否则,就直接返回这个数字,不做任何改变。

4

一个带点讽刺的回答是直接使用内置的 __abs__() 函数:

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

这里有一个简单的一行代码(基本上和 @Nabin 的回答是一样的):

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

不过,结果发现这里有个bug,因为

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

撰写回答