用于获取绝对值的用户定义函数
Posted
技术标签:
【中文标题】用于获取绝对值的用户定义函数【英文标题】:User defined function for getting absolute value [closed] 【发布时间】:2014-08-16 05:45:24 【问题描述】:使用 Wing ide 3.3.5
如果不使用 Python 中内置的 abs 函数,我将如何编写一个返回其 x 的绝对值的函数 my_abs(value)。
例如:
Test Result
print(my_abs(3.5)) 3.5
print(my_abs(-7.0)) 7.0
【问题讨论】:
IDE 可能如何相关?你明白abs
是做什么的吗?
【参考方案1】:
一个刻薄的答案是使用内置的__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
事实证明testing for negative zero in 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
【讨论】:
+1 表示__abs__()
尽管关于负零的讨论也很有趣。
我认为你不需要str(num)
,想想math.copysign(1, num)
。还是和__abs__
一样作弊?
@JasonS 我喜欢这样。并入第 2 版。【参考方案2】:
一个简单的算法是:
if number<0:
return number*-1
else:
return number
您必须检查该数字是否为负数。是这样,然后将它与 -1 相乘并返回。或者你必须原封不动地返回号码。
【讨论】:
以上是关于用于获取绝对值的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章