Python基础之流程控制与深浅拷贝
一、if判断
语法1:
if 条件: 代码1 代码2 代码3age = 60 is_beautiful = True star = '水平座' if age > 16 and age < 20 and is_beautiful and star == '水平座': print('好配。。。') print('其他代码.............')
语法2:
if 条件:
代码1 代码2 代码3 else: 代码1 代码2 代码3age = 60 is_beautiful = True star = '水平座' if age > 16 and age < 20 and is_beautiful and star == '水平座': print('我喜欢,我们在一起吧。。。') else: print('阿姨好,我逗你玩呢,深藏功与名') print('其他代码.............')
语法3:
if 条件1: 代码1 代码2 代码3 elif 条件2: 代码1 代码2 代码3 elif 条件2: 代码1 代码2 代码3score = input('请输入您的成绩:') # score="18" score=int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通')
语法4:
if 条件1: 代码1 代码2 代码3 elif 条件2: 代码1 代码2 代码3 elif 条件2: 代码1 代码2 代码3 else: 代码1 代码2 代码3score = input('请输入您的成绩:') # score="18" score=int(score) if score >= 90: print('优秀') elif score >= 80: print('良好') elif score >= 70: print('普通') else: print('很差,小垃圾') print('=====>')
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('其他代码.............')
二、while循环
1.基本使用:
print(1) while 条件: 代码1 代码2 代码3 print(3)count=0 while count < 5: print(count) count+=1 #此时就会一致循环,循环一次count+1,知道count等于5,不满足while count < 5:,就跳出循环 print('顶级代码----->')
2.循环的应用:
username = 'aaa' password = '123' # 1、重复代码 # 2、输对了应该不用再重复 while True: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') else: print('账号名或密码错误')
3.退出循环的两种方式
3.1 将条件改为False,等到下次循环判断条件时才会生效
tag=True while tag: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') tag = False # 之后的代码还会运行,下次循环判断条件时才生效 else: print('账号名或密码错误')
3.2 break,只要运行到break就会立刻终止本层循环
while True: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') break # 立刻终止本层循环 else: print('账号名或密码错误')
4.while循环嵌套与结束
每一层都必须配一个break:
while True: inp_name=input('请输入您的账号:') inp_pwd=input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') while True: cmd=input("输入命令>: ") if cmd == 'q': break print('命令{x}正在运行'.format(x=cmd)) break # 立刻终止本层循环 else: print('账号名或密码错误')
改变条件的循环嵌套:
# # 改变条件的方式 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 == 'q': tag=False #此时改变条件 else: print('命令{x}正在运行'.format(x=cmd)) else: print('账号名或密码错误')
5.while +continue:结束本次循环,直接进入下一次
强调:在continue之后添加同级代码毫无意义,因为永远无法运行count=0 while count < 6: if count == 4: count+=1 continue # count+=1 # 错误,此时不执行 print(count) count+=1
#此时打印结果就是:0 1 2 3 5,因为等于4的时候就直接结束循环,然后从头开始执行。
while +else:针对break
count=0 while count < 6: if count == 4: count+=1 continue print(count) count+=1 else: print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
#此时输出结果为:0 1 2 3 5 "else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行",因为此时没有break,while结束后就执行else
count=0 while count < 6: if count == 4: break print(count) count+=1 else: print('======>')
#此时输出结果为:0 1 2 3 ,当等于4的时候就被break结束循环,且后面else不在执行
实际应用:
username = 'aaa'
password = '123'
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 == 'q': # 整个程序结束,退出所有while循环
break
else:
print('命令{x}正在运行'.format(x=cmd))
break
else:
print('账号名或密码错误')
count += 1
else:
print('输错3次,退出')
三、for循环
理论上for循环能做的事情,while循环都可以做,之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更简洁 语法:
for 变量名 in 可迭代对象: # 可迭代对象可以是:列表、字典、字符串、元组、集合 代码1 代码2 代码3 使用:
1.for基本使用之循环取值
列表循环取值
l = ['aa', 'bb', 'cc'] i=0 while i < 3: print(l[i]) i+=1
字典循环取值
dic={'k1':111,'k2':2222,'k3':333}
for k in dic:
print(k)
print(k,dic[k])
字符串循环取值
msg="you can you up,no can no bb" for x in msg: print(x) #就是一个字母一个字母的打印
2.for循环控制循环次数:range()
range在python2与python3中的区别 (常问)
python2中:
1.range其实就是一个列表
2.xrange其实就是你python3中的range
python3中:
range就是一种迭代,不占具多余的内存空间,需要时才会取出相对应的值
in后直接放一个数据类型来控制循环次数有局限性:当循环次数过多时,数据类型包含值的格式需要伴随着增加# range功能介绍 range(10) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] range(1,9) # 1...8 #[1, 2, 3, 4, 5, 6, 7, 8] range(1,9,1) # 1 2 3 4 5 6 7 8 #[1, 2, 3, 4, 5, 6, 7, 8] range(1,9,2) # 1 3 5 7 #从1-8,步长为2 #[1, 3, 5, 7]
for+break: 同while循环一样 for+else:同while循环一样 for+continue: 当执行到continue
username='aaa' password='123' for i in range(3): inp_name = input('请输入您的账号:') inp_pwd = input('请输入您的密码:') if inp_name == username and inp_pwd == password: print('登录成功') break else: print('输错账号密码次数过多')
#当触发break就直接退出当前程序,否则输入三次不对,执行else
for i in range(6): # 0 1 2 3 5 if i == 4: continue print(i)
#循环六次,但是当值为4,触发continue,重新执行for循环,但是是接着4,执行5
终止for循环只有break一种方案
######## 循环总结
总结for循环与while循环的异同 1、相同之处:都是循环,for循环可以干的事,while循环也可以干 2、不同之处: while循环称之为条件循环,循环次数取决于条件何时变为假 for循环称之为"取值循环",循环次数取决in后包含的值的个数补充:print('hello',end="*"),参数end指打印结果按照什么结尾
print('hello',end='*') >>>hello*
四、深浅拷贝
1.浅拷贝:是把原列表第一层的内存地址不加区分完全copy一份给新列表
list1 = [ 'egon', 'lxx', [1, 2] ] list3 = list1.copy() print(id(list1)) print(id(list3)) #二者id不一样 print(id(list1[0]),id(list1[1]),id(list1[2])) print(id(list3[0]),id(list3[1]),id(list3[2])) #二者具体值的id一样 #对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表 list1[0]='EGON' list1[1]='LXX' list1[2]=123 print(list1) print(list3) #此时改变list1的赋值,list1会变成新的值,而list3还是原来的值 #但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受影响,如下 list1[2][0]=111 list1[2][1]=222 print(list1) print(list3) #此时list1与list3的值的结果一样
2、深拷贝
得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
import copy list1 = [ 'egon', 'lxx', [1, 2] ] list3 = copy.deepcopy(list1) # print(id(list1)) # print(id(list3)) # print(list3) # 不可变 不可变 可变 # print(id(list1[0]),id(list1[1]),id(list1[2])) # print(id(list3[0]),id(list3[1]),id(list3[2])) ''' 4497919088 4498367856 4498449216 4497919088 4498367856 4498595328 ''' # print(list3) # print(id(list1[2][0]),id(list1[2][1])) # print(id(list3[2][0]),id(list3[2][1])) list1[0] = 'EGON' list1[1] = 'LXX' list1[2][0] = 111 list1[2][1] = 222 print(list1) print(list3) #即使修改了list1,但是对list1的可变与不可变类型的修改,都不会对list3造成影响

浙公网安备 33010602011771号