我被告知发布一个新问题-请参阅帖子:使用Python 的最近平方函数
目标是找到最接近极限=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
这是因为您正在检查square < limit
,当number = 6
是满足条件的suare = 25
,并且接下来打印行6 36
时,数字变为7
,然后变为小于40的36
,因此它打印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
之所以会发生这种情况,是因为Python解释器将执行循环中的所有内容,并且只破坏一次条件平方<limit被评估为false。
在循环的最后一次迭代中,num=8,square=49。循环然后正确地评估49<40为假并断裂。只要条件变为假,它就不会在循环内部中断;正方形<极限;评估。
一个潜在的解决方案可能是将打印内容放在一个类似的if语句中,
if square < limit:
print stuff