流程控制 if判断与while循环 for循环

垃圾回收机制

"""
Python 的GC模块主要运用了引用计数来跟踪和回收垃圾;通过“标记-清除”解决容器对象可能产生的循环引用问题;通过分代回收以空间换时间进一步提高垃圾回收的效率。
也即采用“引用计数“为主(实时性,一旦没有引用,内存就直接释放了),“标记-清除”与“分代收集”两种机制为辅的策略。        
"""

1.引用计数
为每一个对象维护一个引用计数器,当一个对象的引用被创建或者复制时,(对象的引用)计数器+1,当一个对象的引用被销毁时,计数器的值-1,当计数器为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉

2.标记清除
标记清除的出现打破了循环引用,也就是它只关注那些可能会产生循环引用的对象,当内存占用达到临界值的时候,程序会自动停止,然后扫描程序中所有的数据,并给只产生循环引用的数据打上标记,之后一次性清除

3.分代回收
活的越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率

流程控制

什么是流程控制?

控制事务(程序)的执行流程,控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。

流程控制的分类

1.顺序结构
从上往下依次执行,就是先执行第一行再执行第二行...这样依次从上往下执行

image

2.分支结构
也就是说,程序会根据给出的条件,选择性的执行某一段代码

image

3.循环结构
意思就是代码会根据某个条件反复执行

image

流程控制必备知识

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

分支结构

1.单if分支结构
"""
   语法结构
    if 条件:
       条件成立之后执行的子代码(可以有很多行)
"""
#如果饿了,就吃饭
#先定义一个字符
str = '饿了'
#判断是否饿了
if str == '饿了':
   print('吃饭')


2.if...else...分支结构
   """
	  语法结构
	    if 条件:
			条件成立之后执行的子代码(可以有多行)
		else:
			条件不成立执行的子代码(可以有多行)
	"""

#身份验证
username = input('请输入暗号:')
if username = '波若波若蜜':
    print('月光宝盒开')
else:
    print('不是有缘人')
    
    

3.if...elif...else分支结构
"""
	语法结构
		if 条件1:
			条件1成立执行的子代码(可以有多行)
		elif 条件2:
			条件1不成立条件2成立执行的子代码(可以有多行)
		elif 条件3:
			条件1和2都不成立 条件3成立执行的子代码(可以有多行)
		else:
			上述所有的条件都不成立执行的子代码(可以有多行)
	ps:中间的elif可以有多个
	"""

#匹配系统: 匹配度大于等于90为齐天大圣,大于等于80为美猴王,大于等于70为弼马温,大于等于60为至尊宝,小于60为石头
score = int(input('请输入紧箍咒松紧度: '))
if score >= 90:
    print('齐天大圣')
elif score >=80:
    print('美猴王')
elif score >=70:
    print('弼马温')
elif score >=60:
    print('至尊宝')
else:
    print('石头')
    
    

4.if的嵌套使用(可延后掌握)
age = 500
height = 180
is_monkey = True
is_man = False
username = '至尊宝'
if username == '至尊宝':
    print('找到了有缘人')
    if age < 500 and height >= 180 and is_monkey:
        print('终于找到你了大圣')
        if is_man:
            print('是你吗至尊宝')
        else:
            print('滚犊子')
    else:
        print('不好意思认错人了')
else:
    print('原来不是有缘人')

循环结构

1.while循环
"""
	语法结构
		while 条件:
			条件成立之后执行的循环体代码
	1.先判断条件是否成立 如果成立则执行循环体代码
	2.循环体代码执行完毕后 再次判断条件是否成立 如果成立则继续执行循环体代码 如果不成立则跳出循环
"""

# 1.获取用户名和密码
while True:
    username = input('请输入用户名:  ')
    password = input('请输入密码:   ')
# 2.判断用户名和密码是否正确
    if username == '明月几时有' and password == '123':
        print('登陆成功!')
    else:
        print('用户或密码错误')

while和break

break #强行结束循环体
    while循环体代码一旦执行到break会直接结束循环
    
# 1.获取用户名和密码
while True:
    username = input('请输入用户名:  ')
    password = input('请输入密码:   ')
# 2.判断用户名和密码是否正确
    if username == '明月几时有' and password == '123':
        print('登陆成功!')
        break # 强制结束循环
    else:
        print('用户或密码错误')

while和continue

continue  # 直接跳到条件判断处
	while循环体代码一旦执行到continue会结束本次循环 开始下一次循环
    
# 按顺序输出1-10但是不输出4
i = 0
while i < 10:
    i += 1
    if i == 4:
        continue  # 当i = 4时,跳过此次循环,不输出i
    else:
        print(i)

while循环补充说明

1.死循环
   真正的死循环是一旦执行 CPU功耗会急速上升 直到系统采取紧急措施
    尽量不要让CPU长时间不断运算
    
2.嵌套及全局标志位
  强调:一个break只能结束它所在的那一层循环
  强调:有几个while的嵌套 想一次性结束 就应该写几个break
  强调:如果不想反复写break 可以使用全局标志性
   is_flag = True
   while is_flag:
        username = input('username>>>:')
        password = input('password>>>:')
        if username == 'jason'and password == '123':
            while is_flag:
                cmd = input('请输入您的指令>>>:')
                if cmd == 'q':
                    is_flag = False
                print('正在执行您的指令:%s' % cmd)
        else:
            print('用户名或密码错误')

