繁体   English   中英

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

[英]Why doesn't the value of my boolean change in a while-loop?

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

此实现依赖于Node类先前定义的类有方法,如get.data() get.next() set_next()等名单本身就是一种叫做类UnorderedList self.head指的是列表中的第一项。

这个remove方法的想法是遍历列表,直到找到我们想要删除的项目。 我们创建一个current和一个previous来跟踪我们正在查看的当前项目和之前的项目。

我的问题与 while 循环有关。 我们将found设置为False是为了在找到我们要查找的项目时更改它。 但是,当我们说not found时,while 循环不会将found的值更改为True吗?

我知道这是一个简单的问题,但我很难理解这个 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())

所以似乎我错过了 while 循环试图做的事情的一部分。 事实上,说not found意味着表达式的计算结果为True ,但在这种情况下,这不会停止循环。 它完全按照我们的意愿去做,它继续运行循环。 一旦我们找到了我们正在寻找的项目,我们将found的值更改为True 在这一点上,当我们评估while not found ,它将产生False ,这将使我们退出循环。

not found在 while 循环中用作条件,而不是用作更改值的语句。 您可以while not found while found == False阅读为while found == False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM