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

垃圾回收机制

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

1引用计数

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

当数据身上计数值为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 @ 2022-09-27 19:36  冰柠檬檬  阅读(60)  评论(0)    收藏  举报