While 循环不显示任何输出

While loop does not show any output

提问人:Baziga 提问时间:10/10/2023 最后编辑:FriedrichBaziga 更新时间:10/10/2023 访问量:59

问:

请抽出时间回答这个问题。

当我打印以下代码时,我的 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
python 函数 while-loop 返回 sqrt

评论

0赞 CherryDT 10/10/2023
一步一步地执行它,看看它有什么作用。你会注意到你的循环是无限的,因为它的变量永远不会改变。while
0赞 kiner_shah 10/10/2023
你用的是什么公式?
0赞 ekhumoro 10/10/2023
while 循环永远不会更改 的值,因此它将永远执行相同的计算。该算法的工作原理是计算当前结果与上一个结果之间的差异;如果差值小于阈值 (epsilon),则循环应终止 - 但您的代码不会保存上一个结果,因此这永远不会发生。x

答:

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()

My Console Output

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

让我们说明发生了什么:

  1. 调用函数 (a)
  2. 函数 (a) 使用另一个函数 (b) 格式化数据
  3. 函数 (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()