流程控制和深浅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)

posted @ 2020-03-09 17:03  Henry121  阅读(148)  评论(0编辑  收藏  举报