有没有办法在Python中提取数字的符号?

inn6fuwd  于 2023-10-14  发布在  Python
关注(0)|答案(5)|浏览(112)

我正在用Python编写博尔扎诺的算法。这是我现在的代码:

def Bolzano(fonction, a, b, tol=0.000001):
   while abs(b-a)>tol:
       m=(a+b)/2
       if cmp(fonction(m))==cmp(fonction(a)):
           a=m
       else:
           b=m
   return a, b

它一直工作,直到遇到它无法识别的cmp。然而,我没有看到其他的方法,因为Python没有符号函数。还有其他方法可以提取数字的符号吗?

vbopmzt1

vbopmzt11#

还有其他方法可以提取数字的符号吗?
写你自己的怎么样?

执行情况

def sign(num):
    return -1 if num < 0 else 1

示例

>>> sign(10)
1
>>> sign(-10)
-1

Ohh和cmp是一个内置的,需要两个参数(数字),并简单地比较它们,并检查其中哪个更大。你应该按如下方式使用它

def Bolzano(fonction, a, b, tol=0.000001):
   while abs(b-a)>tol:
       m=(a+b)/2
       if cmp(fonction(m), fonction(a)) == 0:
           a=m
       else:
           b=m
   return a, b
slmsl1lt

slmsl1lt2#

可能用途:

if cmp(fonction(m),fonction(a)) == 0:
lhcgjxsq

lhcgjxsq3#

def same_sign(a, b):
    return (a * b) >= 0

示例如下:

>>> same_sign(3, 4)
True

>>> same_sign(-3, 4)
False

>>> same_sign(3, -4)
False

>>> same_sign(-3, -4)
True

>>> same_sign(-3, 0)
True
s3fp2yjn

s3fp2yjn4#

我可以想到一个简单的解决办法:a//abs(a)
如果大于0,则返回1,如果小于0,则返回-1,但您可能会面临被0整除的风险,因此可能不是一个很好的解决方案。

e4eetjau

e4eetjau5#

基于Shon_Shon的响应,这是一个不会引发ZeroDivisionError的版本:

int(x/abs(x)) if x != 0 else 0

相关问题