垃圾回收机制与流程控制
1.垃圾回收机制
引用计数
数据值被引用的数量
eg:
name = 'timi' # 数据值timi身上的引用计数为1
name1 = name # timi身上的引用计数为2
当数据值身上的引用计数为0时,系统会认为此数据值已无任何作用,此时会被垃圾回收机制回收
反之就是数据值身上的引用计数不为0时不会被垃圾回收机制回收
标记清除
主要针对循环引用问题
某些时候数据值在没绑定变量名的情况下身上的引用计数不为0
eg:
a1 = [1, 2] # 引用计数为1
a2 = [3, 4] # 引用计数为1
a1.append(a2) # a1 = [1, 2, [3, 4]] 此时[3, 4]引用计数为2
a2.append(a1) # a2 = [3, 4, [1, 2]] 此时[1, 2]引用计数为2
del a1 #断开变量名a1与列表[1, 2]的绑定关系 [1, 2]引用计数为1
del a2 #断开变量名a2与列表[3, 4]的绑定关系 [3, 4]引用计数为1
此时列表[1, 2]与[3, 4]身上都没有绑定的变量名但是引用计数却不为0
针对此种情况就产生了标记清除,其工作原理是:当内存占用达到一定程度时,程序会自动扫描程序中的所有数据,然后给只产生循环引用的数据打上标记之后一次性清除
分代回收
垃圾回收机制的频繁运行也会损耗各项资源,因此程序在扫描程序中的所有数据时会给数据自动做一个分级,使用频率从低到高放入各个级别中,各个级别程序的扫描频率不同,
2.流程控制理论
流程控制就是控制事物的执行流程,总共可以分为三种
-
顺序结构
从上往下依次执行
-
分支结构
事物的执行过程会根据条件的不同执行过程和结果也不同
- 循环结构
事务的执行会根据某个条件出现重复
流程控制必备知识
-
python中使用代码的缩进来表示代码的从属关系,缩进量相同时代码的地位相同,按照先后顺序依次执行
从属关系:缩进的代码也就是子代码是否执行取决于它的上层代码
-
不是所有的代码都有子代码
-
当某一行代码需要编写子代码,结尾要加冒号
-
当有多行子代码属于同一个上层代码时,缩进量相同
-
pycharm中针对缩进量没有要求但是推荐使用四个空格(快捷键为tab)
3.流程控制之分支结构
单if分支结构
if 条件:
条件成立之后才会执行的代码块
username = input('请输入用户名:')
if username == 'timi':
print('你好')
if...else...分支结构
if 条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码
username = input('请输入您的账号密码:')
if username == 'timi':
print('登陆成功')
else:
print('账号密码错误')
if...elif...else...分支结构
if 条件1:
条件1成立之后执行的子代码
elif 条件2:
条件1不成立,条件2成立执行的子代码
elif 条件3:
条件1和2都不成立,条件3成立执行的子代码
else:
上述条件都不成立执行的子代码
eg:
score = int(input('请输入分数:'))
if score >= 700:
print('恭喜你被清华大学录取了')
elif score >= 600:
print('恭喜你被985录取了')
elif score >= 500:
print('恭喜你被一本大学录取了')
elif score >= 400:
print('恭喜你被专科大学录取了')
else:
print('复读吧,啥也不是!!!')
if的嵌套使用
就是在if的条件语句下面再加if条件
sex = input('看到一个人:')
if sex == '女':
print('过去看看')
appearance = input()
if appearance == '美女':
print('上去要微信')
is_success = input()
if is_success == '成功':
print('聊天,增进关系')
else:
print('对不起我有男朋友了')
else:
print('路过')
else:
print('重新找一个')
4.流程控制之循环结构
让一些代码反复执行
while 条件:
条件成立之后执行的循环体代码
具体流程就是:
1.先判断条件是否成立
2.条件成立执行循环体代码
3.循环体代码执行完成以后回到条件判断处
4.条件成立则继续执行循环体代码
5.循环体代码的运行会一直持续到条件不成立
eg:
num = 1
while num <= 10:
print(num)
num += 1
print('结束')
循环体其它操作
break # 强行结束循环体
while循环体代码执行到break时会直接结束循环
continue # 直接跳到条件判断处
while循环体代码执行到continue时会结束本次循环,开始下一次循环
while 条件:
循环体代码
else:
循环体代码没有被强制结束的情况下执行完毕就会执行else子代码
练习题
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_username = ['jason', 'kevin', 'tony']
username_list = {'jack': 111, 'rain': 222}
username = input('请输入用户名:')
if username in black_username:
print('您已被加入黑名单')
elif username in username_list:
pwd = int(input('请输入密码:'))
if pwd == username_list[username]:
print('成功登录')
else:
print('用户名密码错误')
else:
print('用户不存在')
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
username_list = {'jack': 111, 'rain': 222}
count = 1
while count <= 3:
username = input('请输入用户名:')
if username in username_list:
pwd = int(input('请输入密码:'))
if pwd == username_list[username]:
print('登陆成功')
break
else:
print('密码错误请重新登录')
count += 1
else:
print('用户名不存在请重新登录')
count += 1
else:
print('失败三次不允许登录')
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
count = 1
while count <= 3:
age = int(input())
if age > 18:
print('猜大了')
count += 1
elif age < 18:
print('猜小了')
count += 1
else:
print('猜对了')
break
if count > 3:
a = input('是否继续?(y/n)')
if a == 'y':
count -= 3
continue
else:
break
标签:username,循环体,流程,回收,else,垃圾,条件,print,代码
From: https://www.cnblogs.com/zyg111/p/16735999.html