for循环与while循环回顾
    1.png2.png3.png
    深入学习循环语句的用法
    布尔运算和布尔值、break语句、continue语句、pass语句、else语句
    4.png
    while写法:
    5.png
    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 语句,也涉及到用数据做判断。当逻辑判断通过才会继续执行:
    6.png
    计算机的判断,只有两种结果,要么是 True(条件为真),要么为 False(条件为假)。
    True 与 False 叫做布尔值,这个判断真假的过程,叫做【布尔运算】。

    1. print(3 < 6) #True
    2. print(3 > 6) #False
    3. print('北京' == '北京') #True
    4. print('北京' == '首都') #False

    print() 括号内的计算其实就是【布尔运算】,终端上要么显示 True,要么显示 False。
    print(3 < 6) 与 print(3 > 6) 这两句很简单,就是判断大小。
    后面两行:print(‘北京’ == ‘北京’) 与 print(‘北京’ == ‘首都’) 这是比较字符串。
    两个字符串 ‘北京’ 相等,结果显示 True,拿 ‘北京’ 与 ‘首都’ 做对比,两个字符串不相等,但是用的是 “==” 号,所以显示 False。
    只有当条件判断为 True 时,if 和 while 后面的子句才会执行下去。
    当条件为 False 时,if 与 while 会结束循环。

    1. while False:
    2. print('我是 Fasle,打印不出来') #

    它运行后,终端上不显示任何结果。
    这是因为 while 循环执行,必须要 while 后的条件为 “真”,而【布尔值】False 本身就为 “假”,所以这个循环一次都不会执行。
    同理,3 > 6 这个条件恒为 “假”,如果把 while False 换成 while 3 > 6,效果会是一样的 — 什么都不会出现。
    如果我用 while True 或者 while 3 < 6 来做条件,会怎么样?。
    把 3 > 6 换成 3 < 6。

    1. mport time
    2. while 3 < 6:
    3. time.sleep(1)
    4. print('打印出来') #打印出来(无限循环)

    终端里会一直打印。程序将会不限次数地运行,陷入【死循环】。
    这是因为 3 < 6 这个判断是正确的, 也就是这个条件为 True,代表着条件永远正确。
    所以代码会无限循环,必须手动强制退出。
    总结:
    7.png
    布尔运算的三种形式

    第一种:两个数值做比较
    刚才的 3 > 6 与 3 < 6 都属于两个数值做比较。
    用两个数值做比较的【布尔运算】,主要包含以下情况:
    8.png
    第二种:直接用数值做运算

    1. if 1:
    2. print('首都') #首都

    终端打印出了一个字符串首都。我们看看这两行代码,这是一段使用了条件判断的代码。因为终端打印出了 ‘首都’,说明 if 后面的条件为真。
    但是这段代码很怪,if 后面的条件只写了一个数字 1。
    其实,在这里整数 1 就是作为一个判断条件,被判断为真(True),这就是数值本身作为一个条件, 被判断真假的情况。
    在 Python 江湖中已经设定好什么数据为真,什么数据为假。假的是有限的,那么除了假的,就都是真的。
    9.png
    None,它代表的是【空值】,自成一派,数据类型是 NoneType。
    要注意它和 0 的区别,0 是整数 0,可并非什么都没有。

    bool() 方法,bool() 函数用来判断一个数据为真还是为假。用法有点和 type() 函数相似。

    1. print('以下数据判断结果都是【真】:') #以下数据判断结果都是【真】:
    2. print(bool(True)) #True
    3. print(bool(10)) #True
    4. print(bool('xyz')) #True
    5. print('以下数据判断结果都是【假】:') #以下数据判断结果都是【假】:
    6. print(bool(False)) #False
    7. print(bool(0)) #False
    8. print(bool('')) #False
    9. print(bool(None)) #False

    第三种情况:布尔值之间的运算(and、or、not、in、not in 五种运算)
    and 和 or 运算:

    1. a = 5
    2. b = -5
    3. print('以下是 and 运算')
    4. if a == 5 and b == 5: # 【b 实际上是 -5】
    5. print('True')
    6. else:
    7. print('False')
    8. #False
    9. print('以下是 or 运算')
    10. if a == 5 or b == 5: # 【b 实际上是 -5】
    11. print('True')
    12. else:
    13. print('False')
    14. #True

    a == 5 and b == 5 的意思是【a == 5 并且 b == 5】,只有两个条件都为真的时候,才能判断为 True;
    而 a == 5 or b == 5 的意思是【a == 5 或者 b == 5】这两个条件只要满足其中一个,就能判断为 True。
    10.png11.png
    not 运算:
    not 就是相反的意思。
    not True 就等于 False,not False 就等于 True。
    12.png
    in 和 not in 运算:
    in 的意思 “判断一个元素是否在一堆数据之中”,not in 则相反。

    1. list = [1, 2, 3, 4]
    2. a = 1
    3. b = 10
    4. c = 0
    5. print(bool(a in list)) #True
    6. print(bool(b in list)) #False
    7. print(bool(c in list)) #False

    如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个【键】:

    1. dict = {'Name': 'Jack', 'Age': 17, 'Class': 'First'}
    2. a = 'Name'
    3. print(bool(a in dict)) #True

    13.png14.png15.png

    循环里的四种新运算
    这 4 种新语句配合 for 循环和 while 循环,可以让循环发挥更多的功能。

    break语句
    break 语句的意思就是 “打破”,在 Python 江湖中是用来结束循环的,一般写作: if … break。

    1. for i in range(1, 10):
    2. if i > 5:
    3. break
    4. print(i)
    5. #结果为1-5依次出现
    6. x = 0
    7. while x < 10:
    8. if x > 4:
    9. break
    10. x = x + 1
    11. print(x)
    12. #结果为1-5依次出现

    本来 for 循环与 while 循环是可以从 1 打印到 9 的,结果由于 break,只能从 1 打印到 5,这就是 break 的作用:在循环内使用,用来结束循环。
    16.png
    break 前面一共缩进了【8 个空格】。
    这是因为 if 之下的语句要缩进 4 个空格(按一次 Tab 键),这里的 if … break 又嵌套在 while 或 for 循环中,而循环语句本身又要缩进 4 个空格。
    这样一来,break 就缩进了【4 + 4 = 8】个空格(按两次 Tab 键)。
    【注】:Tab 键和空格键不能同时混用。

    continue语句
    continue 的意思是 “继续”。这个子句也是在循环内部使用的。
    当某个条件被满足的时候,触发 continue 语句,将跳过之后的代码,直接回到循环的开始。

    1. # continue 语句搭配 for 循环
    2. for ... in ...:
    3. ...
    4. if ...:
    5. continue
    6. ...
    7. # continue 语句搭配 while 循环
    8. while ...(条件):
    9. ...
    10. if ...:
    11. continue
    12. ...

    17.png

    1. for i in range(1, 11):
    2. if i == 5:
    3. continue
    4. print(i)
    5. #结果输出为1-10,但是没有5
    6. x = 0
    7. while x < 10:
    8. x = x + 1
    9. if x == 5:
    10. continue
    11. else:
    12. print(x)
    13. #结果输出为1-10,但是没有5

    两个循环中,都没有打印数字【5】,但是和 break 不同的是,数字【5】之后的内容都打印出来了。
    因为上面的代码,当 i == 5 和 x == 5 的时候会触发 continue 语句,于是回到了循环开头,跳过了 print 语句。
    这就是 continue,它只能跳过本次的循环,但是这次之后的循环仍然会执行。

    pass语句
    pass 很常见,就是我们理解的 “跳过”。

    1. age = int(input('请输入你的年龄:'))
    2. if age >= 18:
    3. pass
    4. else:
    5. print('你未成年,不得进入网吧')
    6. #结果为:请输入你的年龄:
    7. #输入>=18de ,则跳过,输入<18的,则显示你未成年,不得进入网吧

    这个代码的意思是:当 age >= 18 的时候,跳过,什么都不做。
    其他情况 age < 18 的时候,执行 print(‘你未成年,不得进入网吧’) 语句。
    pass 语句就是占据一个位置表示 “什么都不做”,满足我的条件,就跳过。

    else语句
    在条件判断语句见过【else】,其实,else 不但可以和 if 配合使用,还能跟 for 循环和 while 循环配合使用。

    1. for i in range(3):
    2. num = int(input('请输入 0 结束循环,你有 3 次机会:'))
    3. if num == 0:
    4. print('你触发了 break 语句,导致 else 语句不会生效。')
    5. break
    6. else:
    7. print('3 次循环你都错过了,else 语句生效了。')

    以上代码,可以做两种尝试:
    1. 连续 3 次不输入 0; (显示:3 次循环你都错过了,else 语句生效了。)
    2. 输入一次 0 跳出循环。 (显示:你触发了 break 语句,导致 else 语句不会生效。)
    所以,用一句话总结,当循环中没有碰到 break 语句,就会执行循环后面的 else 语句,否则就不会执行。

    1. num = 0
    2. while num < 3:
    3. n = int(input('请输入 0 结束循环,你有 3 次机会:'))
    4. if n == 0:
    5. print('你触发了 break 语句,导致 else 语句不会生效。')
    6. break
    7. num += 1
    8. else:
    9. print('3 次循环你都错过了,else 语句生效了。')

    break、continue、pass、else 都是和循环搭配使用的,也能够跳出循环。
    18.png