为什么我的布尔值在 while 循环中没有改变?

我的算法书有一个用不同方法在 Python 上实现链表的方法。这是remove方法,但我不完全理解while循环。


这个实现依赖于Node之前定义的一个类,该类具有 、 、 等方法。get.data()列表get.next()本身set_next()是一个名为 的类UnorderedList。self.head指列表中的第一项。


此方法的思想remove是遍历列表,直到找到要删除的项目。我们创建 acurrent和 aprevious来跟踪我们正在查看的当前项目和之前的项目。


我的问题与 while 循环有关。我们设置的found目的False是当我们找到我们正在寻找的项目时更改它。但是,当我们说 时,while 循环不会改变foundto的值吗?Truenot found


我知道这是一个简单的问题,但我很难理解这个 while 循环为什么以及如何工作,因为在我的脑海中not通常使布尔值在其范围内与它的实际情况相反。有人可以向我解释一下吗?


顺便说一句,我不需要对当前代码进行任何解释或改进,这是书中的一个示例,这对我来说都很有意义,我只是想理解那部分。


def remove(self, item):

 current = self.head

 previous = None

 found = False

 while not found:

      if current.get_data() == item:

           found = True

      else:

           previous = current

           current = current.get_next()


 if previous == None:

      self.head = current.get_next()

 else:

      previous.set_next(current.get_next())


慕妹3146593
浏览 59回答 2
2回答

LEATH

所以看来我错过了 while 循环试图做的事情的一部分。事实上,saynot found意味着表达式的计算结果为True,但在这种情况下,这不会停止循环。它完全按照我们想要的方式执行,它继续运行循环。一旦找到我们正在寻找的项目,我们就将 的值更改found为True。那时,当我们评估它时,while not found它将产生False,这将使我们脱离循环。

猛跑小猪

not found用作 while 循环中的条件,而不是用作更改值的语句。您可以阅读while not found为while found == False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python