gpt4 book ai didi

python - pyschools 平方根近似

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:25 24 4
gpt4 key购买 nike

我是 Python 和 stackoverflow 的新手。我一直在尝试解决 Pyschools 的平方根近似的“while 循环”示例(主题 5:问题 9)。但是我无法获得所需的输出。我不确定这个问题是否与循环或公式有关。问题如下:

Create a function that takes in a positive number and return 2 integers such that the number is between the squares of the 2 integers. It returns the same integer twice if the number is a square of an integer.


示例:

sqApprox(2)
(1, 2)
sqApprox(4)
(2, 2)
sqApprox(5.1)
(2, 3)

这是我的代码:

<小时/>
def sqApprox(num):
i = 0
minsq = 1 # set lower bound
maxsq = minsq # set upper bound
while i*i<=num: # set 'while' termination condition
if i*i<=num and i >=minsq: # complete inequality condition
minsq = i
if i*i<=num and i <=maxsq: # complete inequality condition
maxsq = i
i=i+1 # update i so that 'while' will terminate
return (minsq, maxsq)
<小时/>

如果我创建此函数 sqApprox(4) 并在 IDE 上调用它,我会得到输出 (2, 0)

有人可以让我知道我做错了什么吗?提前致谢。

最佳答案

这就是您的代码执行其操作的原因:

行后maxsq = minsq执行后,这两个值都是 1。

当我们进入循环时

while i*i<=num:                     # set 'while' termination condition
if i*i<=num and i >=minsq: # complete inequality condition
minsq = i
if i*i<=num and i <=maxsq: # complete inequality condition
maxsq = i
i=i+1 # update i so that 'while' will terminate

首先注意循环内部 i*i<=num ,因此无需重新测试。因此它相当于:

 while i*i<=num: 
if i >=minsq:
minsq = i
if i <=maxsq:
maxsq = i
i=i+1

在第一次循环中i == 0但是maxsq == 1 ,使第二个条件成立,因此设置 maxsq等于 i 的当前值,即 0。在随后的循环中,i <= maxsq是 false (因为 maxsq == 0i > 0 )因此 maxsq永远不会超过 0。另一方面,while 循环中的第一个条件不断更新 minsq正如预期的那样。

我建议忘记两者 minsqmaxsq完全地。让循环简单地是:

while i*i <= num:
i += 1 #shortcut for i = i + 1

循环执行完毕后,进行一个简单的测试,涉及 i-1足以确定返回什么。

关于python - pyschools 平方根近似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com