Python不使用幂运算符求立方根:输出立方不大于输入的最大整数
代码修正方案
原代码核心问题
- 违反需求使用了幂运算符
**,且浮点数开立方存在精度误差,导致1000的计算结果错误 - 函数内部已执行打印逻辑,外部调用时额外加了
print(),导致每次输出多出一行返回值 - 没有区分完全立方和非完全立方的输出分支,格式和要求不匹配
修正后代码
def cubic_root(n): sign = 1 if n < 0: sign = -1 n = abs(n) # 用循环找立方值<=n的最大整数,全程不使用幂运算符 max_int = 0 while (max_int + 1) * (max_int + 1) * (max_int + 1) <= n: max_int += 1 actual_cube = max_int * max_int * max_int diff = n - actual_cube # 按要求格式输出 if diff == 0: print(f"{max_int * sign}, exact!") else: print(f"{max_int * sign},not exact with difference {diff}") return max_int * sign # 直接调用即可,无需额外加print cubic_root(99) cubic_root(2000) cubic_root(1000)
运行输出
完全匹配要求的结果:
4,not exact with difference 35 12,not exact with difference 272 10, exact!
内容的提问来源于stack exchange,提问作者Jana Sayegh
相关产品推荐
相关产品推荐

