Python流程控制
流程控制
流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(从上往下依次执行)、分支结构(if判断)、循环结构(while与for)
分支结构
-
什么是分支结构
分支结构就是根据条件判断的真假去执行不同分支对应的子代码块。
-
为什么要用分支结构
人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就要带伞
所以程序中必须有相应的机制来控制计算机具备人的这种判断能力
-
如何使用分支结构
-
if语法
用if关键字来实现分支结构,完整语法如下:
# 1.单if分支结构 """ if 条件: 条件成立之后执行的子代码块 """ # 2.if与else连用 """ if 条件: 条件成立之后执行的子代码块 else: 条件不成立的情况下执行的子代码块 ps:if与else连用 两者的子代码永远只会执行一个 """ # 3.if elif else三者连用 """ if 条件1: 条件1成立之后执行的子代码块 elif 条件2: 条件1不成立 条件2成立之后执行的子代码块 elif 条件3: 条件1和2都不成立 条件3成立之后执行的子代码块 ... else: 上述条件都不成立 执行的子代码块 ps:elif可以有多个 三者连用也是只会执行其中一个子代码块 """ # 注意: # 1、Python中用相同缩进(4个空格表示一个缩进,在Python中推荐使用四个空格来缩进)来标识一组代码块,表示代码的从属关系,同一组代码会自上而下依次运行 # 2、条件可以是任意表达式,但执行结果必须为布尔类型 # 在if判断中所有的数据类型也都会自动转换成布尔类型 # 2.1 None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False # 2.2、其余情况均为True # 3、并不是所有的代码都可以拥有子代码 # 4、同属于某个代码的多行子代码 必须要保持相同的缩进量 # ps:小技巧:上一行代码的结尾如果是冒号 那么下一行代码必缩进
-
if应用案例
案例1:
如果:女人的年龄 > 30岁,那么:叫阿姨
age_of_girl = 31 if age_of_girl > 30: print('阿姨好')
案例2:
如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐姐
age_of_girl = 18 if age_of_girl > 30: print('阿姨好') else: print('小姐好')
案例3:
如果:女人的年龄 >= 18并且 < 22岁并且身高 > 170并且体重 <100 并且是漂亮的,那么:表白,否则:阿姨好
age_of_girl = 18 height = 171 weight = 99 is_beautiful = True if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_beautiful == True: print('表白...') else: print('阿姨好')
案例4:
如果:成绩 >= 90,那么:优秀
如果成绩 >= 80且 < 90,那么:良好
如果成绩 >= 70且 < 80,那么:普通
其他情况:一般
score = input('>>: ') score = int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('一般')
案例5:
if嵌套
# 在表白的基础上继续: # 如果表白成功,那么:在一起 # 否则:打印。。。 age_of_girl = 18 height = 171 weight = 99 is_beautiful = True success = False if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_beautiful == True: if success: print('表白成功,在一起') else: print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...') else: print('阿姨好')
-
if练习题
# 1、编写一个用户登录功能 用户名是jason 密码是123 # 用户如果输入正确则打印欢迎光临,楼下雅座请! 否则登录失败 """ 1.先写思路 注释 流程 2.再动手实现代码 """ # 1.获取用户输入的用户名和密码 username = input('username>>>:') password = input('password>>>:') # 2.判断用户名和密码是否正确 if username == 'jason' and password == '123': print('欢迎光临,楼下雅座请!') else: print('您输入的用户信息有误,登陆失败') # 2、根据用户名的不同打印不同的用户身份 # jason:管理员 tony:安保人员 kevin:财务 jack:销售 其他:普通员工 # 1.获取用户名 username = input('username>>>:') # 2.判断用户名身份 if username == 'jason': print('管理员') elif username == 'tony': print('安保人员') elif username == 'kevin': print('财务') elif username == 'jack': print('销售') else: print('普通员工')
-
循环结构
-
什么是循环结构
循环结构就是重复执行某段代码块
-
为什么要用循环结构
人类某些时候需要重复做某件事情,比如:吃饭、睡觉、工作等…
所以程序中必须有相应的机制来控制计算机具备人的这种循环做事的能力
-
如何使用循环结构
-
while循环语法
Python中有while与for两种循环机制,其中while循环称之为条件循环,语法如下:
while 条件: 代码1 代码2 代码3 ...... # while的运行步骤: # 步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、...... # 步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止
插图:while循环
-
while循环应用案例
案例一:while循环的基本使用
用户认证程序
# 用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误 username = "jason" password = "123" inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") else: print("输入的用户名或密码错误!") # 通常认证失败的情况下,会要求用户重新输入用户名和密码进行验证,如果我们想给用户三次试错机会,本质就是将上述代码重复运行三遍,你总不会想着把代码复制3次吧。。。。 username = "jason" password = "123" # 第一次验证 inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") else: print("输入的用户名或密码错误!") # 第二次验证 inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") else: print("输入的用户名或密码错误!") # 第三次验证 inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") else: print("输入的用户名或密码错误!") # 即使是小白的你,也觉得的太low了是不是,以后要修改功能还得修改3次,因此记住,写重复的代码是程序员最不耻的行为。 # 那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦(使用while循环实现) username = "jason" password = "123" # 记录错误验证的次数 count = 0 while count < 3: inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") else: print("输入的用户名或密码错误!") count += 1
案例二:while+break的使用
使用了while循环后,代码确实精简多了,但问题是用户输入正确的用户名密码以后无法结束循环,那如何结束掉一个循环呢?这就需要用到break了!
username = "jason" password = "123" # 记录错误验证的次数 count = 0 while count < 3: inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") break # 用于结束本层循环 else: print("输入的用户名或密码错误!") count += 1
案例三:while循环嵌套+break
如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
username = "jason" password = "123" count = 0 while count < 3: # 第一层循环 inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") while True: # 第二层循环 cmd = input('请输入您的指令>>>: ') if cmd == 'quit': break # 用于结束本层循环,即第二层循环 print('run <%s>' % cmd) break # 用于结束本层循环,即第一层循环 else: print("输入的用户名或密码错误!") count += 1
案例四:while循环嵌套+tag(全局标志位)的使用
针对嵌套多层的while循环,如果我们的目的很明确就是要在某一层直接退出所有层的循环,其实有一个窍门,就是让所有while循环的条件都用同一个变量,该变量的初始值为True,一旦在某一层将该变量的值改为False,则所有层的循环结束
username = "jason" password = "123" count = 0 tag = True while tag: inp_name = input("请输入用户名:") inp_pwd = input("请输入密码:") if inp_name == username and inp_pwd == password: print("登陆成功") while tag: cmd = input('>>: ') if cmd == 'quit': tag = False # tag变为False,所有while循环的条件都变为False break print('run <%s>' % cmd) break # 用于结束本层循环,即第一层循环 else: print("输入的用户名或密码错误!") count += 1
案例五:while+continue的使用
break代表结束本层循环,而continue则用于结束本次循环,直接进入下一次循环
# 打印1到10之间,除7以外的所有数字 number = 11 while number > 1: number -= 1 if number == 7: continue # 结束掉本次循环,即本次循环continue之后的代码都不会运行了,而是直接进入下一次循环 print(number)
案例六:while+else的使用
在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束
count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 # 没有被break打断,所以执行了该行代码 -----out of while loop ------
如果执行过程中被break,就不会执行else的语句
count = 0 while count <= 5 : count += 1 if count == 3: break print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 -----out of while loop ------ # 由于循环被break打断了,所以不执行else下的输出语句
练习1:
寻找1到100之间数字7最大的倍数(结果是98)
练习2:
猜年龄
-
for循环语法
循环结构的第二种实现方式是for循环,for循环可以做的事情while循环都可以实现,之所以用for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁
for循环语法如下:
for 变量名 in 可迭代对象: 代码一 代码二 ... # 例1 for item in ['a', 'b', 'c']: print(item) # 运行结果 a b c # 参照例1来介绍for循环的运行步骤 # 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码 # 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码 # 步骤3: 重复以上过程直到列表中的值读尽
-
for循环应用案例
案例一:打印数字0-5
# 简单版:for循环的实现方式 for count in range(6): # range(6)会产生从0-5这6个数 print(count) # 复杂版:while循环的实现方式 count = 0 while count < 6: print(count) count += 1
案例二:遍历字典
# 简单版:for循环的实现方式 for k in {'name':'jason','age':18,'gender':'male'}: # for 循环默认取的是字典的key赋值给变量名k print(k) # 复杂版:while循环确实可以遍历字典,会在迭代器部分详细介绍
案例三:for循环嵌套
#请用for循环嵌套的方式打印如下图形: ***** ***** ***** for i in range(3): for j in range(5): print("*",end='') print() # print()表示换行
注意:break 与 continue也可以用于for循环,使用语法同while循环一样
练习一:
打印九九乘法表
练习二:
打印金字塔
-