微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的while循环在中断后会再执行一次?

如何解决为什么我的while循环在中断后会再执行一次?

我仍在学习如何编写适当的while循环。这个迷你练习要求编写一个while循环,该循环查找小于整数限制的最大平方数,并将其存储在一个名为Nearest_square的变量中。平方数是整数乘以自身的乘积。例如,36是一个平方数,因为它等于6 * 6。如果限制设置为40,则您的代码应将Nearest_square设置为36。

所以我首先这样编写代码

limit = 40

n=1
nearest_square = 1

while nearest_square < limit:
    nearest_square = n**2
    n += 1
    
print(nearest_square)

输出为:

49

我不知道为什么n没有在6而是7打破。

我确实稍微修改了我的代码,但是这次它在6点中断。

limit = 40

n=1
nearest_square = 1

while n**2 < limit:
    nearest_square = n**2
    n += 1
    
print(nearest_square)

这次输出为36。

我不知道while循环何时中断以及为什么在第一个代码块中,n在7处结束并再次返回到循环,并且即使49已经大于40,也要计算49的Nearest_square。

解决方法

我不知道为什么n没有在6而是7折断

让我们从n=6手动进行迭代,

n = 6

while nearest_square < limit:  ## 25 < 40 (25,nearest_square calculated when n=5)
    nearest_square = n**2  ## nearest_square = 6**2 => 36
    n += 1  ## n =7

n = 7

while nearest_square < limit:  ## 36 < 40 (36,nearest_square calculated when n=6)
        nearest_square = n**2  ## nearest_square = 7**2 => 49
        n += 1  ## n = 8

n = 8

while nearest_square < limit:  ## 49 < 40 (49,nearest_square calculated when n=7) 
       exit ## since condition is not met

在第一种情况下,您要检查的是先前nearest_square的{​​{1}},而不是当前的n

如@tdelaney所述,您也可以在n内添加一个if

,

在您的第一种情况下,检查nearest_square以查看while循环是否应该继续,但是仅在while之后的n循环的下一次迭代中进行更新已增加,因此在n达到7之后,程序检查nearest_square的值,发现它仍然是36,因为程序尚未更新它,因此更改了nearest_square到49,然后n到8,然后再停止。在第二种情况下,程序将在更改n*n>40的值之前检查是否nearest_square

,

第一个循环中的问题是,超出限制后会中断。当您真正想要计算之前,就得到了49。您需要保留先前的值,或者像第二个示例一样进行两次计算。由于计算成本低廉,因此两者都可以。但是更普遍地,跟踪先前的值更为常见。

由于您的计数可以由range处理,因此可以是for循环。

limit = 40
nearest_square = 1

for n in range(1,40):
    next_square = n**2
    if next_square >= limit:
        break
    nearest_square = next_square    
print(nearest_square)
,

原因是,在第一个循环中,nearest_square仍对应6**2,尽管n=7while决定是否再次执行该块时。请注意,在将n存储在n**2中之后,您需要增加nearest_square的值。

一个变量的更改不会自动转移到使用先前调用创建的其他变量。

while循环中的这类“一举成名”问题很难发现,因此不要气disc!

,

发生这种情况是因为首先检查它,然后才对它求平方。

将其更改为:

limit = 40

n=1
nearest_square = 1

while n**2 < limit:
    nearest_square = n**2
    n += 1
    
print(nearest_square)

它会在实际平方之前检查平方和。

另一种解决方案是:


n=1

while (n + 1) ** 2 < limit:
    n += 1
    
print(n ** 2)

很好的解决问题的方法:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?