二分法缩减左右边界

两个注意点
1.负数立方根还是负数,可以先转化为正数,最后返回时再加回负号
2.如果目标绝对值 f 小于1,则左边界为 f ,右边界为1;如果目标绝对值 f 大于1,则左边界为1,右边界为 f

class Solution:
    def calCubRoot(self, tar: str)-> float:
        fl = float(tar)
        f = abs(fl)
        if f==float(0) or abs(f)==float(1):
            return (round(f,1))

        #初始化边界和结果变量
        elif abs(f)>1:
            left,right = 1,f
        else:
            left,right = f,1
        res = (right - left)/2+left

        #二分法缩短两边距离
        while round(res**3,5) != round(f,5):
            mid = (right - left)/2+left
            if abs(mid*mid*mid) > abs(f):
                right = mid
            else:
                left = mid
            res = (right - left)/2+left
        
        #加回负号
        return round(res if fl>0 else -res,1)

s = Solution()
print(s.calCubRoot(input()))