python垃圾回收机制、流程控制理论、流程控制理论必备知识、分支结构、循环结构

垃圾回收机制

一些语言存放空间和释放都需要程序员自己去写代码完成,但是python不需要,python可以通过使用垃圾回收机制自动管理。

1引用计数

name = 'lei' 数据值lei引用计数为1
name1 = name 数据值lei引用计数+12
del name1 数据值引用计数-11

当数据身上计数值为0时就会被垃圾机制当作垃圾回收。

当数据值身上的引用计数不为0时永远不会被垃圾回收机制回收

2标记清除

为了解决循环引用的不足,python的底层不会单单只用引用计数器,引入了一个机制叫做标记清楚。主要针对循环引用问题。

height1 = [123, 321] # 引用计数为1
height2 = [111, 222] # 引用计数为1
height1.append(height2) #引用计数为2 height1 = [123, 321, 111, 222]
height2.append(height1)#引用计数为2 height1 = [ 111, 222 123, 321]
del height1 # 断开变量名height1与列表的关系
del height2 # 断开变量名height2与列表的关系

变为

当内存达到临界值时,程序会自动停止,然后扫面程序中所有的数据,并且给只产生循环引用的数据打上标志之后一次性清楚。

3分代回收

将第二个链表(可能存在循环引用的链表),维护成3个环状双向的链表:

0代: 0代中对象个数达到700个,扫描一次。

1代: 0代扫描10次,则1代扫描1次。

2代: 1代扫描10次,则2代扫描1次。

垃圾回收机制的频繁运行也会消耗各类资源,用0,1,2代分别对计数进行判断来处理数据价值。

流程控制理论

python流程控制大致可以分为三种:

  1. 顺序结构

  2. 分支结构

    事物执行会根据条件的不同做出不同的执行策略。

  3. 循环结构

    在编写代码时也会涉及到重复的执行某一段代码,这时就会用到循环控制语句。

    image-20220927155004731

流程控制必备知识

1.python中使用代码缩进来表示代码的从属关系。

name = 123
if name == 123:
print(name)

2并不是所有的代码都可以拥用缩进的子代码

print()
print()
#就不是缩进的子代码

3如果有多行子代码属于同一夫代码,那么这些子代码需要保证相同的缩进量。

print()
print()

4python中针对缩进量没有具体的要求,但是推荐4个空格。

5在某一行代码需要编写子代码时,那么比这一行代码的结尾肯定要冒号。

6相同缩进量的代码彼此之间平起平坐,按照顺序结构一次执行。

i = 5
if i < 10:
print(i)
print(i+1)
print(i+2)

分支结构

1.单if分支结构

if 条件
条件成立后才会被执行
i = 5
if i < 10:
print(i)
print(i+1)
print(i+2)

2.if...else...分支结构

if 条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码

3if...elif...else分支结构

if 条件1
条件1执行的代码
elif 条件2
条件1不成立条件2成立
elif 条件3:
条件1和条件2都不成立,条件3成立的子代码
else:
上述条件都不成立 执行的子代码

4if嵌套使用

proof = int(input("输入驾驶员每 100ml 血液酒精的含量:"))
if proof < 20:
print("驾驶员不构成酒驾")
else:
if proof < 80:
print("驾驶员已构成酒驾")
else:
print("驾驶员已构成醉驾")

运行结果为:

输入驾驶员每 100ml 血液酒精的含量:10
驾驶员不构成酒驾

循环结构

反复执行的代码

关键字while主要表达形式如下:

while 条件表达式:
语句

与 if 语句相似,while 循环的条件表达式也无须括号,且表达式末尾必须添加冒号。当条件表达式计算结果为 True 时,执行下一行缩进的语句;若条件表达式计算结果为 False,则跳过该条语句继续向下执行。例如:

n = 10
sum = 0
i = 1
while i <= n:
sum = sum + i
i += 1
print("1 到 %d 之和为:%d" %(n,sum))

运行结果如下图:

1先判断条件是否成立

2如果成立就生成循环体里面的代码

3循环体执行完毕后再次回到条件判断处,判断条件是否成立,如果成立则会执行循环体内的代码。

按照上述的规律,直到条件不成立结束循环体内的代码。

关键字

break # 强制退出

continue # 跳过条件判断处

# continue 和 break 用法
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非双数时跳过输出
continue
print i # 输出双数2、4、6、8、10
i = 1
while 1: # 循环条件为1必定成立
print i # 输出1~10
i += 1
if i > 10: # 当i大于10时跳出循环
break

作业

1.根据用户输入内容打印其权限
'''
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
user_ns = ['jason',]
user_ng = ['tom',]
user_ny = ['jack', 'rain']
while 1:
user = input("输入您的名字即可知道您的权限\n")
if user in user_ns:
print('超级管理员')
elif user in user_ng:
print('普通管理员')
elif user in user_ny:
print('业务主管')
else:
print("普通用户")
2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
black_user_list = ['jason', 'kevin', 'tony']
user_id = input("请输入用户名")
if user_id in black_user_list:
print("您在黑名单中")
elif user_id == "oscar":
password = input('输入密码')
if password == '123':
print("登陆成功")
else:
print("登录密码错误")
else:
print("登录名不正确")
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
black_user_list = ['jason', 'kevin', 'tony']
user_id = input("请输入用户名")
dl = 1
while dl < 3:
if user_id in black_user_list:
print("您在黑名单中")
dl += 1
user_id = input("请输入用户名")
if dl == 3:
print("您的次数已用完")
elif user_id == "oscar":
password = input('输入密码')
if password == '123':
print("登陆成功")
break
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
user_age = 18
dl = 1
while 1:
user_cage = input("请输入您猜的年龄")
user_cage = int(user_cage)
if user_cage > user_age:
print("猜大了")
elif user_cage < user_age:
print("猜小了")
else:
print("恭喜你猜对了")
break
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
user_age = 18
dl = 0
while 1:
user_cage = input("请输入您猜的年龄")
user_cage = int(user_cage)
if user_cage > user_age:
print("猜大了")
elif user_cage < user_age:
print("猜小了")
else:
print("恭喜你猜对了")
break
dl += 1
if dl == 3:
c = input("输入y表示继续给三次机会,n表示不想继续玩了:")
if c == "y":
dl = 0
elif c == "n":
print("玩家选择游戏结束")
else:
print("请输入正确字母")
break
posted @   冰柠檬檬  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示