垃圾回收机制、流程控制、分支结构、循环结构

内容总结

  • 垃圾回收机制

    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
    
    
    append+res2
    del res2减1
    append+res1
    del res1减1
    res1引用计数为1
    res1数据值加了一个res2数据值
    res1引用减1
    引用计数都是了1
    res2引用计数为1
    res2数据值加了一个res1数据值
    res2引用减1

    3、分代回收

    ​ 垃圾回收机制的频繁运行也会有损耗各项资源 会将数据的监管分为三个层次 随着层次的下降监管的频 率下降

新生成的变量名会被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('未成年')
    
    输入年龄
    判断年龄是否小于18
    是则输出未成年

    2、if与else连用

    if 条件:
    	条件成立执行的子代码
     else:
        条件不成立执行的子代码
    PS:ifelse连用 两者的子代码永远知会执行一个
    # 如果年龄小于18 叫未成年 否则称成年人
    eg:
        age = input('输入年龄')
        age = int(age)
        if age < 18:
            print('未成年')
        elseprint('成年人')
    
    小于18
    大于18
    输入年龄
    判断年龄是否小于18
    则输出未成年
    则输出成年人

    3、if elif else三者连用

    if 条件1:
    	条件1成立执行的子代码
    elif 条件2:
    	条件1不成立 条件2成立之后执行的子代码
    elif 条件3:
    	条件12都不成立 条件3 成立之后执行的子代码
    ...(elif可以有多个)
    else:
        上述条件都不成立执行的子代码
    PS:三者连用也只能执行其中一个子代码
    # 根据成绩评判分类 大于90优秀 大于80良好 大于60及格 其他挂科
    eg:
        age = input('请输入你的年龄>>>:')
        age = int(age)
        if age > 90:
            print('万万岁')
        elif age > 80print('万岁')
        elif age > 70:
            print('千千岁')
        elif age > 60:
            print('千岁')
        elseprint('百岁')
    
    条件1成立
    条件1不成立执行条件2
    条件1 2都不成立执行条件3
    条件1 2 3都不成立执行条件4
    前面条件都不成立则执行
    输入年龄
    判断年龄
    大于90则输出万万岁
    大于80则输出万岁
    大于70则输出千千岁
    大于60则输出千岁
    否则则输出百岁
    • 循环结构

      while循环

      while 条件:
      	条件成立之后循环的子代码
      1、先判断条件是否成立
      2、如果成立则执行循环替代码
      3、循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
      4、如果条件成立 则继续执行循环体代码
      5、按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行
      eg:
          count = 1
          while count <5 :
             print('我想打游戏')
             count += 1
      
      count+1
      count=1时
      条件判断小于5
      则输出我想打游戏

      while+break

      break  # 强行结束循环体代码
      	while循环体代码一旦执行到break会直接结束循环
      eg:
          while True:
              name = input('请输入你的名字>>>:')
              if name == 'jason':
                  print('你好')
                  break
              else:
                  print('滚')
      
      不是
      输入名字
      条件判断是否等于jason
      break 结束
      打印滚

      while+continue

      continue  # 直接跳到条件判断处while循环体代码一旦执行到continue会结束本次循环 开始下一次循环
      eg:
          count = 1
      	while count < 11:
              print('count')
              count += 1
              if count == 4
              continue
      
      小于4
      +1
      等于4时
      跳过回到
      count=1
      条件判断是否小于11
      打印count
      continue

      while+else

      while 条件:
      	循环体代码
      else:
      	循环体代码没有被强制结束的情况下 则执行完毕就会执行else子代码
      eg:
      	count = 1
          while count < 4:
              print('我想打游戏')
          elseprint('打个鸡毛')
      
      小与4
      +1
      以上循环代码执行完
      count=1
      条件判断
      我想打游戏
      打个鸡毛

练习

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.结束运行

posted @   小福福  阅读(555)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
  1. 1 原来你也在这儿 温余福
  2. 2 世间美好和你环环扣扣 温余福
  3. 3 随风起舞 温余福
  4. 4 罪恶都市 温余福
罪恶都市 - 温余福
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示