流程控制

流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:

  • 顺序结构:自上而下依次运行(之前我们写的代码都是顺序结构)
  • 分支结构:在运行过程中根据条件的不同可能会执行不同的流程(用到if判断)
  • 循环结构:在运行过程中有些代码需要反复执行(用到while与for)

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图1

分支结构:if判断

必知必会:

  • 1、条件都会转成布尔值,从而决定代码是否执行
  • 2、在python中使用缩进来表示代码的从属关系
  • 3、并不是所有代码都可以拥有子代码
  • 4、同属于你某个代码的多行子代码必须要保持相同的缩进量
  • 5、在python中推荐使用相同缩进(四个空格表示一个缩进)来标识一组代码块(上一行代码结尾如果是冒号,那么下一行代码必须缩进)

什么是分支结构
分支结构就是根据条件判断的真假去执行不同分支对应的子代码

为何要用分支结构
为了让计算机像人一样根据条件的判断结果去做不同的事情

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图2

用if关键字来实现分支结构

  1. if 条件1:
  2. ...
  3. 条件1成立后执行的子代码块
  4. elif 条件2:
  5. ...
  6. 条件1不成立,条件2成立后执行的子代码块
  7. else:
  8. ...
  9. 上述条件都不满足就走这段

注意:
条件可以是任意表达式,但执行结果必须为布尔类型 在if判断中所有的数据类型也都会自动转换成布尔类型

  • None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
  • 其余均为True

单if分支结构

  1. if 条件:
  2. ...
  3. 条件成立后执行的子代码块
  4. print("end...")
  5. # 案例:年龄小于22,叫小伙子
  6. age = 20
  7. if age < 22:
  8. print("毛儿都没长齐的家伙")

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图3

if..else连用(双分支)

  1. if 条件:
  2. ...
  3. 条件成立后执行的子代码块
  4. else:
  5. ...
  6. if条件不成立就走这段
  7. # 案例:猜年龄
  8. age = 22
  9. if age < 20:
  10. print("小伙子好")
  11. else:
  12. print("傻不拉几的")

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图4

if…elif…else连用(多分支)

  1. if 条件1:
  2. ...
  3. 条件1成立后执行的子代码块
  4. elif 条件2:
  5. ...
  6. 条件1不成立,条件2成立后执行的子代码块
  7. elif 条件3:
  8. ...
  9. 条件12都不成立,条件3成立后执行的子代码块
  10. else:
  11. ...
  12. 上述所有条件都不成立就走这段
  13. # 案例:
  14. # 如果成绩 >= 90:优秀
  15. # 如果成绩 >= 80且< 90:良好
  16. # 如果成绩 >= 70且< 80:普通
  17. # 其他情况:很差
  18. score = 83
  19. if score >= 90:
  20. print("优秀")
  21. elif score >= 80:
  22. print("良好")
  23. elif score >= 70:
  24. print("普通")
  25. else:
  26. print("很差")

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图5

if判断之嵌套

  1. # 一定要图文相结合去消化理解吸收
  2. # 案例:在相亲的基础上继续,如果牵手成功,那么:在一起,否则。。。
  3. age = 26
  4. height = 165
  5. weight = 99
  6. is_success = True
  7. if age < 28 and height > 160 and weight < 100:
  8. print('小姐姐能否牵手')
  9. # 判断小姐姐是否会牵手
  10. if is_success:
  11. print('吃饭 看电影 天黑了...')
  12. else:
  13. print('去你妹的 变态!')
  14. else:
  15. print('可惜了')

循环结构:while循环

  • 什么是while循环
    • 循环就是重复做某件事,while循环是Python提供第一种循环机制称之为:条件循环
  • 为何要有while循环
    • 为了控制计算机能够像人一样去重复做某件事

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图6

while循环基本语法

  1. while 条件:
  2. ...
  3. 条件成立之后循环执行的子代码块
  4. """
  5. while的运行步骤:
  6. 1、如果条件为真,那么依次执行子代码块
  7. 2、执行完毕后再次判断条件,如果条件为True则再次执行子代码块如果条件为False,则循环终止
  8. """
  9. while True:
  10. # 1.获取用户输入的用户名和密码
  11. username = input('请输入用户名>>>:')
  12. password = input('请输入密码>>>:')
  13. # 2.判断用户名和密码是否正确
  14. if username == 'jack' and password == '123':
  15. print('登录成功!')
  16. else:
  17. print('登录失败,请重新输入!')
  18. # 注意:死循环---》条件永远为True

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图7

结束while循环的两种方式

方式一:全局标志位

  • 特点:等到本次循环体代码运行完毕后,下一次循环判断条件时才会生效
  1. # 标志位的使用
  2. count = 0
  3. flag = True
  4. while tag:
  5. if count == 5:
  6. flag = False # 把条件改为False
  7. print(i)
  8. count += 1

