目录
一、垃圾回收机制
机制讲解
当我们在运行程序时,很多的数据值会被闲置,得不到使用,这时就需要把这些无用的数据清除。在一些语言中,程序员需要自己编写代码删除这些无用的数据,但是python中不需要我们这么做,因此我们只需要了解python中垃圾回收机制的原理和运行方式。
1、引用计数
当我们把一个变量名与数据值绑定的时候,python中会有数据存储数据值被引用的次数,这就是引用计数。当我们把变量名跟其他数据值绑定的时候,如果数据值的引用计数变成了0,那么在内存空间中就会把他删除,节省内存空间。
2、循环引用(标记清除)
当学习了引用计数后我们可以得知每次与变量名绑定,数据值都会增加一次引用计数,这里我们可以举个例子来说明循环引用:
s1 = [1,2,3]
s2 = [4,5,6]
#这里我们会用到append函数,append函数就是在数据值的末尾加上输入的数据值。
#当我们在s1和s2中互相加入,可以看到引用计数都编程了2。
s1.append(s2)
s2.append(s1)
#但是当我们把s1、s2与数据值的绑定关系断开后
我们可以发现两个列表的引用计数变成了1。
当这种情况出现的时候,数据值并不会被第一时间被清理掉,而是会一直存在于内存空间中,直到内存空间占满,程序会在这是自动停止运行,然后扫描所有的程序并给循环引用的程序打上标记,之后一次性清除。(这种处理方式叫标记清除)
3、分代回收
分代回收就是垃圾回收机制运行时,不对所有目标进行频繁检测,对于使用频率高的目标降低检测频率。
当python运行垃圾回收机制的时候,如果频繁运行,同样会占用大量的内存资源。这个时候就体现了分代回收的用处。
二、流程控制理论和必备基础知识
理论:
顾名思义就是控制程序进行的流程。
我们把流程控制分成三种结构:
1、顺序结构
根据流程的排序,从上到下依次进行。
2、分支结构
当程序运行到分支结构时,需要根据条件进行判断,符合对应的条件,就往符合条件的分支方向运行代码,如果没有符合的条件,就停止运行。
3、循环结构
当程序执行到循环结构处,我们就根据条件判断,如果条件不符合,循环结构内的代码就不用执行,直接运行后续的代码,如果符合条件就进入循环结构内。当程序一直符合循环变量内的条件,就会出现死循环,无法执行后续的代码。
当程序运行一定次数后不符合循环结构的条件后,就会退出循环,运行后续的代码。
必备基础知识:
1、在python中代码行前面如果有空格,就表示有空格(缩进)的代码更上一行代码是从属关系,但是并不是所有的代码都可以拥有从属关系的代码(子代码)。比如print就不能拥有,if、while都可以拥有。
2、如果一大批代码都想要归于同一个父代码,那么就需要所有的子代码都拥有相同的缩进量,
3、通常我们都是用tab键(四个空格)制造缩进,但是一个空格也是可以形成从属关系的。这也是一种PEP8规范。
4、当某一行代码需要一些子代码的时候,它的末尾肯定会出现一个冒号。
5、当代码执行的时候,会根据缩进量来执行,相同缩进量的代码按顺序进行即可。其他结构的代码需要根据对应的结构执行。
break、continue的用法:
break
直接停止父代码的循环和父代码外部一层的循环
#break
# 依旧是上面的例子,增加一些功能
# 先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,比如说我们如果在有1000块以上的时候连着玩两次就够了,不用继续玩了
while a > 500:
print('我们想去哪就去哪')
a -= 100
while a > 1000:
a -= 200
print('我们有很多钱,还能再爽一次')
break
print('有没有呢')
else:
print('没钱什么都做不了')
在breake的前后加上打印语句就可以看到后面的代码有没有执行:
continue
直接从continue所在的位置去判断语句处开始下一次循环
#continue
#打印一些数字
count = 0
while count<11:
count += 1
#这里是判断count是否等于4了,如果等于4就再自增1
if count == 4:
count += 1
print('执行前')
continue
print('有没有执行continue呢')
print(count)
这里我们在continue的前后加上打印语句就可以看到后面的代码有没有执行,结果如下:
三、流程控制之分支结构
分支结构就是用if语句组成的,语句中会加入需要做出判断的条件,当满足条件就会执行其中的代码,不满足条件就会跳过分支结构中的代码,顺序执行后续代码。分支结构中只会选择一条分支执行下去,同时分支结构中的条件不会重复。加入的判断语句可以用上之前学的身份运算符(is)和成员运算符(in)、逻辑运算符(and、or、not)、等于号(==)等。
if
#输入一个数字判断是否比5大
a = int(input('请输入数字'))
#当程序运行到这里会开始判断变量a的大小
if a > 5:
#当a比5大
print('该数值比5大')
if...else
顾名思义就是在做了判断后对其他选项也做一些操作
#输入一个数字判断是比5大还是比5小
a = int(input('请输入数字'))
#当程序运行到这里会开始判断变量a的大小
if a > 5:
#当a比5大
print('该数值比5大')
else:
#当a比5小
print('该数值比5小')
if...elif...else
这里就是增加一些判断方向
#这里换个例子
#吃饭
#输入有多少钱
money_have = int(input('请输入数字'))
#判断这些钱能干嘛
if money_have > 15:
print('吃的比较一般')
elif money_have > 30:
print('吃的很好')
else:
print('不够吃饭呐')
注:elif可以有多个。这里我们可以看到上文说的分支条件不会重复判断。
if的嵌套使用
#嵌套
#举个考试的例子
is_test = input('请输入是否参加了考试:')
if is_test == '是':
#再判断考试成绩的等级
grade = int(input('请输入成绩'))
if grade >= 90:
print('优秀')
elif grade >= 80:
print('良好')
elif grade >= 70:
print('一般')
elif grade >= 60:
print('及格')
else:
excuse = input('请输入理由')
print(excuse)
print('挂科 交钱重修')
四、流程控制之循环结构
while
当程序符合条件的时候,会一直循环while中的代码,这也是循环语句的由来。判断条件也和if一样可以用上之前学的身份运算符(is)和成员运算符(in)、逻辑运算符(and、or、not)、等于号(==)等。
# while
#这里写一个模拟人们提建议的程序
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,玩一次要花100
while a > 500:
print('我们想去哪就去哪')
a -= 100
while...else
在判断条件的同时对其他条件下的对象做出处理
# while...else
#依旧是上面的例子,增加一些功能
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了,可以看成出去玩一次要花100,不足500就不能去玩了。
while a > 500:
print('我们想去哪就去哪')
a -= 100
else:
print('没钱什么都做不了')
while的嵌套使用
#依旧是上面的例子,增加一些功能
#先输入拥有的钱的数量
a = int(input('请输入数字'))
#这里就进行判断了
while a > 500:
#大于500就去玩
print('我们想去哪就去哪')
a -= 100
while a > 1000:
#如果大于1000就连着玩直到少于500
a -= 200
print('我们有很多钱,还能再爽一次')
else:
print('没钱什么都做不了')
ps:嵌套出现的时候,只需要把对应从属关系的循环结
五、作业
1.根据用户输入内容打印其权限
'''
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
# 先输入需要进行判断的用户姓名
user_name = input('请输入用户名:')
# 开始判断身份
if user_name == 'jason':
print('欢迎超级管理员')
elif user_name == 'tom':
print('欢迎普通管理员')
elif user_name == 'jack' or user_name == 'rain':
print('欢迎业务主管')
else:
print('欢迎普通用户')
2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
# 先进入循环,判断需要进行的功能
is_work = True
while is_work == True:
want_do = input('请输入指令进行下一步操作:\n 1、登陆 \n 2、退出 \n')
if want_do == '1':
#输入需要登陆的用户名
user_name = input('请输入需要登陆的用户名:')
#定义黑名单
black_user_list = ['jason', 'kevin', 'tony','']
#定义存储的用户名和密码
user_info = ['java123','python321','php666','zzh999']
for check in black_user_list:
is_black = False
#和黑名单内的用户名对比,如果在黑名单内,拒绝登陆,如果不在黑名单内,允许登陆。
if check == user_name:
print('用户在黑名单内,无法登陆')
is_black = True
break
if is_black == False:
# 如果用户名不在黑名单内
# 输入密码
user_password = input('请输入密码:')
if user_name+user_password in user_info:
# 当密码正确时
print('欢迎回来')
else:
#当密码错误时
print('密码错误,请重新输入')
else:
# 选择了2、退出功能或其他选上会直接退出
is_work = False
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
# 给三次机会
choice = 3
while choice > 0:
# 输入,想要执行的指令
want_do = input('请输入指令进行下一步操作:\n 1、登陆 \n 2、退出 \n')
while want_do == '1':
# 输入需要登陆的用户名
user_name = input('请输入需要登陆的用户名:')
#定义用户数据
user_info = ['java123', 'python321', 'php666', 'zzh999']
user_password = input('请输入密码:')
if user_name + user_password in user_info:
# 如果用户名和密码的组合正确,直接退出循环
print('欢迎回来')
# 这里改变choice的值或是break二选一就可以
# choice = 0
break
else:
# 密码或用户名错误尝试机会减一
choice -= 1
print('您还有%s次机会,请输入正确的指令' % choice)
if choice == 0:
# 当尝试机会为0时直接退出循环
break
while want_do == '2':
# 选择了2、退出功能
is_work = False
while want_do != '1' and want_do != '2':
print('请输入正确的指令')
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
#基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
real_age = 18
# 定义真实年龄
# 定义变量控制猜测过程
is_age = False
# 输入猜测的年龄
while is_age == False:
# 当用户猜测的结果不对或是刚开始猜测的时候一直都在循环中(可以猜测无限次)
guess_age = int(input('请输入猜测的年龄:'))
if guess_age > real_age:
# 猜大了
print('猜大了')
elif guess_age == real_age:
# 猜对了,直接退出循环
is_age = True
print('恭喜你猜对了')
else:
# 猜小了
print('猜小了')
# 拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
real_age = 18
# 定义真实年龄
# 定义变量控制猜测过程
is_age = False
# 定义用于记录机会的变量
choice_s = 3
while is_age == False:
# 输入猜测的年龄
# 当用户猜测的结果不对或是刚开始猜测的时候一直都在循环中(可以猜测无限次)
guess_age = int(input('请输入猜测的年龄:'))
if guess_age > real_age:
# 猜大了
print('猜大了')
# 机会减一
choice_s -= 1
elif guess_age == real_age:
# 猜对了,直接退出循环
is_age = True
print('恭喜你猜对了')
else:
# 猜小了
print('猜小了')
choice_s -= 1
# 机会减一
while choice_s == 0:
to_do = input('请选择是否继续尝试(y:继续尝试三次,n:直接退出)')
if to_do == 'y':
# 选择继续尝试,给三次机会
choice_s = 3
elif to_do == 'n':
# 选择退出
is_age = True
break
else:
print('请输入正确的指令')
标签:控制,python,流程,while,user,print,input,age,输入
From: https://www.cnblogs.com/wxlxl/p/17091573.html