内存回收、流程控制和循环

垃圾回收机制

"""
有一些语言 内存空间的申请和释放都需要程序员自己写代码才可以完成
但是python却不需要 通过垃圾回收机制自动管理
"""
1. 引用计数
  name = 'jason'  数据值jason身上的引用计数为1
  name1 = name    数据值jason身上的引用计数加一  为2
  del  name1      数据值jason身上的引用计数减一  为1
  当数据值身上的引用计数为0的时候  就会被垃圾回收机制当做垃圾回收掉
  当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收
2. 标记清除
  主要针对循环引用问题
  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
当内存占用达到临界值的时候,程序会自动停止,然后扫描程序中所有的数据
并且只产生循环引用的数据打上标记 之后一次性清除

image

3. 分代回收
垃圾回收机制的频繁运行也会损耗各项资源
新生代、青春代、老年代(越往下检测频率越低)

image

流程控制理论

流程控制: 控制事物的执行流程
  事物执行流程总共可以分为三种
  1. 顺序结构
     从上往下依次执行,我们之前所编写的代码都属于该结构
  2. 分支结构
     事物的执行会根据条件的不同做出不同的执行策略
  3. 循环结构
     事物的执行会根据某个条件出现重复
  PS:在代码的世界里,很多时候可能会出现三者混合
提示:作为小白,在学习流程控制的时候,建议做到代码和图形的结合

顺序结构图

image

分支结构图

image

循环结构图

image

流程控制必备知识

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

分支结构

1.单if分支结构

  if 条件:
       条件成立后才会执行的代码块
  ps: 单if可以借助于流程图理解
username = input('username>>>:')
if username == 'jason':
    print('老师好')

image

2. if...else...分支结构

  if 条件:
      条件成立之后执行的子代码
  else:
      条件不成立执行的子代码
username = input('username>>>:')
if username == 'jason':
    print('老师好')
else:
    print('娶你美的')

image

3. if...elif...else分支结构

if 条件1:
    条件1成立之后执行的子代码
elif 条件2:
    条件1不成立,条件2成立执行的子代码
elif 条件3:
    条件12都不成立,条件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('挂科 交钱重修')

image

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('不是tony做不出来这样的事')

循环结构

就是想让一些代码反复的执行
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变量里,方便后面判断
username = input('请输入用户名:')
if username == 'jason':
    print('超级管理员')
elif username == 'tom':
    print('普通管理员')
elif username == 'jack' or username == 'rain':
    print('业务主管')
else:
    print('普通用户')

image

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

# 自定义黑名单列表
black_user_list = ['jason', 'kevin', 'tony']
# 自定义用户名和密码
user_info = ['oscar', 123]
username = input('请输入用户名:')
password = int(input('请输入密码: '))
# 判断用户输入的用户名是否在黑名单里
if username not in black_user_list:
    print('正常用户')
# 判断用户输入的用户名和密码和自定义的是否一致
    if username == user_info[0] and password == user_info[1]:
        print('oscar 用户登录成功')
    else:
        print('用户名或密码失败')
else:
    print('黑名单用户,不允许登录')

# 3.编写用户登录程序
#  用户如果登录失败 则只能尝试三次
#  用户如果登录成功 则直接结束程序
user_info = ['oscar', 123]  # 自定义用户名和密码
count = 0
while count < 3:
    username = input('请输入用户名:')
    password = int(input('请输入密码: '))
# 判断用户输入的用户名和密码和自定义的是否一致
    if username == user_info[0] and password == user_info[1]:
        print('oscar 用户登录成功')
        break
    else:
        count += 1

image

# 4.猜年龄的游戏
#  假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
#  基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序

'''
# 自定义年龄
year = 18
while True:
# 接收用户输入的年龄
    guess_year = int(input('猜年龄'))
    if guess_year > year:
        print('猜大了')
    elif guess_year < year:
        print('猜小了')
    elif guess_year == year:
        print('恭喜你猜对了')
        break
'''

image

#  拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
year = 18  # 自定义猜测的年龄
count = 0  # 自定义条件,方便while判断
while count < 3:
    guess_year = int(input('猜年龄'))
    if guess_year == year:
        print('恭喜你猜对了')
        break
    elif guess_year > year:
        print('猜大了')
    elif guess_year < year:
        print('猜小了')
    count += 1
# else 表示前面while循环正常结束后要继续的步骤可以放在else后面判断或执行
else:
# 第一次3次猜测结束后再次提示用户是否还需要猜游戏
    guess = input('是否还继续猜,请输入y/n')
# 用户如果继续猜,继续走下一步
    if guess == 'y':
# count 条件必须要重置,否则还是上面留下的变量,或者条件名给换个也可以
        count = 0
        while count < 3:
            guess_year = int(input('猜年龄'))
            if guess_year == year:
                print('恭喜你猜对了')
                break
            elif guess_year > year:
                print('猜大了')
            elif guess_year < year:
                print('猜小了')
            count += 1
    else:
        print('结束猜测游戏')
posted @   悠悠-winter  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示