我正在撰寫代碼來列印平方根表。但它不會回圈。我需要它回圈。
import math
def test_sqrt():
a = 1
def my_sqrt(a):
while True:
x = 1
y = (x a/x) / 2.0
if y == x:
return y
while(a < 26):
print('a = ' str(a) ' | my_sqrt(a) = ' str(my_sqrt(a)) ' | math.sqrt(a) = ' str(math.sqrt(a)) ' | diff = ' str(my_sqrt(a) - math.sqrt(a)))
a = a 1
test_sqrt()
uj5u.com熱心網友回復:
你快到了:
import math
def test_sqrt():
a = 1
err = 1e-6
def my_sqrt(a):
x=1
while True:
y = (x a/x) / 2.0
if abs(y-x)<err:
return y
x = y
while(a < 26):
print('a = ' str(a) ' | my_sqrt(a) = ' str(my_sqrt(a)) ' | math.sqrt(a) = ' str(math.sqrt(a)) ' | diff = ' str(my_sqrt(a) - math.sqrt(a)))
a = a 1
test_sqrt()
筆記:
- x的初始值是在開始時定義的,而不是每個回圈
- x 的值需要在每個回圈中更新,如果我們還沒有從函式回傳
- 繼續計算直到它足夠接近,絕對差小于
err
uj5u.com熱心網友回復:
原因是當 a=2 時,python 將進入無限回圈。這可以通過除錯器檢查。
uj5u.com熱心網友回復:
因為你在你的my_sqrt(a)函式中構建了一個無限的while回圈:
def my_sqrt(a):
while True:
x = 1
y = (x a/x) / 2.0
if y == x:
return y
在第二次運行時,你有 y != x (不相等),因此在無限回圈中 y 或 x 沒有變化,回圈永遠不會通過到達return y.
這樣,回圈:
while(a < 26):
print('a = ' str(a) ' | my_sqrt(a) = ' str(my_sqrt(a)) ' | math.sqrt(a) = ' str(math.sqrt(a)) ' | diff = ' str(my_sqrt(a) - math.sqrt(a)))
a = a 1
運行一次,然后my_sqrt(a)當 a = 2 時卡在函式的第二次迭代中。
uj5u.com熱心網友回復:
a = 2當你打電話時,你陷入了一個無限回圈my_sqrt(2):
my_sqrt(2):
x = 1
y = (x a/x) / 2.0 = 1.5
由于所有變數x,a和y在該背景關系中都是常量,因此if y == x:從不使用該條件。while True:因此,您將永遠陷入困境。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434685.html
上一篇:可以用“while”回圈完成的所有事情都可以用“for”回圈完成,反之亦然?[復制]
下一篇:如何運行以測驗數字是否為2的冪?
