Python学习路程——Day05

Python学习路程——Day05image

一、垃圾回收机制

1、什么是垃圾回收机制

​ 在一些语言中,内存空间的申请与释放都需要开发者自己编写相应的代码才能够完成。而在Python中,它已经内置了相应的代码,不需要我们特意去编写。

2、引用计数

'''
	当我们定义了一个变量,这个变量就会在内存中开辟一个地址,这个内存地址的数据值就会产生一个计数器,有一个变量指向就有一次计数,计数器的数值就会增加1,当这个计数器的值为0时就会被垃圾回收机制当作垃圾回收。
'''
age = 18 	#定于一个变量,并在内存中为储存的数据值18开辟一个地址,计数器初始值为一
age1 = age 	#	定义age1指向age,这个内存的计数器加1(1+1=2)
del age1	#  删除age1 这个内存的计数器减1(2-1=1) 	
del age #  删除age  这个内存的计数器减1(1-1=0)计数器的值为0了,此时储存18的两个变量都清除了,这个内存就会被释放,就完成了垃圾回收
'''
当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收
'''

image

3、标记清除

'''
主要针对循环引用的问题:
工作原理:
	当内存占用达到临界值时(内存快满了),程序就会自动停止运行,然后扫描程序中的所有数据,扫描出只产生循环引用的数据打上标记,随后一次性的进行清除。
'''
age = [18, 28]	# 定义一个列表 引用计数 为1
age1 = [20, 30]	# 定义第二个列表 引用计数 为1
age.append(age1) # 调用append方法把列表age1添加到age中 新列表为 age = [18,28,[20,30]] 引用计数 为2
age1.append(age) # 调用append方法把列表age添加到age1中 新列表为 age1 = [20,30,[18,28]] 引用计数 为2
del age	#  断开变量名age与列表[18,28]的链接,引用计数 为1
del age1 #  断开变量名age1与列表[20,30]的链接,引用计数 为1
'''
完成以上操作后,变量名age,age1都不存在了,但是在内存空间内还有两个列表[18,28];[20,30]存在,故需要使用标记清除功能。
'''

image

4、分代回收

'''
	分代回收是一种以空间换时间的方式,Python将内存根据对象的存活时间划分为不同的集合,每一个集合称为一个代,Python将内存分为了3 “代”,分别代表年轻代、青年代、老年代,它们对应的是 3 个链表,它们的垃圾收集频率随着对象的存活时间的增大而减小。
    新创建的对象都会分配在 年轻代,年轻代链表的总数达到上限时,Python垃圾回收机制就会被触发,把那些可以被回收的对象被回收掉,而那些不会被回收的对象就会被移动到 青年代,依次类推, 老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期中。
    同时,分代回收是建立在标记—清除技术的基础之上的。分代回收同样作为Python的辅助垃圾收集技术处理那些容器对象
'''

二、流程控制理论

什么是流程控制

对程序执行的顺序进行控制


总共有三种:
1、顺序结构
	按程序语句的自然顺序,自上到下,依次执行每条语句的程序
	顺序结构是程序中最基础的语句,赋值语句、输入/输出语句、模块导入语句等都是顺序结构的语句
2、分支结构
	根据条件是否成立,来判断执行那个分支的结构,叫做分支结构
3、循环结构
	根据条件是否成立,来判断是否循环执行代码块,叫做循环结构

三、流程控制必备知识

流程控制中应该注意的事项

1.python中使用代码的缩进来表示代码的从属关系
	从属关系:缩进的代码(子代码)是否执行取决于上面没有缩进的
2.并不是所有的代码都可以拥有缩进的代码(子代码)
	if关键字
3.如果有多行子代码属于同一个父代码 那么这些子代码需要保证相同的缩进量
4.python中针对缩进量没有具体的要求 但是推荐使用四个空格(windows中tab键)
5.当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定需要冒号
6.相同缩进量的代码彼此之间平起平坐 按照顺序结构依次执行

四、分支结构

什么是分支结构

根据条件是否成立,来判断执行那个分支的结构,叫做分支结构

单if分支:

'''
语法结构:
	if 条件:
		条件成立后,所会执行的代码快
'''
choose = input('请输入您的选择:')

if choose == 1:
	print('You are right!')

image

if esle分支:

'''
语法结构:
	if 条件:
		条件成立后,所会执行的代码快
	else:
		条件不成立后,所会执行的代码快
'''
choose = input('请输入您的选择:')

if choose == 1:
	print('You are right!')
else:
	print('You are wrong!')

image

if ... elif ...elif else多重分支:

'''
语法结构:
        if 表达式1:
            语句块1
        elif 表达式2:
            语句块2
        ...
        elif 表达式n:
            语句块n
        else :
            语句块n+1
'''
score=eval(input('请输出你的成绩:'))
if score<=60:
    print('您本次考试成绩不合格')
elif 60<score<=80:
    print('您本次考试成绩合格')
elif 80<score<=90:
    print('您本次考试成绩良好')
else :
    print('您本次考试成绩优秀')
 '''
 evel(input())
 可以将输入的字符串类型转换为整型
 '''

