流程控制之if 判断,流程控制之while循环,流程控制之for 循环
流程控制
流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:
-
顺序结构:自上而下依次运行(之前我们写的代码都是顺序结构)
-
分支结构:在运行过程中根据条件的不同可能会执行不同的流程(用到if判断)
-
循环结构:在运行过程中有些代码需要反复执行(用到while与for)
分支结构:if判断
必知必会:
- 1、条件都会转成布尔值,从而决定代码是否执行
- 2、在python中使用缩进来表示代码的从属关系
- 3、并不是所有代码都可以拥有子代码
- 4、同属于你某个代码的多行子代码必须要保持相同的缩进量
- 5、在python中推荐使用相同缩进(四个空格表示一个缩进)来标识一组代码块(上一行代码结尾如果是冒号,那么下一行代码必须缩进)
什么是分支结构
分支结构就是根据条件判断的真假去执行不同分支对应的子代码
为何要用分支结构
为了让计算机像人一样根据条件的判断结果去做不同的事情
用if关键字来实现分支结构
if 条件1: ... 条件1成立后执行的子代码块 elif 条件2: ... 条件1不成立,条件2成立后执行的子代码块 else: ... 上述条件都不满足就走这段
注意:
-
条件可以是任意表达式,但执行结果必须为布尔类型 在if判断中所有的数据类型也都会自动转换成布尔类型
- None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
- 其余均为True
单if分支结构
if 条件: ... 条件成立后执行的子代码块 print("end...") # 案例:年龄小于22,叫小伙子 age = 20 if age < 22: print("毛儿都没长齐的家伙")
if..else连用(双分支)
if 条件: ... 条件成立后执行的子代码块 else: ... if条件不成立就走这段 # 案例:猜年龄 age = 22 if age < 20: print("小伙子好") else: print("傻不拉几的")
if...elif...else连用(多分支)
if 条件1: ... 条件1成立后执行的子代码块 elif 条件2: ... 条件1不成立,条件2成立后执行的子代码块 elif 条件3: ... 条件1和2都不成立,条件3成立后执行的子代码块 else: ... 上述所有条件都不成立就走这段 # 案例: # 如果成绩 >= 90:优秀 # 如果成绩 >= 80且< 90:良好 # 如果成绩 >= 70且< 80:普通 # 其他情况:很差 score = 83 if score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 70: print("普通") else: print("很差")
if判断之嵌套
# 一定要图文相结合去消化理解吸收 # 案例:在相亲的基础上继续,如果牵手成功,那么:在一起,否则。。。 age = 26 height = 165 weight = 99 is_success = True if age < 28 and height > 160 and weight < 100: print('小姐姐能否牵手') # 判断小姐姐是否会牵手 if is_success: print('吃饭 看电影 天黑了...') else: print('去你妹的 变态!') else: print('可惜了')
循环结构:while循环
-
什么是while循环
- 循环就是重复做某件事,while循环是Python提供第一种循环机制称之为:条件循环
-
为何要有while循环
- 为了控制计算机能够像人一样去重复做某件事
while循环基本语法
while 条件: ... 条件成立之后循环执行的子代码块 """ while的运行步骤: 1、如果条件为真,那么依次执行子代码块 2、执行完毕后再次判断条件,如果条件为True则再次执行子代码块如果条件为False,则循环终止 """ while True: # 1.获取用户输入的用户名和密码 username = input('请输入用户名>>>:') password = input('请输入密码>>>:') # 2.判断用户名和密码是否正确 if username == 'jack' and password == '123': print('登录成功!') else: print('登录失败,请重新输入!') # 注意:死循环---》条件永远为True
结束while循环的两种方式
方式一:全局标志位
- 特点:等到本次循环体代码运行完毕后,下一次循环判断条件时才会生效
# 标志位的使用 count = 0 flag = True while tag: if count == 5: flag = False # 把条件改为False print(i) count += 1
方式二:break
- 特点:break立即结束本层while循环
count = 0 tag = True while tag: if count == 5: # tag = False break print(i) count += 1
while嵌套
while循环嵌套+全局标志位的使用
- 针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,“全局标志位”就让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改成False,则所有层的循环都结束
flag = True while flag: # 第一层循环 while flag: # 第二层循环 flag = False # tag变为False,所有while循环的条件都变为False # 案例: flag = True while flag: inp_user = input("请输入用户名>>>: ") inp_pwd = input("请输入密码>>>: ") if inp_user == "jack" and inp_pwd == "123": print('登录成功') # break flag = False else: print('用户名或密码错误')
while循环嵌套+break的使用
- 如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
while True: # 第一层循环 while True: # 第二层循环 while True: # 第三层循环 break # 终止第三层循环 break # 终止第二层循环 break # 终止第一层循环 # 案例: while True: inp_user = input("请输入用户名>>>: ") inp_pwd = input("请输入密码>>>: ") if inp_user == "jack" and inp_pwd == "123": print('登录成功!') while True: print(""" 0 退出 1 取款 2 存款 3 转账 """) choice = input("请输入您的命令编号:") if choice == "0": break elif choice == "1": print("正在取款。。。") elif choice == "2": print("正在存款。。。") elif choice == "3": print("正在转账。。。") else: print("输入的指令不存在") break else: print('用户名或密码错误')
while+continue:跳过本次循环,直接进入下一次循环
# 使用while循环打印出0-5但是不打印2和4 # 1.定义一个起始变量 count = 0 # 2.循环 while count < 6: if count == 2 or count == 4: count += 1 continue # continue同级别之后千万别写代码,写了也不会运行 # 3.打印变量的值 print(count) # 4.变量值自增1 count += 1 """ continue会让循环体代码直接回到条件判断处重新判断 """ # 案例: while True: inp_user = input("username>>>: ") inp_pwd = input("password>>>: ") # 判断用户名和密码是否正确 if inp_user == "jack" and inp_pwd == "123": print('登录成功') # 输入正确登录成功 break # 结束循环 else: print('用户名或密码错误') # continue # 一定不要加在最后一步
while+else:else的子代码块会在while循环正常死亡时运行,没有被break干掉就叫正常死亡
# 案例一:正常死亡,循环正常执行 count = 0 while count < 5: if count == 2: count += 1 continue print(count) count += 1 else: print('====>') # 案例二:非正常死亡,如果执行过程中被break,就不会执行else的语句 count = 0 while count < 5: if count == 2: break print(count) count += 1 else: print('====>')
死循环:条件永远为True
while True: print(1) """死循环会让CPU极度繁忙 甚至奔溃"""
小练习:
""" 猜年龄的游戏 普通要求 用户可以有三次猜错的机会 如果过程中猜对了直接退出 拔高要求 三次机会用完之后提示用户是否继续尝试 如果是则再给三次机会 如果否则直接结束 """ real_age = 18 # 定义固定的年龄变量 count = 0 # 定义输入次数变量 while True: # 三次机会用完会执行 if count == 3: choice = input("三次机会已用完啦!是否继续?\n重新请输入'q',退出请输入't'>>>:") if choice == 'q' or choice == 'Q': count = 0 # 将猜测次数置为0 else: print('游戏已结束'.center(35, '=')) break print('猜年龄游戏'.center(35, '*')) age = int(input('请输入年龄>>>:')) if age < real_age: print('害!猜小了,你还有:%s 次机会!' % (2 - count)) elif age > real_age: print('害!猜大了,你还有:%s 次机会,!' % (2 - count)) else: print('好家伙猜对了,真厉害呀!') break count += 1
循环结构:for循环
-
1、什么是for循环
- 循环就是重复做某件事,for循环是python提供第二种循环机制
-
2、为何要有for循环
- 理论上for循环能做的事情,while循环都可以做
- 之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁
for循环基本语法
for 变量名 in 可迭代对象: # 可迭代对象可以是字符串,列表,字典,元组,集合 ... for循环体代码 # 例1 for i in ['a','b','c']: print(i) # 运行结果 a b c # 参照例1来介绍for循环的运行步骤 # 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码 # 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码 # 步骤3: 重复以上过程直到列表中的值读尽 for循环的基本用法
# 案例1:遍历列表 names = ["kevin", "tom", "jack", "lili", "lxx", "xxx"] for x in names: print(x) for x,y in [["name","kevin"],["age",18],["gender","male"]]: # x,y = ['name', 'kevin'] print(x,y) # 案例2:遍历字典 dic={"k1":111,'K2':2222,"k3":333} for x in dic: # for 循环默认取的是字典的key赋值给变量名k print(x,dic[x]) # 案例3:遍历字符串 for x in "hello": print(x) msg="you can you up,no can no bb" for x in msg: print(x)
- 总结for循环与while循环的异同
-
1、相同之处: 都是循环,for循环可以干的事,while循环也可以干 2、不同之处: while循环称之为条件循环,循环次数取决于条件何时变为假 for循环称之为"取值循环",循环次数取决in后包含的值的个数
-
for+break:同while循环一样
for i in [11,22,33,44,55]: if i == 33: break print(i)
for+continue:同while循环一样
for i in [11,22,33,44,55]: if i == 33: continue print(i)
for+else:同while循环一样
for i in [11,22,33,44,55]: if i == 33: break print(i) else: print('++++++++>')
range 关键字
for + range控制循环次数:range()
- in后直接放一个数据类型来控制循环次数有局限性:
- 当循环次数过多时,数据类型包含值的格式需要伴随着增加
# 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) """ 扩展知识 https://movie.douban.com/top250 第一页 https://movie.douban.com/top250?start=25&filter= 第二页 https://movie.douban.com/top250?start=50&filter= 第三页 https://movie.douban.com/top250?start=75&filter= 第四页 https://movie.douban.com/top250?start=0&filter= 推测第一页 """ base_url = "https://movie.douban.com/top250?start=%s&filter=" for i in range(0, 250, 25): print(base_url % i) """ range在不同版本的解释器中 本质不同 在python2.X中range会直接生成一个列表 在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('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') break else: print('输错账号密码次数过多')
enumerate 关键字
for + enumerate
i,name=(0,"kevin") for i,name in enumerate(["kevin","tom","jack"]): # [(0,"kevin"),(1,"tom"),(2,"jack")] print(i,name) for x in enumerate({"k1":111,"k2":2222,"k3":3333}): print(x)
for循环的嵌套使用
复制# for i in range(3): # for j in range(5): # print("*", end='') # print() for i in range(1, 10): for j in range(1, i + 1): print('%s*%s=%s' % (i, j, i * j), end=' ') print()
分类:
python 入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律