我正在YouTube上观看有关Python基础知识的教程视频。 在视频过程中,如果有任何以字母“ J”开头的单词,他将创建一个列表并编写代码以打印出“找到”。 这是代码:
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
设置为False
,然后又将变量底部的变量更改为True
?
答案 0 :(得分:4)
也许这样写会更清楚:
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
的作用应该更清楚。
尽管与@martineau commented一样,您甚至不需要found
,因为Python有一个else
子句,您可以将其添加到for
循环中,该子句在循环为不间断:
names = ["John", "Mary"]
for name in names:
if name.startswith("J"):
print("Found")
break
else: # No break
print("Not found")
或者这是另一个基于@Daniel's comment使用生成器表达式和三进制的选项:
names = ["John", "Mary"]
found = any(name.startswith("J") for name in names)
print("Found" if found else "Not found")
答案 1 :(得分:2)
在代码结尾,我们检查found
的值。如果我们没有触发found = True
语句,那么found
将是False
。否则,它将为True
。这使我们能够确定是否找到至少一个以“ J”开头的名称。
如果我们一开始没有设置found = False
,则以后将无法使用found
-因为在到达{{1 }}会使用它的语句。
换句话说,if
的值根据程序中发生的变化而变化,我们使用该变量来跟踪该变化。
答案 2 :(得分:1)
此布尔变量的使用在编程中称为“标记”:
最简单形式的标志变量是您定义为的变量 在某些条件为真之前具有一个值,在这种情况下, 变量的值。它是一个变量,您可以用来控制流量 函数或语句的名称,使您可以检查某些 功能进展时的状况。
程序员在代码的开头将变量设置为False,并且只有找到名称后,变量才会更改。 该变量仅用于在代码末尾检查是否必须执行最后一次打印。
在代码末尾,如果发现为True,则将执行打印“未找到”。
尝试想象一个找不到名称的情况...
可变值是多少?
是否执行最后的打印?
还有另外一种可能性,可以通过仔细地使用函数的返回值来获得不带布尔变量的相同结果(您将在以后学习函数):
let a = [1, 2, 3],
b = [],
c = 1
/*Check if a variable is an Array*/
console.log(a instanceof Array)
console.log(b instanceof Array)
console.log(c instanceof Array)
/*Check if array includes a certian value and return its index if avalable else returns -1*/
console.log(a.indexOf(2))
console.log(a.indexOf(3))
console.log(a.indexOf(5)) //[-1] Doesn't exist in the array