作业

1.根据用户输入内容打印其权限
    '''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
    '''
    
    uesrname = input("请输入用户名:")
if uesrname == "jason":
    print("超级管理员")
elif uesrname == "tom":
    print("普通管理员")
elif uesrname in ['jack','rain']:
    print("业务主管")
else:
    print("普通用户")
    
    
2.编写用户登录程序
 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
    eg:black_user_list = ['jason','kevin','tony']
 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
    eg: oscar 123
        
        
        black_user_list = ['jason', 'kevin', 'tony']
name = input("请输入用户名:")  # 1.获取用户名
while True:
    if name in black_user_list:  # 2.判断用户是否在黑名单内
        print("你被拉黑了")
        break
    else:
        password = input("请输入密码:")  # 3.用户不在黑名单,获取密码
        if password == '123':  # 4.  判断密码是否正确
            print('登陆成功')  # 5.  密码正确登陆成功
        else:
            print('登陆失败')  # 6.密码错误登陆失败

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

#4.定义一个计时器
count_num = 1
while True:
    if count_num == 4:
        print('很抱歉您已经尝试三次了')
        break
# 1.获取用户数据
    username = input('username:')
    password = input('password:')
# 2.校正数据是否正确
    if username == 'moon' and password == '123':
        print('登陆成功')
        break #3.结束代码循环
    else:
        print('用户名或密码错误')
        # 5.每错误依次就让计时器自增1
        count_num += 1

        
4.猜年龄的游戏
 假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
 基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
 拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
    
    real_age = 18
count = 1
while True:
    if count == 4:
        choice = input('已经玩了三次,还要玩吗(y/n):')
        if choice == 'y':
            count = 1
        else:
            print('欢迎下次光临')
            break
    age = input("猜年龄")
    age = int(age)
    if age > real_age:
        print('猜大了')
        count+=1
    elif age < real_age:
        print('猜小了')
        count += 1
    else:
        print('猜对了')
        break

for循环

for循环能够做的事情while都可以做到 只不过for循环在一些场景下使用更简单
for结构
  for 变量名 in 循环体:
        
for循环特点
	1.擅长遍历取值
	2.不需要结束条件 自动结束(遍历完)

for循环主要遍历的数据类型有(常见有 字符串、列表、元组、字典、集合)
    info = 'hello world'
    for i in info:
        print(i) #单个字符串
        
        
for循环字典(特殊):循环字典只能获取到字典的key  value无法直接获取 只有键会被获取
    userinfo_dict = {'username':"moon",'age':"18"}
    for i in userinfo_dict:
        print(i)  #只有键参与遍历
 

for循环语法结构中变量名如何命名
	1.见名知意
	2.如果遍历出来的数据没有具体含义可以使用常用的
    
  
for循环和while循环一样都可以使用break,continue和else,用法一致
	for i in [1,2,3]:
        if i == 2:
           break
        
	for i in [1,2,3]:
        if i == 2:
          continue
   
	for i in [1,2,3]:
      print(i)
	else:
      print('循环正常结束')
        

image

range方法

range可以理解为是帮我们产生一个内部含有多个数字的数据
"""
range方法在python2和python3中有所区别:
在python2中
   range()
      直接产生一个列表 内部含有多个数值
   xrange()
		其实就是python3里面的range
在python3中
   range()
      类似于一个工厂 不会占用太多的内存空间 要生产
"""

for i in range(101): # 起始位置为0 终止位置为100
    print(i) #[0.....100]
    
for i in range(10,20): #第一个为起始位置 第二个终止位置
    print(i)
    
for i in range(1,20,2): #第三个为等差值 默认不写为1
    print(1)

range实战案例

网络爬虫
	使用代码爬取往上我们需要的数据
项目需求
	爬取所有页面的数据
找寻规律
	https://www.cnblogs.com/
 	https://www.cnblogs.com/#p2
 	https://www.cnblogs.com/#p3
 	https://www.cnblogs.com/#p4
'''
分页的规律 不同的网址有所区别
	1.在网址里面有规律
	2.内部js文件动态加载
''' 
	

作业

1.计算1-100所有的数之和

num = 0
for i in range(101):
    num = num+i
    print(num)
	
2.判断列表中数字2出现的次数  
 l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
 
 count = 0
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
for i in l1:
    if i == 2:
      count+=1
    print(count)
 
3.编写代码自动生成所有页网址(注意总共多少页)
	https://movie.douban.com/top250
	
	count = (25*250)
base_url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0,count,25):
    print(base_url % i)
	
4.编写代码打印出下列图形(ps:for循环嵌套)  
*****  
*****  
*****  
*****

for i in range(4):
    for e in range(5):
        print('*', end='')
    print('*')
posted @ 2022-09-27 21:38  Super小赵  阅读(91)  评论(0编辑  收藏  举报
****************************************** 页脚Html代码 ******************************************