我是Python和stackoverflow的新手。我一直在尝试为平方根近似解Pyschools的“ while循环”示例(主题5:问题9)。但是,我无法获得所需的输出。我不确定此问题是否与循环或公式有关。这是问题:
创建一个接受正数并返回2的函数
整数,使得数字介于2的平方之间
整数。如果数字是一个平方,则它将返回两次相同的整数
整数
例子:
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 == 0
但i > 0
),因此maxsq
永远不会移到0以上。另一方面,while循环中的第一个条件将按预期更新minsq
。我建议完全忘记
minsq
和maxsq
。让循环简单地是:while i*i <= num:
i += 1 #shortcut for i = i + 1
执行完循环后,一个包含
i-1
的简单测试就足以确定要返回的内容。