Python 将变量设置为True或False有什么意义?

Python 将变量设置为True或False有什么意义?,python,if-statement,variables,Python,If Statement,Variables,我正在Youtube上观看一段关于Python基础知识的教程视频。 在视频中,他创建了一个列表,并编写了一个代码,如果有以字母“J”开头的单词,则打印出“find”。 代码如下: names = ["John", "Mary"] found = False for name in names: if name.startswith("J"): print("Found") found = True break if not found:

我正在Youtube上观看一段关于Python基础知识的教程视频。 在视频中,他创建了一个列表,并编写了一个代码,如果有以字母“J”开头的单词,则打印出“find”。 代码如下:

names = ["John", "Mary"]
found = False
for name in names:
    if name.startswith("J"):
        print("Found")
        found = True
        break
if not found:
    print("Not found")

我的问题是,如果他将变量
found
更改为
True
,则为什么他决定在代码的开头将变量
found
设置为
False
。如果我们没有触发
found=True
语句,那么
found
将是
False
。否则,它将为
。这使我们能够确定是否至少找到一个以“J”开头的名称

如果我们没有在开始时设置
found=False
,我们将无法在以后使用
found
——因为在我们到达将使用它的
If
语句时,变量可能还没有创建


因此,换句话说,
found
的值根据程序中发生的变化而变化,我们使用该变量跟踪该变化。

在编程中使用该布尔变量称为“Flag”:

标志变量的最简单形式是您为其定义的变量 只有一个值,直到某个条件为真,在这种情况下,您需要更改 变量的值。这是一个可以用来控制流量的变量 指函数或语句,允许您检查 在您的功能进行时设置条件

程序员在代码开始时将变量设置为False,并且只有在找到名称时变量才会更改。 变量仅用于在代码末尾检查是否必须执行最后一次打印

在代码末尾,如果find为True,则将执行“notfound”打印

尝试想象一个找不到名称的场景…
变量值是多少?
最后一次打印会被执行吗

还有另一种可能,在没有布尔变量的情况下,在函数中小心地使用返回值来获得相同的结果(稍后您将了解函数):


如果这样写可能会更清楚:

names = ["John", "Mary"]
found = False
for name in names:
    if name.startswith("J"):
        found = True
        break

if found:
    print("Found")
else:
    print("Not found")
这在功能上是相同的,但是
found
的作用应该更清楚


尽管是as,但您甚至不需要
found
,因为Python有一个
else
子句,您可以添加到
for
循环中,该循环在循环未中断时激活:

names = ["John", "Mary"]
for name in names:
    if name.startswith("J"):
        print("Found")
        break
else:  # No break
    print("Not found")
或者这里有另一个使用生成器表达式和三元数的选项,基于:


如果将设置忽略为false,并且
names
中的所有名称都不以J开头,您会期望发生什么?只有在
if
语句中,
found
变量才设置为true。在程序结束时,检查变量是否为true或false将告诉您是否满足了条件。Off-topic:FWIW,在Python中通常根本不需要使用这样的“flag”变量,因为语句有一个可选的
else:
子句,可以在这样的场景中使用(也就是说,搜索可能找到或可能找不到的东西)。也许教程有点太基础了…@DerekEden你为什么这么认为?我觉得这根本不是真的。(嗨,顺便说一句)@Pitto我甚至没有诚实地注意到反对票。我只是在这里学习并在我陷入困境时获得答案,Lol,但我同意你的看法。函数
find_name_in_names
应该返回
True
False
,而不是字符串。
return
没有功能,因此不需要括号,应该删除。你可以使用
any
返回any(name.startswith(name\u first\u letter)表示名称中的名称)
.Hi@Daniel!这只是一个演示如何在没有flag变量的情况下获得可选打印的示例。解决方案数不胜数,这只是一个简单的示例。如果我编写了一个返回布尔值的函数,我可能会选择一个类似于is_name_In_names的名称。感谢您的输入!是的,好的,谢谢!这种方式会让您受益匪浅对我来说。我现在也能理解他为什么那样做了。但让我困惑的是,如果我继续使用更多代码,“find”是否仍然是真的,或者在我离开for循环后它是否会返回False。如果是这种情况,如果我想以后再次使用它,我是否必须再次将其设置为真?@Dcode发布后,
found
的值在循环后将永远不会更改。这是否回答了您的问题?for循环的else对我来说是全新的!酷豆:)
names = ["John", "Mary"]
for name in names:
    if name.startswith("J"):
        print("Found")
        break
else:  # No break
    print("Not found")
names = ["John", "Mary"]
found = any(name.startswith("J") for name in names)
print("Found" if found else "Not found")