Python 的最近平方函数 - 为什么我的解决方案不正确

Nearest Square Function with Python - why is my solution is incorrect

我被告知 post 一个新问题 - 请参考 post :Nearest Square Function with Python

objective 是找到距离 limit = 40 最近的最大正方形。

我想出了一个解决方案,但我不明白为什么这不起作用。正确的结果是打印最多 36 个数字,不超过 40 个。

limit = 40 #given limit by quiz 
num=0 #set point by me 
square=num*num #this is what a square means #it could also be said of num**2 

while square<limit:
    square=num**2
    num=num+1
    print((num-1),square)

我得到的结果是:

1 1
2 4
3 9
4 16
5 25
6 36
7 49

为什么会出现第7行第49行?

发生这种情况是因为 Python 解释器将执行循环内的所有内容,并且只会在条件 square < limit 被评估为 false 时中断。

在循环的最后一次迭代中,num = 8 和 square = 49。然后循环正确地将 49 < 40 评估为 false 并中断。它不会在条件变为假时立即进入循环,只有在评估“square < limit”时才会中断。

一个潜在的解决方案可能是像这样将打印放在 if 语句中,

if square < limit:
     print stuff

这是因为您正在检查 square < limit 并且当 number = 6 满足条件的 suare = 25 并且接下来打印行 6 36 时,数字变为 7 andsqure 变成 36 仍然小于 40 因此它打印 7 49 并将数字递增到 8 现在当程序检查 while condition 它失败了49 < 40 == False 因此程序执行停止。 您可以将代码修改为:

    limit = 40    # given limit by quiz 
    num = 1    # start with 1 as 0 suare is 0 and is not required by you i guess
    while (num * num) < limit:
        print((num),(num * num))    # prints num and square of num
        num += 1        # increments num by 1

输出:

    1 1
    2 4
    3 9
    4 16
    5 25
    6 36