流程控制
流程控制
流程控制理论
流程控制:
控制事物的执行流程
事物的控制流程可以分为三种:
顺序结构
分支结构
循环结构
ps:我们用到的最多的时分支结构和循环结构 很重要
在代码世界里 很多时候会出现三者结合
流程控制必备知识
1.python中使用代码的缩进来表示从属关系 (一般是4个空格 也可以用tab键)
从属关系:所进的代码(子代码)是否执行 取决于上面没有所进的代码(父代码)
2.并不是所有的关键字都能拥有缩进的子代码
if 关键字
3.如果多个子代码属于同一个父代码 那么这些子代码的缩进需要一样
4.当某一行代码需要编写子代码的时候 这一行的末尾一定要写冒号
5.相同缩进量的代码没有主次之分 按照顺序 自上而下执行
分支结构
1.单if分支结构
if 条件:
条件成立之后才会执行的代码
eg:
name = input('请输入您的姓名:')
if name == 'joyce':
print('姐姐好')
'''
判断获取用户输入的name是不是等于joyce
如果等于joyce就打印’姐姐好‘
'''
2.if...else分支
if 条件:
条件成立才会执行的代码
else:
条件不成立执行的代码
eg:
name = input('请输入您的姓名:')
if name == 'joyce':
print('姐姐好')
else:
print('你是谁')
'''
判断获取用户输入的name是不是joyce
如果是joyce就打印’姐姐好‘
如果不是joyce就打印’你是谁‘
'''
3.if..elif..else
if 条件1:
条件1成立执行的代码
elif 条件2:
条件1不成立 条件2成立执行的代码
else:
条件1 条件2都不成立执行的代码
eg:
name = input('请输入您的姓名:')
if name == 'joyce':
print('姐姐好')
elif name == 'jason':
print('哥哥好')
else:
print('你是谁')
'''
判断获取用户输入的name是不是joyce
如果是joyce就打印’姐姐好‘
如果是Jason就打印’哥哥好‘
如果两个都不是就打印’你是谁‘
'''
三个一起的使用的时候永远只会走一个分支
elif可以写多个
elif和else不能单独使用 必须结合if
4.if的嵌套
if 条件1:
条件1成立后执行的代码
if 条件2:
条件2成立后执行的代码
if 条件3:
条件3成立后执行的代码
else:
条件3不成立执行的代码
else:
条件2不成立执行的代码
else:
条件1不成立执行的代码
''' if 后面可以继续跟if 最后补elif 但是要注意 缩进是否与父代码一样'''
循环结构
1.while循环
while 条件:
条件成立后执行的代码(循环体代码)
'''
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕以后再次回到条件判断出 判断条件是否成立
4.如果成立 则继续执行循环体代码
5.按照上述规律执行 直到条件不成立才会结束循环体代码的执行
'''
结束循环体代码的两种方式
1.利用技术其固定循环次数
#循环打印5次“你好”
count = 1
while count < 6:
print('你好')
count += 1
'''
设置循环条件 count小于6的时候 执行打印‘你好’
每打印一次‘你好’ count+1 回到条件判断处
第二次循环开始时 count = 2 继续判断你条件是否成立
直到 count = 6是 结束循环
'''
2.在循环体内添加关键字强制结束
break
#循环打印1-10,打印到5结束打印
count = 1 #定义计数器
while count < 11: #循环打印次数为10
print(count) #打印计数器
count += 1 #计数器自增1
if count == 6: #当计数器等于6时
break #强制结束循环
#结果为:1 2 3 4 5
'''
定义计数器
循环打印次数为10
打印计数器
计数器自增1
计数器小于6不执行if判断 返回开始的条件判断处继续执行代码
count = 6时 执行if判断里的代码 break 强制结束
'''
continue
#循环打印1-5,到3跳过并继续打印
count = 1 #定义计数器
while count < 6: #循环打印次数为5
print(count) #打印计数器
count += 1 #计数器自增1
if count == 3: #当计数器=3时
count += 1 #计数器自增1
continue #结束本次循环开始下一次循环
#结果为:1 2 4 5
'''
定义计数器
循环打印次数为5
打印计数器
计数器自增1
计数器不等于3不执行if判断 返回开始的条件判断处继续执行代码
count = 3时 执行if判断里的代码 continue 跳过本次循环 直接开始下一次循环
'''
else
循环体代码没有被break强制结束的话 循环体代码全都执行完毕就会执行else子代码
count = 1
while count < 6:
print(count)
count += 1
else:
print('循环体代码全部执行完且没有被break!则执行else')
#结果为: 1 2 3 4 5 循环体代码全部执行完且没有被break!则执行else
死循环
死循环就是让程序无限执行某个代码文件 此时cpu使用率会持续上升 直到满负荷重启代码中不允许出现死循环
count = 10
while True:
count *= 100 # 计算机会循环执行*=100的结果值
循环的嵌套及全局标志位
1.一个break只能结束当前所在的那一层的循环
2.想一次性结束所有的循环就要有几个while 写几个break 注意break的位置一般是和while对应的
当while循环内嵌套了多个while循环时可以使用全局标志位
while True:
print(111)
while True:
print(222)
while True:
print(333)
#以上循环嵌套当我想结束所有while循环时需要给各个while循环内加break结束所有循环,这样做效率太低且当循环体代码较多时加break时易分不清加在哪里!
is_flag = True
while is_flag:
print(111)
while is_flag:
print(222)
while is_flag:
print(333)
is_flag = False
'''
只需要添加一个全局标志位,且在最内层把该标志位的True
当所有代码执行完毕时 最下面的全局标志位改位false
即可实现结束内外所有循环。
'''
2.for循环
一般for循环可以实现的代码while都可以实现 区别在于for循环在做遍历取值的时候比while要方便
for 变量名 in 待遍历的数据:
循环体代码
'''
从待遍历的数据中取出一个值给变量名 从上到下执行循环体代码 然后回到for开头在取第二次 直到把代编里的数据都取完
'''
1.while与for循环对比
循环打印列表中的数据值
l1 = [1,2,3,4]
#while
count = 0
while count < 4:
print(l1[count])
count += 1
'while需数出来列表中有几个数据值 然后定义计数器 循环条件小于数据值的数量 用列表索引取值每循环一次索引值自增1'
'当列表中数据值较多时while使用会非常不方便!'
#for
for i in l1:
print(i)
'for循环的变量名i会从给到他的数据值中从左到右依次赋值循环,直到没有数据值可给时自动结束(不需要给结束条件)。'
2.for循环的另一种用法
for i in 1,2,3:
print('z')
#结果为:打印了三行‘z’
'''
由此可以看出 待遍历的数据可以有多个 相当于循环的次数
如果是列表 则是列表中有多少数据值就会循环几次
如果打印的是变量名 结果就是待遍历的数据值
如果打印的是其他数据值 结果就是循环打印几次该数据值
'''
3.for循环支持遍历[取值]的数据类型
常见的有字符串、列表、字典、元组、集合
遍历字符串时打印出来的是单个的字符 且空字符也算一个字符
遍历字典的时候只有k参与
4.for结束循环体的方式
for+break
强制结束当前所在的循环体代码
#循环打印1-10,打印到5结束打印
for i in range(1, 11):
print(i)
if i == 5:
break
#结果为:1 2 3 4 5 各一行
'在想要强制结束之前也要设置结束条件 需注意打印位置的不同 产生的结果也不同 需了解执行流程才好判断'
for +continue
当执行到continue时结束本次循环 并回到循环体条件判断出开始下一次循环
#循环打印1-5,到3跳过并继续打印
for i in range(1,6):
if i==3:
continue
print(i)
#结果为:1 2 4 5 各一行
'需注意打印位置的不同 产生的结果也不同 需了解执行流程才好判断'
for+else
循环体代码没有被break强制结束 循环体代码全部执行完就会执行else子代码
count = 1
for i in range(3):
print(i)
else:
print('循环体代码全部执行完且没有被break!则执行else')
#结果为:0 1 2 循环体代码全部执行完且没有被break!则执行else 各一行
5.range方法
range可以理解为快速产生一个包含多个整数的列表 (产生整数的大工厂)
1)括号内只有一个数字,那就是从0到4结束(顾头不顾尾)
for i in range(5):
print(i)
#结果为:0 1 2 3 4 各一行
2)括号内有两个数字,第一个就是起始位置,第二个就是终止位置(顾头不顾尾)
for i in range(1,5):
print(i)
#结果为:1 2 3 4 各一行
3)括号内有三个数字,第一个是起始位置,第二个是终止位置,第三个是等差值(间隔)。同样顾头不顾尾
for i in range(1,10,3):
print(i)
#结果为:1 4 7 各一行
range实战案例
网络爬虫
使用代码爬取网络上我们需要的数据
项目需求
爬取所有页面的数据(博客园)
寻找规律
https://www.cnblogs.com/
https://www.cnblogs.com/#p2
https://www.cnblogs.com/#p3
https://www.cnblogs.com/#p4
大胆猜测:第一页是 https://www.cnblogs.com/#p1
'''
分页的规律 不同的网址有所区别
1.在网址里面有规律
2.内部js文件动态加载
'''
尝试编写代码产生博客园文章前两百页的网址:
a='https://www.cnblogs.com/#p%s'
for i in range(1,201):
print(a % i)