非常有意思的一道题,我这里还是用到了一个库函数math.floor,因为range里必须要是整形,以目前的知识暂时想到这样做。
然后解题就是,先找出整数部分介于哪两个整数之间,然后找小数点第一位,然后检查小数点第二位。
有几个关键记录一下,一个是输入的浮点数在哪个区间(负无穷,-1】,(-1,0),0,(0,1),【1,正无穷),这几个对应着不同的对输入值的预处理。然后就是函数里面分级比较,如果到9还是没比完说明要进一。

import math

while True:
    try:
        num1 = float(input())

        def cuberoot(n):
            flag = 0
            for i in range(0,math.floor(n)):
                if(i ** 3 > n):
                    k = i - 1
                    flag = 1
                    break
                if(i ** 3 == n):
                    return i
                    break

            if(flag == 1):
                for i in range(10):
                    if((k+i*0.1)**3 > n):
                        k = k+(i-1)*0.1
                        flag = 2
                        break
                    elif((k+i*0.1)**3 == n):
                        return (k+i*0.1)
                        break
                if(i == 9):
                    k = k+0.9
                    flag = 2

            if(flag == 2):
                flag1 = 0
                for i in range(10):
                    if((k+i*0.01)**3 >= n):
                        if(i >= 5):
                            return (k+0.1)
                            break
                        else:
                            return k
                            break
                        flag1 = 1
                    if(flag1 == 0 and i == 9):
                        return(k+0.1)

        flag = 0
        k = 0
        if(num1 >= 1):
            res_num1 = cuberoot(num1)
            print('%0.1f'%res_num1)
        elif(num1 <= -1):
            num2 = -num1
            res_num2 = cuberoot(num2)
            print('-%0.1f'%res_num2)
        elif(num1 > 0 and num1 < 1):
            k = 0
            while(num1 < 1):
                num1 = num1 * 1000
                k += 1
                if(num1 > 1):
                    break
            res_num3 = cuberoot(num1)
            for j in range(k):
                res_num3 = res_num3 / 10
            print('%0.1f'%res_num3)
        elif(num1 > -1 and num1 < 0):
            num4 = -num1
            k = 0
            while(num4 < 1):
                num4 = num4 * 1000
                k += 1
                if(num1 > 1):
                    break
            res_num4 = cuberoot(num4)
            for j in range(k):
                res_num4 = res_num4 / 10
            print('-%0.1f'%res_num4)
        else:
            print(0.0)
    except:
        break