image

if的多重嵌套使用:

'''
嵌套if:
    if 表达式1:
        if 表达式2:
            语句块1
        else:
            语句块2
            
    if 表达式1:
        if 表达式2:
            语句块1
        else:
            语句块2
    else 表达式2:
        if 表达式3:
            语句块3
        else:
            语句块4
'''
anwser=input('您喝酒了吗?y/n:')
if anwser=='y':
    proof=eval(input('请输入酒精含量:'))
    if proof<20:
        print('下次请不要饮酒后驾车')
    elif 20<proof<60:
        print('您已构成酒后驾车,请配合调查')
    else:
        print('您已构成醉驾,请配合调查')
elif anwser=='n':
    print('请通行')
else:
    print('请您配合调查')

五、循环结构

什么是循环结构

根据条件是否成立,来判断是否循环执行代码块,叫做循环结构
'''
无限循环while
    通过一个条件来控制是否要继续反复执行循环体中的语句
语法结构:
    while 表达式:
        语句块
执行流程:
    当表达式的值为True时,执行语句块
    当表达式的值为False时,跳过语句块而执行语句块之后的代码
'''
answer=input('您吃了吗?y/n:')
while  answer!='y' and answer!='n':
        answer=input('请输入y/n:')
while answer == 'y':  # 条件判断
    print('多吃点!')  # 语句块
    break
while answer == 'n':
    print('别吃了')
    break

image

break和continue的区别

break和continue都是用来控制循环结构的,主要是停止循环。区别:break指的是终止、结束循环;continue指的是本次的循环,进入下一次的循环。

练习

今日作业:

整理今日内容及博客

1.根据用户输入内容打印其权限
'''
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''

# coding:utf-8
'''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
'''

username = input('username>>>:')        # 定义变量接收用户名
if username == 'jason':                 # 判断接收的数据是否成立 
    print(username,'--> 超级管理员')      # 成立执行
elif username == 'tom':                 # 判断接收的数据是否成立 
    print(username, '--> 普通管理员')     # 成立执行
elif username == 'jack' or username =='rain':   # 判断接收的数据是否成立 
    print(username, '--> 业务主管')         # 成立执行
else:                                   # 都不成立执行 
    print(username, '-->普通用户')

2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123

'''
2.编写用户登录程序
 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
    eg:black_user_list = ['jason','kevin','tony']
 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
    eg: oscar 123
'''
black_user_list = ['jason', 'kevin', 'tony'] # 定义黑名单变量
count = 0                                       # 定义一个计数器,作用是控制循环次数
while count < 3:                            # 当count小于3 就执行
    username = input('请输入你的用户名:')       # 定义一个input()接收用户名
    password = input('请输入你的密码:')        # 定义一个input()接收密码
    if username in black_user_list:       # 看输入的用户名是否在黑名单里 in是看在不在的判断
        print('兄弟你黑了!重新输入!')           # 条件成立的话输出
    if username == 'oscaar' and password == '123': #    看输入的用户名和密码对不对
        print('登陆成功!')                  # 条件成立的话输出
        break                                   # 跳过循环
    else:                                   # 条件不成立的话执行下面代码
        print('账号密码错误,请重新输入!')      # 输出
        count += 1                          # 让上面定义的count值加1,用来控制只能输错三次

3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序

第二题给做了

4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序

基础:

# 定义初始的年龄为18
first_age = 18              
# 定义变量接收用户输入的数据,eval(),可以让输入的字符串类型转换
guess_age = eval(input('请输入你猜的年龄:'))
# while True 不碰到break 一直循环下去!
while True:
    # 判断用户输入的数据是否与初始一样,一样则执行子代码而后跳出循环,不一样执行下面的同级代码
    if guess_age == first_age:
        print('猜对了!')
        break
    # 同用户输入的数据与初始作比较,小于就执行print
    elif guess_age <18:
        print('猜小了!')
    # 上面两个都不成立,则执行本条
    else:
        print('猜大了!')

拔高:

# 定义初始的年龄为18
first_age = 18
# 定义count变量作为初始判断
count = 0
# while True 不碰到break 一直循环下去!
while True:
# 定义变量接收用户输入的数据,eval(),可以让输入的字符串类型转换
    guess_age = eval(input('请输入你猜的年龄:'))
# 判断用户输入的数据是否与初始一样,一样则执行子代码而后跳出循环,不一样执行下面的同级代码
    if guess_age == first_age:
        print('猜对了!')
# 跳出循环
        break
# 同用户输入的数据与初始作比较,小于就执行print
    if count < 2:
        if guess_age < 18:
            print('猜小了!')
            count += 1
            continue
            # 上面两个都不成立,则执行本条
        else:
            print('猜大了!')
            count += 1
            continue
    else:
        again_game =input('还要继续游戏吗?y/n')
        if again_game == 'y':
            # 将count的值归0
            count = 0
            continue
        if again_game == 'n':
            break
posted @ 2022-09-27 18:00  负剑远游行归来仍少年  阅读(116)  评论(0)    收藏  举报