流程控制
流程控制
什么是流程控制
控制流程的执行流程
流程控制的分类
顺序结构:从上往下依次执行
分支结构:根据条件判断真假,执行不同的子代码
循环结构:根据条件判断是否重复执行子代码
必知必会
- 在python中使用缩进来表示代码的从属关系
- 并不是所有的代码都可以有子代码
- 如果多行代码同属于一个父代码,就要保证相同的缩进
- 相同缩进的代码彼此之间按照顺序结构执行,没有从属关系
补充:一行代码冒号(相当于要拥有子代码)结束,那么紧挨着下一行必是缩进
分支结构
语法结构
if 条件1:条件1成立执行的代码块
if与else分支
语法结构
if 条件1:条件1成立执行的代码块else:条件1不成立执行的代码块
if与elif与else分支
语法结构
if 条件1:条件1成立执行的代码块elif 条件2:条件1不成立,条件2成立执行的代码块elif 条件3:条件1不成立,条件2也不成立,条件3成立执行的代码块else:条件1、2、3都不成立执行的代码块
if 嵌套
语法结构
if 条件1:条件1成立执行的代码块if 条件2:条件1成立,并且条件2也成立执行的代码块else:条件1成立,但条件2不成立执行的代码块else:条件1不成立执行的代码块
分支结构练习题
练习一
编写一个用户登录程序,如果用户名是kevin并且密码是123 则打印登录成功,如果不是则打印用户名或密码错误
# 1.输入用户名 strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列user_name = input("请输入用户名:").strip()# 2.输入密码password = input("请输入密码:").strip()# 3.判断输入的用户名是否等于kevin,并且输入的密码是否等于123if user_name == 'kevin' and password == '123':# 4.判断条件为True,执行此代码print("欢迎用户%s" % user_name)else:# 5.判断条件为False,执行此代码print("密码或者账号错误")
练习二
编写一个成绩评判系统,如果成绩大于90 则打印优秀,如果成绩大于80 则打印良好,如果成绩大于70 则打印一般,如果成绩大于60 则打印及格,如果成绩小于60 则打印挂科
# 1.输入你的成绩score = input("输入你的成绩")# 2.判断输入的是数字,isdigit()方法检测字符串是否只由数字组成while not score.isdigit():# 3.判断为不是,执行此代码score = input('请输入数字,重新输入你的成绩 ')# 4.强制将输入数据类型,转换为int类型score = int(score)# 5.如果大于90,执行子代码if score > 90:print('优秀')# 6.如果大于80,执行子代码elif score > 80:print('良好')# 7.如果大于70,执行子代码elif score > 70:print('一般')# 8.如果大于60,执行子代码elif score > 60:print('及格')# 9.其他情况,执行子代码else:print('挂科')
循环结构
while 循环语法
语法结构
while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立
while与 break 使用
语法结构
while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立break # 用于结束本层循环(break只能结束所在那层循环)
while 与 continue 使用
语法结构
while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立continue # 用于结束本次循环,直接开始下一次循环
while 与else 使用
语法结构
while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立else:循环体代码正常运行结束 则会执行该子代码块
while 嵌套
语法结构
while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立if 条件1:条件1成立执行的代码块while 条件1:条件1成立执行的循环体代码块循环体代码块执行完毕之后再次进行判断条件,直至条件不成立else:条件1不成立执行的代码块
while嵌套与 “变量名”使用
在while循环嵌套很多层,如果要在某一层直接退出所有循环,可以让在while循环的条件共用一个变量名,该变量的初始变量值为True,在需要结束的循环层将变量值改成False,则所有循环层都结束
使用
编写一个用户登录程序,如果用户名是kevin并且密码是123 则进入输入指令系统,按键q可以结束程序,如果不是则打印用户名或密码错误,并重复登录
# 6.定义一个变量名is_flag = True# 7.判断is_flag是否为Truewhile is_flag:# 1.输入用户名 strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列user_name = input("请输入用户名:").strip()# 2.输入密码password = input("请输入密码:").strip()# 3.判断输入的用户名是否等于kevin,并且输入的密码是否等于123if user_name == 'kevin' and password == '123':# 4.判断条件为True,执行此代码print("欢迎用户%s" % user_name)# 8.判断is_flag是否为Truewhile is_flag:# 9.判断为True,输入指令cmd = input("请输入指令:").strip()print("正在执行指令:%s" % cmd)# 10.判断指令是否为qif cmd == 'q':# 11.判断是q执行此代码print("bye,bye~")# 12.设置is_flag全局变量值为Falseis_flag = Falseelse:# 5.判断条件为False,执行此代码print("密码或者账号错误")
while 死循环
语法结构
while True:循环体代码块,除非遇到break
补充:死循环会影响电脑的性能,一直占用CPU工作,甚至会造成硬件的损坏
for 循环语法 (高频率)
语法结构
for 变量名 in 循环对象 # 可以是字符串、列表、字典、元祖、集合循环体代码块 # 每次执行都会依次将循环对象的元素赋值给变量名
⚠️注意:
- 对于
for循环语法结构中的变量名,应该是见名知意 - 循环字典只能取到字典中的
key,value无法直接获取 - 循环字典、集合是无序的
for 与 break使用
语法结构
for 变量名 in 循环对象 # 可以是字符串、列表、字典、元祖、集合循环体代码块 # 每次执行都会依次将循环对象的元素赋值给变量名break # 用于结束本层循环(break只能结束所在那层循环)
for 与 continue使用
语法结构
for 变量名 in 循环对象 # 可以是字符串、列表、字典、元祖、集合循环体代码块 # 每次执行都会依次将循环对象的元素赋值给变量名continue # 用于结束本次循环,直接开始下一次循环
for嵌套
语法结构
for 变量名 in 循环对象 # 可以是字符串、列表、字典、元祖、集合循环体代码块 # 每次执行都会依次将循环对象的元素赋值给变量名for 变量名 in 循环对象 # 可以是字符串、列表、字典、元祖、集合循环体代码块 # 每次执行都会依次将循环对象的元素赋值给变量名
range函数用法
函数语法*
range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如
range(5)等价于range(0,5) - stop: 计数到 stop 结束,但不包括 stop。例如:
range(0, 5)是[0, 1, 2, 3, 4]没有5 - step:步长,默认为1。例如:
range(0, 5)等价于range(0, 5, 1)
补充:
range在python2 python3的区别
- 在
python2中range直接输出是个列表,在元素很多的情况下比较占用空间 - 在python2中有一个
xrange其实就是python3里面的range python3中range()返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
循环结构练习题
练习一
编写一个猜年龄的游戏,如果不对的情况下可以猜三次 如果对了直接结束,三次机会用完之后提示用户是否继续猜测,如果用户输入了y,则再给用户三次机会,如果用户输入n则直接结束
# TODO:写任何业务 都应该先搭建主体功能 之后再考虑配套优化# 1.定义真是的年龄real_age = 18# 7.定义一个记录用户猜测次数的计数器guess_count = 1# 5.将需要反复执行的代码缩进到while子代码中while True:# 9.判断当前用户到底猜测了几次if guess_count == 4:# 10.提示用户已经尝试了三次 是否继续尝试is_again = input('您已经尝试了三次 是否继续(y/n)>>>:')# 11.判断用户是否继续if is_again == 'y':# 12.重置用户尝试的次数guess_count = 1else:# 13.直接结束循环print('下次记得来玩哟!!!')break# 2.获取用户猜测的年龄guess_age = input('请输入猜测的年龄>>>:')# 3.将字符串类型的数字转换成整型类型的数字guess_age = int(guess_age) # 该代码可能会报错 暂且忽略# 4.比较猜测的年龄和真实年龄if guess_age > real_age:print('哎呀 讨厌 猜大了')guess_count += 1 # 8.猜错了就应该自增依次elif guess_age < real_age:print('不好意思 没那么小')guess_count += 1 # 8.猜错了就应该自增依次else:print('哈哈哈 你真棒!!!')# 6.一旦猜对了 立刻结束循环break
练习二
打印一个金字塔
for current_level in range(1, max_level+1):for i in range(max_level-current_level):print("", end=" ")for j in range(2*current_level-1):print("*", end="")print()
小知识
什么是爬虫
通过编写代码去网络上爬取我们需要的数据
案例
import requestsurl = 'https://www.changchen.cc/archives/%s/'for i in range(0, 100, 1):real_url = url % iresponse = str(requests.get(real_url))if '200' in response:print(real_url)# 通过代码请求页面获取页面数据# 然后根据业务需求筛选出特定的内容
