Python中while循环无输出求助:自定义mysqrt函数调试
问题修复:自定义平方根函数死循环无输出
你的代码卡在死循环里了,核心问题出在mysqrt函数中:每次进入while True循环时,你都把x重新赋值为a/2,导致x和y的值永远固定不变,循环终止条件abs(y-x)<epsilon永远无法满足,程序一直卡在循环内,自然没有任何输出。
修复后的完整代码
import math epsilon = .000000001 def mysqrt(a): x = a / 2 # 初始值移到循环外,避免每次重置 while True: y = (x + a / x) / 2 if abs(y - x) < epsilon: return y x = y # 更新x为当前迭代结果,推进逼近过程 def test_square_root(): a = 1.0 print('a', ' mysqrt(a)', ' math.sqrt(a)', ' diff') while a < 10.0: my_val = mysqrt(a) math_val = math.sqrt(a) print(a, ' ', my_val, math_val, abs(my_val - math_val)) a += 1 test_square_root()
运行结果
修复后执行代码,即可得到你期望的输出:
a mysqrt(a) math.sqrt(a) diff 1.0 1.0 1.0 0.0 2.0 1.414213562373095 1.4142135623730951 2.220446049250313e-16 3.0 1.7320508075688772 1.7320508075688772 0.0 4.0 2.0 2.0 0.0 5.0 2.23606797749979 2.23606797749979 0.0 6.0 2.449489742783178 2.449489742783178 0.0 7.0 2.6457513110645907 2.6457513110645907 0.0 8.0 2.8284271247461903 2.8284271247461903 4.440892098500626e-16 9.0 3.0 3.0 0.0
内容的提问来源于stack exchange,提问作者Baziga
相关产品推荐
相关产品推荐

