• 流程控制和深浅copy


    1. 深浅copy

    对于列表的拷贝来说:

    如果是简单的将列表进行赋值与另一个列表,则并不是拷贝而是两个列表指向了同一个地址
    
    list1=[
        'egon',
        'lxx',
        [1,2]
    ]
    # 1、二者分隔不开,list改list2也跟着该,因为指向的就是同一个地址
    list2=list1 # 这不叫copy
    list1[0]='EGON'
    print(list2)
    

    1.1 如何copy列表

    需求:

    • 拷贝一下原列表产生一个新的列表
    • 想让两个列表完全独立开,并且针对的是改操作的独立而不是读操作

    1.2 浅拷贝

    是把原列表第一层的内存地址完全拷贝一份给新列表。即只能保证对原列表中第一层地址(**不可变类型**)的改操作不受影响,涉及到原列表中第二层地址(**可变类型**)的改操作时,原列表变,新列表也跟着变-
    

    1.3 深拷贝:

    将两个列表的改操作**完全的独立开**。即不管原列表对第几层地址的改操作,新列表都不受影响,保持最开始复制的列表元素不变。
    

    1.4 如何使用深浅copy

    #浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
    list1=[
        'egon',
        'lxx',
        [1,2]
    ]
    
    list3=list1.copy()
    #深copy
    import copy
    list1=[
        'egon',
        'lxx',
        [1,2]
    ]
    
    list3=copy.deepcopy(list1)
    

    2、流程控制之if判断

    2.1、if 语法

    if 条件1:
        代码1
        代码2
        代码3
    elif 条件2:
        代码1
        代码2
        代码3
    ...
    else:
        代码1
        代码2
        代码3
    
    

    注意:

    ​ 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行

    ​ 2、条件可以是任意表达式,但执行结果必须为布尔类型

    ​ 在if判断中所有的数据类型也都会自动转换成布尔类型

    ​ 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False

    ​ 2.2、其余均为True

    2.2、if 应用案例

    案例1:

    age = 60
    is_beautiful = True
    star = '水平座'
    
    if age > 16 and age < 20 and is_beautiful and star == '水平座':
        print('我喜欢,我们在一起吧。。。')
    
    print('其他代码.............')
    
    

    案例2:

    score = input('请输入您的成绩:') # score="18"
    score=int(score)
    
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('普通')
    else:
         print('很差,小垃圾')
    
    

    案例3 : if嵌套if

    age = 17
    is_beautiful = True
    star = '水平座'
    
    if 16 < age < 20 and is_beautiful and star == '水平座':
        print('开始表白。。。。。')
        is_successful = True
        if is_successful:
            print('两个从此过上没羞没臊的生活。。。')
    else:
        print('阿姨好,我逗你玩呢,深藏功与名')
    
    print('其他代码.............')
    
    

    3.流程控制之while循环

    3.1什么是循环结构

    循环结构就是重复执行某段代码块
    
    

    3.2为什么要用循环结构

    让计算机能够具备人重复执行某件事情的能力
    
    

    3.3如何使用循环结构

    3.3.1 while循环语法

    while 条件:
        代码1
        代码2
        代码3
    
    '''
    while的运行步骤:
    步骤1:如果条件为真,则自上而下的执行代码1、2、3...
    步骤2:执行完最后一条代码时再次判断条件,如果条件为Treu则重复步骤1,如果条件为False,则结束循环
    
    '''
    
    

    3.3.2 while循环的应用案例

    # break结束本层循环
    username = "henry"
    password = "123"
    
    

    while+break的使用

    # 记录错误验证的次数
    count = 0
    while count < 3:
        inp_name = input("请输入用户名:")
        inp_pwd = input("请输入密码:")
        if inp_name == username and inp_pwd == password:
            print("登陆成功")
            break # 用于结束本层循环
        else:
            print("输入的用户名或密码错误!")
            count += 1
    
    

    while循环嵌套+break

    # 如果while循环嵌套了很多层,要想退出每一层循环则需要在每一层循环都有一个break
    count = 0
    while count < 3:  # 第一层循环
        inp_name = input("请输入用户名:")
        inp_pwd = input("请输入密码:")
        if inp_name == username and inp_pwd == password:
            print("登陆成功")
            while True:  # 第二层循环
                cmd = input('>>: ')
                if cmd == 'quit':
                    break  # 用于结束本层循环,即第二层循环
                print('run <%s>' % cmd)
            break  # 用于结束本层循环,即第一层循环
        else:
            print("输入的用户名或密码错误!")
            count += 1
    
    

    while循环嵌套+tag的使用

    '''
    让所有while循环的条件都用同一个变量,该变量的初始值为True,
    一旦在某一层将该变量的值改成False,则所有层的循环都结束
    '''
    tag = True
    while tag: 
        inp_name = input("请输入用户名:")
        inp_pwd = input("请输入密码:")
        if inp_name == username and inp_pwd == password:
            print("登陆成功")
            while tag:  
                cmd = input('>>: ')
                if cmd == 'quit':
                    tag = False  # tag变为False, 所有while循环的条件都变为False 
                    break
                print('run <%s>' % cmd)
            break  # 用于结束本层循环,即第一层循环
        else:
            print("输入的用户名或密码错误!")
            count += 1
    
    

    while+continue的使用

    • continue用来跳出当前次循环(即跳过本次循环直接进入下一次循环)
    • 注意:在continue之后添加同级代码毫无意义,因为永远无法运行
    # 打印1到10之间,除7以外的所有数字
    number=11
    while number>1:
        number -= 1
        if number==7:
            continue 
        print(number)
    
    

    while+else的使用

    count=0
    while count < 6:
        if count == 4:
            count+=1
            continue
        print(count)
        count+=1
    else:
        print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
    
    
    

    3.3.3 死循环

    对于一个程序来说,死循环并不可怕,因为在正常的编写代码的过程中,本身就需要IO操作来给我们反馈信息,而IO操作的过程中,程序得到了良好的缓存,并不会对计算机操作太大的压力
    
    最致命的死循环是,不进行IO操作,只重复进行无意义的数字运算,长时间运行,CPU会吃力
    
    
    # count=0
    # while count < 5: # 5 < 5
    #     print(count) # 0,1,2,3,4
    
    # while True:
    #     name=input('your name >>>> ')
    #     print(name)
    
    # 纯计算无io的死讯会导致致命的效率问题
    # while True:
    #     1+1
    
    # while 1:
    #     print('xxxx')
    
    

    4、流程控制之for循环

    4.1、什么是for循环

    ​ 循环就是重复做某件事,for循环是python提供第二种循环机制

    4.2、为何要有for循环

    ​ 理论上for循环能做的事情,while循环都可以做
    ​ 之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁

    4.3、如何用for循环

    for 变量名 in 可迭代对象:
    # 可迭代对象可以是:列表、字典、字符串、元组、集合
        ​    子代码块
    
    

    4.3.1、 for基本使用之循环取值

    # 案例1:列表循环取值
    l = ['alex_dsb', 'lxx_dsb', 'egon_nb']
    for x in l:  # x='lxx_dsb'
        print(x)
    # 案例2:字典循环取值
    dic={'k1':111,'k2':2222,'k3':333}
    for k in dic:
        print(k,dic[k])
    # 案例3:字符串循环取值
    msg="you can you up,no can no bb"
    for x in msg:
        print(x)
    
    

    4.3.2、for循环与while循环的异同

    • 相同之处:

      ​ 都是循环,for循环可以干的事,while循环也可以干

    • 不同之处:
      while循环称之为条件循环,循环次数取决于条件何时变为假
      for循环称之为"取值循环",循环次数取决in后包含的值的个数

    4.3.3、for循环控制循环次数:range()

    ​ in后直接放一个数据类型来控制循环次数有局限性:
    ​ 当循环次数过多时,数据类型包含值的格式需要伴随着增加

    range()的使用
    range(10)
    #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    range(1,9)
    #[1, 2, 3, 4, 5, 6, 7, 8]
    range(1,9,1)
    #[1, 2, 3, 4, 5, 6, 7, 8]
    range(1,9,2)
    #[1, 3, 5, 7]
    
    for i in range(30):
        print('===>')
        
    range补充知识
    1、for搭配range,可以按照索引取值,但是麻烦,所以不推荐
    l=['aaa','bbb','ccc'] # len(l)
    for i in range(len(l)):
        print(i,l[i])
    
    for x in l:
        print(l)
    2、range()在python3里得到的是一只"会下蛋的老母鸡"
    
    

    1.3.4、for的使用

    • for+break: 同while循环一样
    • for+else:同while循环一样
    • for+continue:
    for i in range(6):  # 0 1 2 3 4 5
        if i == 4:
            continue
        print(i)
    
    

    1.3.5、for循环嵌套

    ​ 外层循环循环一次,内层循环需要完整的循环完毕

    ​ 终止for循环只有break一种方案

    for i in range(3):
        print('外层循环-->', i)
        for j in range(5):
            print('内层-->', j)
    
    
  • 相关阅读:
    AOJ.866 飞越原野 (三维BFS)
    UVA.129 Krypton Factor (搜索+暴力)
    UVA.10986 Fractions Again (经典暴力)
    UVA.10305 Maximum Product (暴力)
    UVA.725 Division (暴力)
    HDU.3342 Legal or Not (拓扑排序 TopSort)
    HDU.2647 Reward(拓扑排序 TopSort)
    13 成都
    15 沈阳
    14 鞍山
  • 原文地址:https://www.cnblogs.com/Henry121/p/12449718.html
Copyright © 2020-2023  润新知