首页 > 编程语言 >python基础:垃圾回收机制、流程控制理论和必备基础知识、流程控制之分支结构、流程控制之循环结构

python基础:垃圾回收机制、流程控制理论和必备基础知识、流程控制之分支结构、流程控制之循环结构

时间:2023-02-04 15:37:18浏览次数:46  
标签:控制 python 流程 while user print input age 输入

目录

一、垃圾回收机制

机制讲解

当我们在运行程序时,很多的数据值会被闲置,得不到使用,这时就需要把这些无用的数据清除。在一些语言中,程序员需要自己编写代码删除这些无用的数据,但是python中不需要我们这么做,因此我们只需要了解python中垃圾回收机制的原理和运行方式。

1、引用计数

当我们把一个变量名与数据值绑定的时候,python中会有数据存储数据值被引用的次数,这就是引用计数。当我们把变量名跟其他数据值绑定的时候,如果数据值的引用计数变成了0,那么在内存空间中就会把他删除,节省内存空间。

img

2、循环引用(标记清除)

当学习了引用计数后我们可以得知每次与变量名绑定,数据值都会增加一次引用计数,这里我们可以举个例子来说明循环引用:

img

s1 = [1,2,3]
s2 = [4,5,6]
#这里我们会用到append函数,append函数就是在数据值的末尾加上输入的数据值。
#当我们在s1和s2中互相加入,可以看到引用计数都编程了2。
s1.append(s2)
s2.append(s1)
#但是当我们把s1、s2与数据值的绑定关系断开后
我们可以发现两个列表的引用计数变成了1。
当这种情况出现的时候,数据值并不会被第一时间被清理掉,而是会一直存在于内存空间中,直到内存空间占满,程序会在这是自动停止运行,然后扫描所有的程序并给循环引用的程序打上标记,之后一次性清除。(这种处理方式叫标记清除)

3、分代回收

分代回收就是垃圾回收机制运行时,不对所有目标进行频繁检测,对于使用频率高的目标降低检测频率。

当python运行垃圾回收机制的时候,如果频繁运行,同样会占用大量的内存资源。这个时候就体现了分代回收的用处。

img

二、流程控制理论和必备基础知识

理论:

顾名思义就是控制程序进行的流程。

我们把流程控制分成三种结构:

1、顺序结构

根据流程的排序,从上到下依次进行。

img

2、分支结构

当程序运行到分支结构时,需要根据条件进行判断,符合对应的条件,就往符合条件的分支方向运行代码,如果没有符合的条件,就停止运行。

img

3、循环结构

当程序执行到循环结构处,我们就根据条件判断,如果条件不符合,循环结构内的代码就不用执行,直接运行后续的代码,如果符合条件就进入循环结构内。当程序一直符合循环变量内的条件,就会出现死循环,无法执行后续的代码。

当程序运行一定次数后不符合循环结构的条件后,就会退出循环,运行后续的代码。

img

必备基础知识:

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的前后加上打印语句就可以看到后面的代码有没有执行:

img

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的前后加上打印语句就可以看到后面的代码有没有执行,结果如下:

img

三、流程控制之分支结构

分支结构就是用if语句组成的,语句中会加入需要做出判断的条件,当满足条件就会执行其中的代码,不满足条件就会跳过分支结构中的代码,顺序执行后续代码。分支结构中只会选择一条分支执行下去,同时分支结构中的条件不会重复。加入的判断语句可以用上之前学的身份运算符(is)和成员运算符(in)、逻辑运算符(and、or、not)、等于号(==)等。

img

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)、等于号(==)等。

img

# 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

相关文章