流程控制-垃圾回收机制
垃圾回收机制与流程控制
垃圾回收机制
引用计数
数据值身上的引用计数
name = '123' # 引用计数为1
name1 = name # 引用计数+1
del name1 #引用计数-1
'''数据值每多绑定一个变量名那么计数+1 ,每del删除一个与相同数据值绑定的变量名 计数-1
当数据值的引用计数为0时,那么会被垃圾回收机制当做垃圾回收掉。'''
标记清除
主要针对循环引用问题
a1 = [6, 2] # 引用计数为1
a2 = [7, 8] # 引用计数为1
a1.append(a2) # a1 = [6, 2, [7, 8]]引用计数为2
a2.append(a1) # a2 = [7, 8, [6, 2]]引用计数为2
del a1 # 断开变量名a1 与列表的绑定关系后引用计数为1
del a2 # 断开变量名a2 与列表的绑定关系后引用计数为1
分带回收
根据数据值使用的次数来检测,检测数据使用次数越频繁那么监控频率越低
流程控制理论
- 控制事物的执行流程
顺序结构
从上往下执行
分支结构
根据条件的不同做出不同的流程
循环结构
根据某个条件出现重复
流程控制之必备知识
python中使用代码的缩进来表示此代码是否是子代码。
不是所有的代码都可以用子代码
目前有的: if else
如果有多行子代码同属于一个父代码,那么子代码需要保证相同的缩进值(TAB 子代码快捷键)
"""注意事项
一行代码需要编写子代码的时候那么这一行代码结尾要用冒号: 否则无效 子代码的缩进量一定比父代码多 否则和父代码平起平坐按照顺序执行"""
分支结构
单if分支
"""
语法结构
if 条件:
条件成立之后执行的子代码(可以有多行)
"""
# 回家就换拖鞋
a = input('你现在想去哪>>>:"')
if str == '回家':
print(换拖鞋)
if...else...分支结构
"""语法结构
if 条件:
条件成立后执行的子代码
else:
条件不成立后执行的子代码"""
a = input('你现在想去哪>>>:"')
if str == '回家':
print('换拖鞋')
else:
print('不去上网吗?')
if...elif...else分支结构
"""语法结构
if 条件1:
条件1成立之后执行的子代码
elif 条件2:
条件1不成立,条件2成立之后执行的子代码
else:
条件都不成立的情况下执行的子代码
elif可以写多个,子代码达成条件永远只会走一个"""
a = input('你国庆想几号回家?>>> ')
if a == 1:
print('那挺早啊')
elif a < 3:
print('没买到一号票吗')
elif a > 3:
print('那挺迟的')
else:
print('不回家了啊,那挺可惜的')
if嵌套
在if条件中还可以通过缩进的方法在子代码中使用if等分支
# 如果女孩子的年龄大于30说 哇我就喜欢你这年龄的加微信 否则那挺年轻啊
# 如果成功了 则去吃饭 看电影 开车回家车坏了. 否则 那算了吧
is_success = True
age = int(input('美女你今年多大啦'))
if age > 30:
print('哇我就喜欢你这年龄的,加微信')
if is_success:
print('吃饭 看电影 开车回家车坏了')
else:
print('那算了')
else:
print('那挺年轻啊')
循环结构
while
让一些代码反复的执行
'''语法结构
while 条件:
条件成立后执行的循环体代码
判断条件是否成立,如果成立的话执行循环体代码,.循环体代码执行完毕后 再次判断条件是否成立 如果成立则继续执行循环体代码 如果不成立则跳出循环'''
while True:
print('你好') # True成立则一直循环输出 你好
break # 强制结束循环体
while True:
print('你好')
break #强制结束循环体
continue #直接跳到条件判断处
a = 1
while a < 5:
a += 1
if a == 3:
continue # 达到3跳回到条件判断处
else:
print('你好')
作业:
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
username = input('请输入用户名:')# 获取用户输入
black_user_list = ['jason', 'kevin', 'tony', ] # 设定黑名单
if username in black_user_list: # 判断 username获取输入是否在黑名单里
print('您已被加入黑名单')
else: # 如果不是 那么获取用户输入密码:
pwd = input('请输入密码:')
if username == 'tank' and pwd == '123': # 判定 username and pwd 是否输入正确
print('登陆成功')
else: # 输入错误
print('用户名密码错误')
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
count_num = 1 # 设定一个数值
while True: # 循环条件成立开始循环
if count_num == 4: # 设定数值 等于4时
print('您只有3次机会')
break # 退出循环
else: # 次数不等于4时
username = input('name:') # 获取用户名输入
pwd = input('pwd:') # 获取密码输入
if username == '111' and pwd == '1': # 验证密码用户名密码是否正确
print('登陆成功')
break # 退出程序
else: # 用户名密码输入错误时
print('用户名或密码错误')
count_num += 1 # 循环次数+1 继续循环w
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
# 先定义用户年龄18
# real_age = 18
# count_num = 1 计数器为1
# while True:
# if count_num == 4: # 当计数器 等于4 时
# choice = input('只有三次机会啦,输入Y/N继续') # 选择 赋值 获取用户输入y/n
# if choice == 'y': # 如果choice 等于 y 时
# count_num = 1 # 计数器重置为 1
# else:
# print('下次再来玩') # 输入值不是y时,打印下次再来玩,结束程序
# break
# gusse_age = input('你猜我多大啦') # 获取用户猜的年龄
# if gusse_age > '18': # 判断猜大于18时
# print('猜大了')
# count_num += 1 # count_num次数+1
# elif gusse_age < '18': # 判断猜小于18时
# print('猜小了')
# count_num += 1 # count_num次数+1
# else:
# print('答对了')
# break