今日分享
- 垃圾回收机制
- 流程控制理论(*****重点)
- 流程控制之分支结构(*****重点)
- 流程控制之循环结构(******重点)
垃圾回收机制
| """ |
| 有一些语言 内存空间的申请和释放都需要程序员自己写代码才可以完成 |
| 但是python却不需要 通过垃圾回收机制自动管理 |
| """ |
一.引用计数器

在python程序中创建的任何对象都会放在refchain链表中。
列如:
| name = '高彦' |
| age = 18 |
| hobby = ['跳舞','唱歌' ] |
| """ |
| 引用的个数: |
| 比如 name = '高彦',会给'高彦'开辟一个新的内存储存空间来存放到双向链表之中 |
| 这时候有 name1 = name ,不会创建两个'高彦',而是将name1指向'高彦' |
| 那么 引用数也就变成了2个,也是'高彦'被引用了2次。 |
| """ |
这些对象都会放到这些双向链表当中,也就是帮忙维护了python中所有的对象。
也就是说如果你得到了refchain,也就得到了python程序中的所有对象。
| name = 'gaoyan' |
| name1 = name |
| del name1 |
| 当数据值身上的引用计数为0的时候 就会被垃圾回收机制当做垃圾回收掉 |
| 当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收 |
二.标记清除
| 主要针对循环引用问题 |
| l1 = [11, 22] |
| l2 = [33, 44] |
| l1.append(l2) |
| l2.append(l1) |
| del l1 |
| del l2 |
| 当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中所有的数据 |
| 并给只产生循环引用的数据打上标记 之后一次性清除 |
三.分代回收

垃圾回收机制的频繁运行也会损耗各项资源
新生代、青春代、老年代(越往下检测频率越低)
流程控制理论
| 流程控制>>>:控制事物的执行流程 |
| 事物执行流程总共可以分为三种 |
| 1.顺序结构 |
| 从上往下依次执行 我们之前所编写的代码都属于该结构 |
| 2.分支结构 |
| 事物的执行会根据条件的不同做出不同的执行策略 |
| 3.循环结构 |
| 事物的执行会根据某个条件出现重复 |
| ps:在代码的世界里 很多时候可能会出现三者混合 |
| 提示:作为小白 在学习流程控制的时候 建议做到代码和图形的结合 |
流程控制必备知识
- python中使用代码的缩进来表示代码的从属关系
从属关系:缩进的代码(子代码)是否执行取决于上面没有缩进的
- 并不是所有的代码都可以拥有缩进的代码(子代码)
if关键字
- 如果有多行子代码属于同一个父代码 那么这些子代码需要保证相同的缩进量
- python中针对缩进量没有具体的要求 但是推荐使用四个空格(windows中tab键)
- 当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定需要冒号
- 相同缩进量的代码彼此之间平起平坐 按照顺序结构依次执行
分支结构
| 1. 单if分支结构 |
| if 条件: |
| 条件成立之后才会执行代码块 |
| username = input('username>>>:') |
| if username == 'Danielwei'; |
| print ('老师好') |

| 2.if...else...分支结构 |
| if 条件: |
| 条件成立之后执行的子代码 |
| else: |
| 条件不成立执行的子代码 |
| username = input('username>>>:') |
| if username == '吴彦祖': |
| print('老师好') |
| else: |
| print('fuck off') |

| 3.if...elif...else分支结构 |
| if 条件1: |
| 条件1成立之后执行的子代码 |
| elif 条件2: |
| 条件1不成立 条件2成立执行的子代码 |
| elif 条件3: |
| 条件1和2都不成立 条件3成立执行的子代码 |
| else: |
| 上述条件都不成立 执行的子代码 |
| ps:中间的elif可以写多个、上述子代码永远只会走一个 |
| score = input('请输入学生成绩>>>:') |
| score = int(score) |
| if score >= 90: |
| print('优秀') |
| elif score >= 80: |
| print('良好') |
| elif score >= 70: |
| print('一般') |
| elif score >= 60: |
| print('及格') |
| else: |
| print('挂科 交钱重修') |
| 4.if的嵌套使用(有点难) |
| age = 28 |
| height = 170 |
| weight = 110 |
| is_beautiful = True |
| is_success = False |
| username = 'tony' |
| if username == 'tony': |
| print('tony发现目标') |
| if age < 30 and height > 160 and weight < 150 and is_beautiful: |
| print('大妹纸 手机掏出来 让我加微信') |
| if is_success: |
| print('吃饭 看电影 天黑了...') |
| else: |
| print('去你妹的 流氓!!!') |
| else: |
| print('不好意思 算了...关了灯都一样') |
| else: |
| print('不是本少爷') |
循环结构
| 就是想让一些代码反复的执行 |
| while 条件: |
| 条件成立之后执行的子代码(循环体代码) |
| 1.先判断条件是否成立 |
| 2.如果成立则执行循环体代码 |
| 3.循环体代码执行完毕后再次回到条件判断处 判断条件是否成立 |
| 4.如果成立 则继续执行循环体代码 |
| 5.按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行 |
| |
| |
| |
| |
| |
| |
| |
| 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 'rain': |
| print('您是业务主管') |
| else: |
| print('您是普通用户') |
| |
| |
| 2.编写用户登录程序 |
| 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录 |
| eg:black_user_list = ['jason','kevin','tony'] |
| 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义) |
| eg: oscar 123 |
| |
| |
| admin = 'wei' |
| password = '123456' |
| black_user_list = ['jason','kevin','tony'] |
| username = input('登录您的账户>>>:') |
| password2 = input('输入你的密码>>>:') |
| if username in black_user_list: |
| print('Sorry you are backlisted ,logon denied') |
| elif username == admin and password2 == password: |
| print('登陆成功') |
| else: |
| print('你的用户名或者密码错误') |
| |
| 3.编写用户登录程序 |
| 用户如果登录失败 则只能尝试三次 |
| 用户如果登录成功 则直接结束程序 |
| name = 'wei' |
| pw = '123' |
| count = 0 |
| while count < 3: |
| username = input('请输入您的名字>>>:') |
| password = input('请输入您的密码>>>:') |
| if username == name and password == pw: |
| print('登陆成功') |
| break |
| print('登陆成功') |
| break |
| else: |
| print('输入的用户名或者密码错误>>>:') |
| count += 1 |
| 4.猜年龄的游戏 |
| 假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄 |
| 基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序 |
| 拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序 |
| man = 18 |
| count = 0 |
| while True: |
| guess = input('猜猜多大年龄>>>:') |
| guess = int(guess) |
| if guess == man: |
| print('猜对了!') |
| break |
| elif guess > man: |
| print('猜大了!') |
| else: |
| print('猜小了!') |
拔高
| age = 18 |
| count = 0 |
| while True: |
| age1 = int(input('请输入年龄>>>:')) |
| if age1 == age: |
| print('猜对了!') |
| break |
| elif age1 > age: |
| print('猜大了!') |
| count += 1 |
| else: |
| print('猜小了!') |
| count += 1 |
| if count == 3: |
| con = input('还要继续吗,继续y,结束n>>>:') |
| if con == 'y': |
| count = 0 |
| elif con == 'n': |
| print('结束!') |
| break |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构