方式二:break

  • 特点:break立即结束本层while循环
  1. count = 0
  2. tag = True
  3. while tag:
  4. if count == 5:
  5. # tag = False
  6. break
  7. print(i)
  8. count += 1

while嵌套

while循环嵌套+全局标志位的使用

  • 针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,“全局标志位”就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
  1. flag = True
  2. while flag: # 第一层循环
  3. while flag: # 第二层循环
  4. flag = False # tag变为False,所有while循环的条件都变为False
  5. # 案例:
  6. flag = True
  7. while flag:
  8. inp_user = input("请输入用户名>>>: ")
  9. inp_pwd = input("请输入密码>>>: ")
  10. if inp_user == "jack" and inp_pwd == "123":
  11. print('登录成功')
  12. # break
  13. flag = False
  14. else:
  15. print('用户名或密码错误')

while循环嵌套+break的使用

  • 如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
  1. while True: # 第一层循环
  2. while True: # 第二层循环
  3. while True: # 第三层循环
  4. break # 终止第三层循环
  5. break # 终止第二层循环
  6. break # 终止第一层循环
  7. # 案例:
  8. while True:
  9. inp_user = input("请输入用户名>>>: ")
  10. inp_pwd = input("请输入密码>>>: ")
  11. if inp_user == "jack" and inp_pwd == "123":
  12. print('登录成功!')
  13. while True:
  14. print("""
  15. 0 退出
  16. 1 取款
  17. 2 存款
  18. 3 转账
  19. """)
  20. choice = input("请输入您的命令编号:")
  21. if choice == "0":
  22. break
  23. elif choice == "1":
  24. print("正在取款。。。")
  25. elif choice == "2":
  26. print("正在存款。。。")
  27. elif choice == "3":
  28. print("正在转账。。。")
  29. else:
  30. print("输入的指令不存在")
  31. break
  32. else:
  33. print('用户名或密码错误')

while+continue:跳过本次循环,直接进入下一次循环

  1. # 使用while循环打印出0-5但是不打印2和4
  2. # 1.定义一个起始变量
  3. count = 0
  4. # 2.循环
  5. while count < 6:
  6. if count == 2 or count == 4:
  7. count += 1
  8. continue # continue同级别之后千万别写代码,写了也不会运行
  9. # 3.打印变量的值
  10. print(count)
  11. # 4.变量值自增1
  12. count += 1
  13. """
  14. continue会让循环体代码直接回到条件判断处重新判断
  15. """
  16. # 案例:
  17. while True:
  18. inp_user = input("username>>>: ")
  19. inp_pwd = input("password>>>: ")
  20. # 判断用户名和密码是否正确
  21. if inp_user == "jack" and inp_pwd == "123":
  22. print('登录成功') # 输入正确登录成功
  23. break # 结束循环
  24. else:
  25. print('用户名或密码错误')
  26. # continue # 一定不要加在最后一步

while+else:else的子代码块会在while循环正常死亡时运行,没有被break干掉就叫正常死亡

  1. # 案例一:正常死亡,循环正常执行
  2. count = 0
  3. while count < 5:
  4. if count == 2:
  5. count += 1
  6. continue
  7. print(count)
  8. count += 1
  9. else:
  10. print('====>')
  11. # 案例二:非正常死亡,如果执行过程中被break,就不会执行else的语句
  12. count = 0
  13. while count < 5:
  14. if count == 2:
  15. break
  16. print(count)
  17. count += 1
  18. else:
  19. print('====>')

死循环:条件永远为True

  1. while True:
  2. print(1)
  3. """死循环会让CPU极度繁忙 甚至奔溃"""

小练习:

  1. """
  2. 猜年龄的游戏
  3. 普通要求
  4. 用户可以有三次猜错的机会 如果过程中猜对了直接退出
  5. 拔高要求
  6. 三次机会用完之后提示用户是否继续尝试 如果是则再给三次机会 如果否则直接结束
  7. """
  8. real_age = 18 # 定义固定的年龄变量
  9. count = 0 # 定义输入次数变量
  10. while True:
  11. # 三次机会用完会执行
  12. if count == 3:
  13. choice = input("三次机会已用完啦!是否继续?\n重新请输入'q',退出请输入't'>>>:")
  14. if choice == 'q' or choice == 'Q':
  15. count = 0 # 将猜测次数置为0
  16. else:
  17. print('游戏已结束'.center(35, '='))
  18. break
  19. print('猜年龄游戏'.center(35, '*'))
  20. age = int(input('请输入年龄>>>:'))
  21. if age < real_age:
  22. print('害!猜小了,你还有:%s 次机会!' % (2 - count))
  23. elif age > real_age:
  24. print('害!猜大了,你还有:%s 次机会,!' % (2 - count))
  25. else:
  26. print('好家伙猜对了,真厉害呀!')
  27. break
  28. count += 1

