使用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
使用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
一个刻薄的答案是使用内置__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
一个简单的算法是:
if number<0:
return number*-1
else:
return number
您必须检查该数字是否为负数。是这样,然后将它与 -1 相乘并返回。或者您必须原封不动地返回号码。