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