我是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)
。
有人可以让我知道我做错了什么吗?提前谢谢。
答案 0 :(得分:1)
这就是为什么你的代码能够做到的:
执行第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
为假(因为maxsq == 0
但是i > 0
)因此maxsq
永远不会超过0。另一方面,第一个条件是while循环不断按预期更新minsq
。
我建议完全忘记minsq
和maxsq
。循环只是:
while i*i <= num:
i += 1 #shortcut for i = i + 1
当循环完成执行时,涉及i-1
的简单测试足以确定返回的内容。