循环结构:for循环

  • 什么是for循环
    • 循环就是重复做某件事,for循环是python提供第二种循环机制
  • 为何要有for循环
    • 理论上for循环能做的事情,while循环都可以做
    • 之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁

流程控制之if判断,流程控制之while循环,流程控制之for循环 - 图8

for循环基本语法

  1. for 变量名 in 可迭代对象: # 可迭代对象可以是字符串,列表,字典,元组,集合
  2. ...
  3. for循环体代码
  4. # 例1
  5. for i in ['a','b','c']:
  6. print(i)
  7. # 运行结果
  8. a
  9. b
  10. c
  11. # 参照例1来介绍for循环的运行步骤
  12. # 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码
  13. # 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码
  14. # 步骤3: 重复以上过程直到列表中的值读尽

for循环的基本用法

  1. # 案例1:遍历列表
  2. names = ["kevin", "tom", "jack", "lili", "lxx", "xxx"]
  3. for x in names:
  4. print(x)
  5. for x,y in [["name","kevin"],["age",18],["gender","male"]]: # x,y = ['name', 'kevin']
  6. print(x,y)
  7. # 案例2:遍历字典
  8. dic={"k1":111,'K2':2222,"k3":333}
  9. for x in dic: # for 循环默认取的是字典的key赋值给变量名k
  10. print(x,dic[x])
  11. # 案例3:遍历字符串
  12. for x in "hello":
  13. print(x)
  14. msg="you can you up,no can no bb"
  15. for x in msg:
  16. print(x)
  • 总结for循环与while循环的异同
    • 1、相同之处:
      • 都是循环,for循环可以干的事,while循环也可以干
    • 2、不同之处:
      • while循环称之为条件循环,循环次数取决于条件何时变为假
      • for循环称之为”取值循环”,循环次数取决in后包含的值的个数

for+break:同while循环一样

  1. for i in [11,22,33,44,55]:
  2. if i == 33:
  3. break
  4. print(i)

for+continue:同while循环一样

  1. for i in [11,22,33,44,55]:
  2. if i == 33:
  3. continue
  4. print(i)

for+else:同while循环一样

  1. for i in [11,22,33,44,55]:
  2. if i == 33:
  3. break
  4. print(i)
  5. else:
  6. print('++++++++>')

range 关键字

for + range控制循环次数:range()

  • in后直接放一个数据类型来控制循环次数有局限性:
    • 当循环次数过多时,数据类型包含值的格式需要伴随着增加 ```python

      range功能介绍

      第一种:一个参数 从0开始 顾头不顾尾

      for i in range(10): print(i)

第二种:两个参数 自定义起始位置 顾头不顾尾

for i in range(4, 10): print(i)

第三种:三个参数 第三个数字用来控制等差值

for i in range(2, 100, 10): print(i)

“””

range在不同版本的解释器中 本质不同

  1. python2.Xrange会直接生成一个列表
  2. python2.X中有一个xrange也是迭代器(老母猪)

在python3.X中range是一个迭代器(老母猪) 节省内存空间 python2.X中xrange就是python3.x里面的range “””

python2版本演示

‘’’

range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(1,9) # 1…8 [1, 2, 3, 4, 5, 6, 7, 8]

range(1,9,1) # 1 2 3 4 5 6 7 8 [1, 2, 3, 4, 5, 6, 7, 8] range(1,9,2) # 1 3 5 7 [1, 3, 5, 7] ‘’’

for i in range(30): print(‘===>’) username=’kevin’ password=’123’ for i in range(3): inp_name = input(‘请输入您的账号:’) inp_pwd = input(‘请输入您的密码:’)

  1. if inp_name == username and inp_pwd == password:
  2. print('登录成功')
  3. break

else: print(‘输错账号密码次数过多’)

  1. <a name="35e0727e"></a>
  2. ### enumerate 关键字
  3. **for + enumerate**
  4. ```python
  5. i,name=(0,"kevin")
  6. for i,name in enumerate(["kevin","tom","jack"]): # [(0,"kevin"),(1,"tom"),(2,"jack")]
  7. print(i,name)
  8. for x in enumerate({"k1":111,"k2":2222,"k3":3333}):
  9. print(x)

for循环的嵌套使用

  1. # for i in range(3):
  2. # for j in range(5):
  3. # print("*", end='')
  4. # print()
  5. for i in range(1, 10):
  6. for j in range(1, i + 1):
  7. print('%s*%s=%s' % (i, j, i * j), end=' ')
  8. print()