提问人:Baziga 提问时间:10/10/2023 最后编辑:FriedrichBaziga 更新时间:10/10/2023 访问量:59
While 循环不显示任何输出
While loop does not show any output
问:
请抽出时间回答这个问题。
当我打印以下代码时,我的 while 循环不显示任何输出。
import math
epsilon=.000000001
def mysqrt(a):
while True:
x=a/2
y=(x+a/x)/2
if abs(y-x)<epsilon:
return (y)
def test_square_root():
a=1.0
print ('a'," " , "mysqrt(a)", " ", "math.sqrt(a)", " ", "diff")
while a<10.0:
print (a," " , mysqrt(a), math.sqrt(a),abs(mysqrt(a)-math.sqrt(a)))
a+=1
test_square_root()
目前,我对表格的格式不明确。我只需要以下输出。我使用的是平方根公式 y=(x+a/x)/2
a mysqrt(a) math.sqrt(a) diff
1.0 1.0 1.0 0.0
2.0 1.41421356237 1.41421356237 2.22044604925e-16
3.0 1.73205080757 1.73205080757 0.0
4.0 2.0 2.0 0.0
5.0 2.2360679775 2.2360679775 0.0
6.0 2.44948974278 2.44948974278 0.0
7.0 2.64575131106 2.64575131106 0.0
8.0 2.82842712475 2.82842712475 4.4408920985e-16
9.0 3.0 3.0 0.0
答:
1赞
Mahboob Nur
10/10/2023
#1
我稍微修改了您的代码,代码对我有用
import math
epsilon = 1e-9
def mysqrt(a):
x = a / 2
while True:
y = (x + a / x) / 2
if abs(y - x) < epsilon:
return y
x = y
def test_square_root():
a = 1.0
print('a', 'mysqrt(a)', 'math.sqrt(a)', 'diff')
while a < 10.0:
result = mysqrt(a)
print(a, result, math.sqrt(a), abs(result - math.sqrt(a)))
a += 1
test_square_root()
0赞
Patryk Opiela
10/10/2023
#2
可以肯定的是,mysqrt() 函数有问题。.
import math
epsilon=.000000001
def mysqrt(a):
while True:
x=a/2
y=(x+a/x)/2
if abs(y-x)<epsilon:
return (y)
else:
return("abs(y-x) >= epsilon")
def test_square_root():
a=1.0
print('a', "mysqrt(a)", "math.sqrt(a)", "diff")
while a<10.0:
print(a, mysqrt(a), math.sqrt(a),abs(mysqrt(a)-math.sqrt(a)))
a+=1.0
# test_square_root()
print(mysqrt(1))
尝试修复您的 mysqrt 函数
0赞
Ferret
10/10/2023
#3
让我们说明发生了什么:
- 调用函数 (a)
- 函数 (a) 使用另一个函数 (b) 格式化数据
- 函数 (b) 使用一个没有限制的循环,这意味着如果从未调用返回,它将永远重复。这就是您不打印任何东西的原因
while True
你的代码似乎也不是完全有效的,数学不应该真正被“搜索”,因为几乎总是有一个代数答案。
请说明您到底想做什么,我会尝试以更简单的方式解释它。
评论
0赞
Baziga
10/10/2023
你们能告诉我一件事吗?我的代码现在正在运行。我只是在 mysqrt 函数的末尾添加了 x=y,就像 Mahboob Nur 所做的那样。为什么我的代码在编写 x=y 之前不起作用?x=y在这里有什么意义。Following是我修改后的代码,它正在工作。
0赞
Baziga
10/10/2023
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 def test_square_root(): a=1.0 print ('a',“ , ”mysqrt(a)“, ” “, ”math.sqrt(a)“, ” “, ”diff“) while a<10.0: print (a,” “ , mysqrt(a), math.sqrt(a),abs(mysqrt(a)-math.sqrt(a))) a+=1 test_square_root()
评论
while
x