为什么我的布尔值在 while 循环中没有变化?
Why doesn't the value of my boolean change in a while-loop?
我的算法书在 Python 上用不同的方法实现了链表。这是remove
方法,但我不完全理解while
循环。
这个实现依赖于之前定义的Node
class,class有get.data()
、get.next()
、[=16等方法=],等等。列表本身是一个名为 UnorderedList
的 class。 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())
not found
在while循环中用作条件,而不是用作改变值的语句。您可以将 while not found
读作 while found == False
所以我好像漏掉了 while-loop 试图做的事情的一部分。事实上,说 not found
意味着表达式的计算结果为 True
,但在这种情况下不会停止循环。它做的正是我们想要的,它继续 运行 循环。找到要查找的项目后,我们将 found
的值更改为 True
。那时,当我们评估 while not found
时,它将产生 False
,这将使我们脱离循环。
我的算法书在 Python 上用不同的方法实现了链表。这是remove
方法,但我不完全理解while
循环。
这个实现依赖于之前定义的Node
class,class有get.data()
、get.next()
、[=16等方法=],等等。列表本身是一个名为 UnorderedList
的 class。 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())
not found
在while循环中用作条件,而不是用作改变值的语句。您可以将 while not found
读作 while found == False
所以我好像漏掉了 while-loop 试图做的事情的一部分。事实上,说 not found
意味着表达式的计算结果为 True
,但在这种情况下不会停止循环。它做的正是我们想要的,它继续 运行 循环。找到要查找的项目后,我们将 found
的值更改为 True
。那时,当我们评估 while not found
时,它将产生 False
,这将使我们脱离循环。