for循环与while循环回顾
深入学习循环语句的用法
布尔运算和布尔值、break语句、continue语句、pass语句、else语句
while写法:
while 循环后面的 a < 4 是 while 循环的设定条件,只有满足条件时,循环才能执行。
在上面这个例子中,执行顺序是:
1. 先定义变量 a,将 0 赋值给 a;
2. 接下来,对 while 循环设定条件 a < 4,计算机满足条件就会执行,江湖术语,满足条件就为真,也叫条件为 True,之后进入循环体;
3. 进入循环体后,执行 a = a + 1,print(a), 一次又一次的执行,直到 a = 4 时,4 已经不满足 a < 4 的条件了,此时条件为假,也就是条件为 False, 这段循环就结束了。
我们就来探究一下这个设定条件的 True 与 False。
用数据做判断:布尔值
在 while 循环之前,我们学过 if…elif…else 语句,也涉及到用数据做判断。当逻辑判断通过才会继续执行:
计算机的判断,只有两种结果,要么是 True(条件为真),要么为 False(条件为假)。
True 与 False 叫做布尔值,这个判断真假的过程,叫做【布尔运算】。
print(3 < 6) #True
print(3 > 6) #False
print('北京' == '北京') #True
print('北京' == '首都') #False
print() 括号内的计算其实就是【布尔运算】,终端上要么显示 True,要么显示 False。
print(3 < 6) 与 print(3 > 6) 这两句很简单,就是判断大小。
后面两行:print(‘北京’ == ‘北京’) 与 print(‘北京’ == ‘首都’) 这是比较字符串。
两个字符串 ‘北京’ 相等,结果显示 True,拿 ‘北京’ 与 ‘首都’ 做对比,两个字符串不相等,但是用的是 “==” 号,所以显示 False。
只有当条件判断为 True 时,if 和 while 后面的子句才会执行下去。
当条件为 False 时,if 与 while 会结束循环。
while False:
print('我是 Fasle,打印不出来') #
它运行后,终端上不显示任何结果。
这是因为 while 循环执行,必须要 while 后的条件为 “真”,而【布尔值】False 本身就为 “假”,所以这个循环一次都不会执行。
同理,3 > 6 这个条件恒为 “假”,如果把 while False 换成 while 3 > 6,效果会是一样的 — 什么都不会出现。
如果我用 while True 或者 while 3 < 6 来做条件,会怎么样?。
把 3 > 6 换成 3 < 6。
mport time
while 3 < 6:
time.sleep(1)
print('打印出来') #打印出来(无限循环)
终端里会一直打印。程序将会不限次数地运行,陷入【死循环】。
这是因为 3 < 6 这个判断是正确的, 也就是这个条件为 True,代表着条件永远正确。
所以代码会无限循环,必须手动强制退出。
总结:
布尔运算的三种形式
第一种:两个数值做比较
刚才的 3 > 6 与 3 < 6 都属于两个数值做比较。
用两个数值做比较的【布尔运算】,主要包含以下情况:
第二种:直接用数值做运算
if 1:
print('首都') #首都
终端打印出了一个字符串首都。我们看看这两行代码,这是一段使用了条件判断的代码。因为终端打印出了 ‘首都’,说明 if 后面的条件为真。
但是这段代码很怪,if 后面的条件只写了一个数字 1。
其实,在这里整数 1 就是作为一个判断条件,被判断为真(True),这就是数值本身作为一个条件, 被判断真假的情况。
在 Python 江湖中已经设定好什么数据为真,什么数据为假。假的是有限的,那么除了假的,就都是真的。
None,它代表的是【空值】,自成一派,数据类型是 NoneType。
要注意它和 0 的区别,0 是整数 0,可并非什么都没有。
bool() 方法,bool() 函数用来判断一个数据为真还是为假。用法有点和 type() 函数相似。
print('以下数据判断结果都是【真】:') #以下数据判断结果都是【真】:
print(bool(True)) #True
print(bool(10)) #True
print(bool('xyz')) #True
print('以下数据判断结果都是【假】:') #以下数据判断结果都是【假】:
print(bool(False)) #False
print(bool(0)) #False
print(bool('')) #False
print(bool(None)) #False
第三种情况:布尔值之间的运算(and、or、not、in、not in 五种运算)
and 和 or 运算:
a = 5
b = -5
print('以下是 and 运算')
if a == 5 and b == 5: # 【b 实际上是 -5】
print('True')
else:
print('False')
#False
print('以下是 or 运算')
if a == 5 or b == 5: # 【b 实际上是 -5】
print('True')
else:
print('False')
#True
a == 5 and b == 5 的意思是【a == 5 并且 b == 5】,只有两个条件都为真的时候,才能判断为 True;
而 a == 5 or b == 5 的意思是【a == 5 或者 b == 5】这两个条件只要满足其中一个,就能判断为 True。
not 运算:
not 就是相反的意思。
not True 就等于 False,not False 就等于 True。
in 和 not in 运算:
in 的意思 “判断一个元素是否在一堆数据之中”,not in 则相反。
list = [1, 2, 3, 4]
a = 1
b = 10
c = 0
print(bool(a in list)) #True
print(bool(b in list)) #False
print(bool(c in list)) #False
如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个【键】:
dict = {'Name': 'Jack', 'Age': 17, 'Class': 'First'}
a = 'Name'
print(bool(a in dict)) #True
循环里的四种新运算
这 4 种新语句配合 for 循环和 while 循环,可以让循环发挥更多的功能。
break语句
break 语句的意思就是 “打破”,在 Python 江湖中是用来结束循环的,一般写作: if … break。
for i in range(1, 10):
if i > 5:
break
print(i)
#结果为1-5依次出现
x = 0
while x < 10:
if x > 4:
break
x = x + 1
print(x)
#结果为1-5依次出现
本来 for 循环与 while 循环是可以从 1 打印到 9 的,结果由于 break,只能从 1 打印到 5,这就是 break 的作用:在循环内使用,用来结束循环。
break 前面一共缩进了【8 个空格】。
这是因为 if 之下的语句要缩进 4 个空格(按一次 Tab 键),这里的 if … break 又嵌套在 while 或 for 循环中,而循环语句本身又要缩进 4 个空格。
这样一来,break 就缩进了【4 + 4 = 8】个空格(按两次 Tab 键)。
【注】:Tab 键和空格键不能同时混用。
continue语句
continue 的意思是 “继续”。这个子句也是在循环内部使用的。
当某个条件被满足的时候,触发 continue 语句,将跳过之后的代码,直接回到循环的开始。
# continue 语句搭配 for 循环
for ... in ...:
...
if ...:
continue
...
# continue 语句搭配 while 循环
while ...(条件):
...
if ...:
continue
...
for i in range(1, 11):
if i == 5:
continue
print(i)
#结果输出为1-10,但是没有5
x = 0
while x < 10:
x = x + 1
if x == 5:
continue
else:
print(x)
#结果输出为1-10,但是没有5
两个循环中,都没有打印数字【5】,但是和 break 不同的是,数字【5】之后的内容都打印出来了。
因为上面的代码,当 i == 5 和 x == 5 的时候会触发 continue 语句,于是回到了循环开头,跳过了 print 语句。
这就是 continue,它只能跳过本次的循环,但是这次之后的循环仍然会执行。
pass语句
pass 很常见,就是我们理解的 “跳过”。
age = int(input('请输入你的年龄:'))
if age >= 18:
pass
else:
print('你未成年,不得进入网吧')
#结果为:请输入你的年龄:
#输入>=18de ,则跳过,输入<18的,则显示你未成年,不得进入网吧
这个代码的意思是:当 age >= 18 的时候,跳过,什么都不做。
其他情况 age < 18 的时候,执行 print(‘你未成年,不得进入网吧’) 语句。
pass 语句就是占据一个位置表示 “什么都不做”,满足我的条件,就跳过。
else语句
在条件判断语句见过【else】,其实,else 不但可以和 if 配合使用,还能跟 for 循环和 while 循环配合使用。
for i in range(3):
num = int(input('请输入 0 结束循环,你有 3 次机会:'))
if num == 0:
print('你触发了 break 语句,导致 else 语句不会生效。')
break
else:
print('3 次循环你都错过了,else 语句生效了。')
以上代码,可以做两种尝试:
1. 连续 3 次不输入 0; (显示:3 次循环你都错过了,else 语句生效了。)
2. 输入一次 0 跳出循环。 (显示:你触发了 break 语句,导致 else 语句不会生效。)
所以,用一句话总结,当循环中没有碰到 break 语句,就会执行循环后面的 else 语句,否则就不会执行。
num = 0
while num < 3:
n = int(input('请输入 0 结束循环,你有 3 次机会:'))
if n == 0:
print('你触发了 break 语句,导致 else 语句不会生效。')
break
num += 1
else:
print('3 次循环你都错过了,else 语句生效了。')
break、continue、pass、else 都是和循环搭配使用的,也能够跳出循环。