流程控制
流程控制
什么是流程控制
控制流程的执行流程
流程控制的分类
顺序结构:从上往下依次执行
分支结构:根据条件判断真假,执行不同的子代码
循环结构:根据条件判断是否重复执行子代码
必知必会
- 在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,并且输入的密码是否等于123
if 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是否为True
while is_flag:
# 1.输入用户名 strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
user_name = input("请输入用户名:").strip()
# 2.输入密码
password = input("请输入密码:").strip()
# 3.判断输入的用户名是否等于kevin,并且输入的密码是否等于123
if user_name == 'kevin' and password == '123':
# 4.判断条件为True,执行此代码
print("欢迎用户%s" % user_name)
# 8.判断is_flag是否为True
while is_flag:
# 9.判断为True,输入指令
cmd = input("请输入指令:").strip()
print("正在执行指令:%s" % cmd)
# 10.判断指令是否为q
if cmd == 'q':
# 11.判断是q执行此代码
print("bye,bye~")
# 12.设置is_flag全局变量值为False
is_flag = False
else:
# 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 = 1
else:
# 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 requests
url = 'https://www.changchen.cc/archives/%s/'
for i in range(0, 100, 1):
real_url = url % i
response = str(requests.get(real_url))
if '200' in response:
print(real_url)
# 通过代码请求页面获取页面数据
# 然后根据业务需求筛选出特定的内容