用户定义的获取绝对值函数
使用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