Python化简根式时出现math domain error问题求助
问题分析与解决
报错原因
- 无限循环导致数值变为负数:
while True是无终止条件的循环,只要没触发打印分支,就会持续将radical减1,最终数值会变成负数。而math.sqrt()不支持负数参数,直接抛出ValueError: math domain error。 - 整数判断逻辑错误:
math.sqrt()返回的是浮点数类型,哪怕是完全平方数的平方根(比如math.sqrt(4)返回2.0),也不是int类型,所以isinstance(rad_root, int)永远为False,永远不会进入打印分支,只会一直递减数值。
修复后的代码
import math def closest_perfect_square(radical): # 处理负数输入 if radical < 0: print("输入不能为负数") return while radical >= 0: rad_root = math.sqrt(radical) # 判断浮点数是否为整数 if rad_root == int(rad_root): print(int(rad_root)) return # 找到结果后终止函数 radical -= 1 print(0) closest_perfect_square(60)
关键修改说明
- 给循环添加
radical >= 0的条件,避免数值变为负数。 - 更换整数判断逻辑:将平方根与其取整后的值比较,相等则说明是完全平方数的平方根。
- 找到目标结果后用
return终止函数,避免不必要的循环。 - 增加负数输入的判断与提示,提升鲁棒性。
内容的提问来源于stack exchange,提问作者vondeehair
相关产品推荐
相关产品推荐

