有效地检查数字是否在第二个数字的范围内±10%?

2024-10-01 02:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要编写一个函数来检查一个数是否在另一个数的10%范围内。你知道吗

我写了这个函数:

def IsCloseEntough(num1, num2 ):
    percent = num1/100
    if num1-percent < num2 and num2< num1+percent:
       return True;
    else:
       return False;

如果num1-10% of num1 < num2 < num1+10%,则返回True。这解决了这个问题,但是感觉这个代码不是很像Python。有没有办法让它更简单?你知道吗


Tags: andof函数代码falsetruereturnif
3条回答

我认为最清晰的方法非常接近你的功能,只是做了一些改动:

  • 你检查数字是否在1%以内,而不是10%以内
  • 可以使用比较链接
  • 您可以直接返回结果,而不是使用if/else

像这样:

def isCloseEnough(num1, num2):
    return num1 * 0.9 < num2 < num1 * 1.1

PEP 0485引入了^{}函数(它的复杂表亲^{}用于进行此类检查;它还检查特殊值,如NaNInf等。明显的缺点是,据我所知,它只出现在Python 3.5中,还处于婴儿期,所以将来可能会做一些整容手术。你知道吗

基本功能:

math.isclose(1, 1.09, abs_tol=0.1)
Out[20]: True

math.isclose(1.0, 1.2, abs_tol=0.1)
Out[23]: False

math.isclose(1.0, 0.9, abs_tol=0.1)
Out[24]: True

这是一个内置的(因此可以有效地与filter()之类的东西一起使用),用于检查两个数字的接近程度,并允许在尝试寻找近似值时具有更大的灵活性。你知道吗

在内部,它以类似的方式使用abs解决方案,看看^{} source对于您自己,它很可能是最有效的。(可以在^{}找到it python的一个版本)

对于较早版本的Python,您可以使用已经指出的解决方案,或者查看math.isclose()是如何实现的,并从中获得灵感。你知道吗


注意,在大多数情况下应该指定rel_tol,除非处理0附近的值。此外,对于需要评估数组元素的情况,最有效的使用可能是由^{}函数提供的。你知道吗

你能做到的

def IsCloseEnough(num1, num2 ):
     return abs(float(num1 - num2) / float(num1)) < 0.1 

相关问题 更多 >