用等分法求完全平方的平方根:
import bisect
def squareRootUsingBisect(num):
return bisect.bisect_left(list(range(0,num)), num, lo=0, hi=num, key=lambda v: v*v)
print(squareRootUsingBisect(169))
正确输出169的平方根:
13
问题是它也打印了一个非完全平方的数字:
print(squareRootUsingBisect(170))
打印
14
是误导。我可以确定bisect
是否确实找到了值,如果没有,打印-1
或null
吗?
bisect_left只给出最近的根。如果你想检查num
是否真的是一个正方形,你必须在之后检查(bisect
没有这样做的选项)
import bisect
def squareRootUsingBisect(num):
n = bisect.bisect_left(list(range(0,num)), num, lo=0, hi=num, key=lambda v: v*v)
return n if n*n == num else -1
print(squareRootUsingBisect(170)) # gives -1
print(squareRootUsingBisect(169)) # gives 13
能否在函数中添加一个if
check
if bisect_calc != num ** 0.5:
return -1