垃圾回收机制、流程控制、分支结构、循环结构
内容总结
-
垃圾回收机制
1、什么叫垃圾回收?
在内存中没有任何变量名指向的数据
2、针对垃圾数据在Python中有一套自动回收的方案
1、引用计数
内存中变量值身上有几个变量名绑定的引用计数就是几 只要不为0就不是垃圾
user = '鸡哥' # 数据值'鸡哥'身上的引用计数是1 user1 = user # 数据值'鸡哥'身上的引用计数+1 为2 del user1 # 数据值'鸡哥'身上的引用计数-1 为1 ''' 当数据值身上的引用计数为0的时候 就会被垃圾回收机制当做垃圾回收掉 当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收 '''
2、标记清除
当内存即将沾满的时候 python会自动暂停程序的执行 从头到尾的将内存中数据进行扫描一遍 并打上标 之后再一次性清除掉标记的数据
res1 = [11, 22] # 数据值的引用计数为1 res2 = [33, 44] # 数据值的引用计数为1 res1.append(res2) # [11, 22, [33, 44]] 数据值引用计数为2 res2.append(res1) # [33, 44, [11, 22]] 数据值引用计数为2
graph TB E(res1引用计数为1)-->|append+res2|res1数据值加了一个res2数据值-->|del res2减1|res1引用减1-->B(引用计数都是了1) A(res2引用计数为1)-->|append+res1|res2数据值加了一个res1数据值-->|del res1减1|res2引用减1-->B3、分代回收
垃圾回收机制的频繁运行也会有损耗各项资源 会将数据的监管分为三个层次 随着层次的下降监管的频 率下降
新生成的变量名会被python解释器放到新生代里面每个隔1分钟在Python中就会检查一遍他们的引用计数 如果有变量名的引用计数增加的多 那么Python就会把变量名从新生代放到青春代 青春代每个10分钟检查一次 如果再有引用计数增加的更多的就会把它放到老年代 老年代每过30分钟检查一次
-
流程控制
流程控制即控制事物的执行流程
python中会使用代码的缩进来表示代码的从属关系
分为三种结构
1、顺序结构:自上而下依次运行
2、分支结构:在运行过程根据条件的不同可能会执行不同的流程
3、循环结构:在运行过程中有些代码需要反复执行
必知必会
1、条件都会转化成布尔值从而决定子代码是否执行
2、在python中 使用缩进来表示代码的从属关系
3、并不是所有代码都可以拥有子代码
4、同属于某个代码的多行子代码 必须保持相同的缩进量 在python中通常使用4个空格来缩进
PS:上一行代码的结尾如果是冒号 那么下一行代码必缩进
-
分支结构
1、单if分支结构
if 条件: 条件成立之后执行的子代码 # 如果年龄小于18 叫未成年 eg: age = input('输入年龄') age = int(age) if age < 18: print('未成年')
graph TB A(输入年龄)-->B(判断年龄是否小于18)-->是则输出未成年2、if与else连用
if 条件: 条件成立执行的子代码 else: 条件不成立执行的子代码 PS:if与else连用 两者的子代码永远知会执行一个 # 如果年龄小于18 叫未成年 否则称成年人 eg: age = input('输入年龄') age = int(age) if age < 18: print('未成年') else: print('成年人')
graph TB A(输入年龄)-->B(判断年龄是否小于18)-->|小于18|则输出未成年 B-->|大于18|则输出成年人3、if elif else三者连用
if 条件1: 条件1成立执行的子代码 elif 条件2: 条件1不成立 条件2成立之后执行的子代码 elif 条件3: 条件1和2都不成立 条件3 成立之后执行的子代码 ...(elif可以有多个) else: 上述条件都不成立执行的子代码 PS:三者连用也只能执行其中一个子代码 # 根据成绩评判分类 大于90优秀 大于80良好 大于60及格 其他挂科 eg: age = input('请输入你的年龄>>>:') age = int(age) if age > 90: print('万万岁') elif age > 80: print('万岁') elif age > 70: print('千千岁') elif age > 60: print('千岁') else: print('百岁')
graph TB A(输入年龄)-->B(判断年龄)-->|条件1成立|大于90则输出万万岁 B-->|条件1不成立执行条件2|大于80则输出万岁 B-->|条件1 2都不成立执行条件3|大于70则输出千千岁 B-->|条件1 2 3都不成立执行条件4|大于60则输出千岁 B-->|前面条件都不成立则执行|否则则输出百岁-
循环结构
while循环
while 条件: 条件成立之后循环的子代码 1、先判断条件是否成立 2、如果成立则执行循环替代码 3、循环体代码执行完毕后再次回到条件判断处 判断条件是否成立 4、如果条件成立 则继续执行循环体代码 5、按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行 eg: count = 1 while count <5 : print('我想打游戏') count += 1
graph TB C(count=1时)-->A(条件判断小于5)-->B(则输出我想打游戏) B-.->|count+1|Cwhile+break
break # 强行结束循环体代码 while循环体代码一旦执行到break会直接结束循环 eg: while True: name = input('请输入你的名字>>>:') if name == 'jason': print('你好') break else: print('滚')
graph TB C(输入名字)-->A(条件判断是否等于jason)-->|是|B(break 结束) A-->|不是|D(打印滚) D-->Cwhile+continue
continue # 直接跳到条件判断处 当while循环体代码一旦执行到continue会结束本次循环 开始下一次循环 eg: count = 1 while count < 11: print('count') count += 1 if count == 4 continue
graph LR C(count=1)-->A(条件判断是否小于11)-->|小于4|打印count 打印count-->|+1|C A-->|等于4时|E(continue)-.->|跳过回到|Awhile+else
while 条件: 循环体代码 else: 循环体代码没有被强制结束的情况下 则执行完毕就会执行else子代码 eg: count = 1 while count < 4: print('我想打游戏') else: print('打个鸡毛')
graph TB A(count=1)-->B(条件判断)-->|小与4|D(我想打游戏) D-.->|+1|A D-->|以上循环代码执行完|F(打个鸡毛)
-
练习
1、练习一
根据用户输入内容打印其权限
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
username = input('请输入你的名字>>>:')
if username == 'jason':
print('超级管理员')
elif username == 'tom':
print('普通管理员')
elif username == 'jack' or username == 'rain':
print('普通用户')
else:
print('普通用户')
2、练习二
编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
black_user_list = ['jason', 'kevin', 'tony']
# 1.获取用户输入的用户名、密码
count = 1 # 8.引入计数器
while count < 4: # 10.条件判断是否小于4
user = input('请输入你的用户名>>>:')
pwd = input('请输入你的密码>>>:')
if user not in black_user_list: # 2.判断用户是不是在黑名单内
if user == 'oscar' and pwd == '123': # 4.判断输的用户名和密码是不是正确
print('登入成功') # 6.正确则输出成功
break # 7.结束循环
else:
print('用户名或密码输入错误') # 5.错误则提示
else: # 3.是黑客的话拒绝访问
print('拒绝访问')
count += 1 # 每输错一次计数加1
3、练习三
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
# 4.猜年龄游戏
real_age = 18
count = 0 # 11.引入计数
while True: # 10.加入循环
if count == 3: # 12.判断猜测失败次数达到了3次
index = input('是否继续输入y继续否侧退出>>>:') # 14.获取用户输入是否还要继续运行
if index == 'y': # 15.判断用户输入y还要继续
count = 0 # 17.则计数重新归0
else: # 18.否则输入其他则
print('欢迎再来')
break # 结束退出
else: # 13.不然则
guss_age = input('请输入你猜测的年龄>>>:') # 1.获取猜测的年龄大小
guss_age = int(guss_age) # 2.转换成一样的数据类型
if real_age > guss_age: # 3.判断输的小于与真实年龄对比
print('你猜的太小了') # 4.输出
count += 1
elif real_age < guss_age: # 6.判断输的大于真实年龄对比
print('你猜的太大了') # 7.输出
count += 1
else: # 8.输入正确
print('恭喜您猜对了')
break # 9.结束运行