今日分享
- 垃圾回收机制
- 流程控制理论(*****重点)
- 流程控制之分支结构(*****重点)
- 流程控制之循环结构(******重点)
垃圾回收机制
"""
有一些语言 内存空间的申请和释放都需要程序员自己写代码才可以完成
但是python却不需要 通过垃圾回收机制自动管理
"""
一.引用计数器
在python程序中创建的任何对象都会放在refchain链表中。
列如:
name = '高彦' # 字符串对象
age = 18
hobby = ['跳舞','唱歌' ]
"""
引用的个数:
比如 name = '高彦',会给'高彦'开辟一个新的内存储存空间来存放到双向链表之中
这时候有 name1 = name ,不会创建两个'高彦',而是将name1指向'高彦'
那么 引用数也就变成了2个,也是'高彦'被引用了2次。
"""
这些对象都会放到这些双向链表当中,也就是帮忙维护了python中所有的对象。
也就是说如果你得到了refchain,也就得到了python程序中的所有对象。
name = 'gaoyan' # 数据值jason身上的引用计数为1
name1 = name # 数据值jason身上的引用计数加一 为2
del name1 # 数据值jason身上的引用计数减一 为1
当数据值身上的引用计数为0的时候 就会被垃圾回收机制当做垃圾回收掉
当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收
二.标记清楚
主要针对循环引用问题
l1 = [11, 22] # 引用计数为1
l2 = [33, 44] # 引用计数为1
l1.append(l2) # l1 = [11, 22, l2列表] 引用计数为2
l2.append(l1) # l2 = [33, 44, l1列表] 引用计数为2
del l1 # 断开变量名l1与列表的绑定关系 引用计数为1
del l2 # 断开变量名l2与列表的绑定关系 引用计数为1
当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中所有的数据
并给只产生循环引用的数据打上标记 之后一次性清除
三.分代回收
垃圾回收机制的频繁运行也会损耗各项资源
新生代、青春代、老年代(越往下检测频率越低)
流程控制理论
流程控制>>>:控制事物的执行流程
事物执行流程总共可以分为三种
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.按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行
# count = 1
# while count < 5:
# print('hello world')
# count += 1 # count = count + 1
# print('想不想干饭?')
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': # elif username in ('jack','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('登陆成功')
while True:
cmd = input('>>:')
if cmd == 'quit':
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
标签:username,count,elif,代码,回收,else,垃圾,print,三大
From: https://www.cnblogs.com/wei0919/p/16734860.html