day07深浅copy与流程控制
目录:流程控制
0:补充(了解)
短路运算:偷懒原则,偷懒到哪个位置,就把当前位置的值返回
深浅copy
1、循环之while循环
循环的语法与基本使用
死循环与效率问题
循环的应用
退出循环的两种方式
条件
while+break
while循环嵌套
while+continue
while+else
主体内容:
深浅copy:
list1=[
'egon',
'lxx',
[1,2]
]
# 1、二者分隔不开,list改list2也跟着该,因为指向的就是同一个地址
# list2=list1 # 这不叫copy
# list1[0]='EGON'
# print(list2)
# 2、需求:
# 1、拷贝一下原列表产生一个新的列表
# 2、想让两个列表完全独立开,并且针对的是改操作的独立而不是读操作
# 3、如何copy列表
# 3.1 浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
list1=[
'egon',
'lxx',
[1,2]
]
list3=list1.copy()
# print(list3)
# print(id(list1))
# print(id(list3))
# print(id(list1[0]),id(list1[1]),id(list1[2]))
# print(id(list3[0]),id(list3[1]),id(list3[2]))
# 实验1:对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的
# 内存地址,并不会影响新列表
list1[0]='EGON'
list1[1]='LXX'
# list1[2]=123
# 实验2:但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变
# 即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受
# 影响,如下
# list1[2][0]=111
# list1[2][1]=222
# print(list1)
# print(list3)
# 综合实验1和实验2可以得出,要想copy得到的新列表与原列表的改操作完全独立开
# 必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy
# 3.2 深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)
# 1、循环的语法与基本使用
'''
print(1)
while 条件:
代码1
代码2
代码3
print(3)
'''
# count=0
# while count < 5: # 5 < 5
# print(count) # 0,1,2,3,4
# count+=1 # 5
#
# print('顶级代码----->')
# 2、死循环与效率问题
# 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')
# 3、循环的应用
username = 'egon'
password = '123'
# 两个问题:
# 1、重复代码
# 2、输对了应该不用再重复
# while True:
# inp_name=input('请输入您的账号:')
# inp_pwd=input('请输入您的密码:')
#
# if inp_name == username and inp_pwd == password:
# print('登录成功')
# else:
# print('账号名或密码错误')
# 4、退出循环的两种方式
# 方式一:将条件改为False,等到下次循环判断条件时才会生效
# tag=True
# while tag:
# inp_name=input('请输入您的账号:')
# inp_pwd=input('请输入您的密码:')
#
# if inp_name == username and inp_pwd == password:
# print('登录成功')
# tag = False # 之后的代码还会运行,下次循环判断条件时才生效
# else:
# print('账号名或密码错误')
#
# # print('====end====')
# 方式二:break,只要运行到break就会立刻终止本层循环
# while True:
# inp_name=input('请输入您的账号:')
# inp_pwd=input('请输入您的密码:')
#
# if inp_name == username and inp_pwd == password:
# print('登录成功')
# break # 立刻终止本层循环
# else:
# print('账号名或密码错误')
#
# # print('====end====')
# 7、while循环嵌套与结束
'''
tag=True
while tag:
while tag:
while tag:
tag=False
# 每一层都必须配一个break
while True:
while True:
while True:
break
break
break
'''
## 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('账号名或密码错误')
#
# # print('====end====')
# # 改变条件的方式
# 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('账号名或密码错误')
# 8、while +continue:结束本次循环,直接进入下一次
# 强调:在continue之后添加同级代码毫无意义,因为永远无法运行
# count=0
# while count < 6:
# if count == 4:
# count+=1
# continue
# # count+=1 # 错误
# print(count)
# count+=1
# 9、while +else:针对break
# count=0
# while count < 6:
# if count == 4:
# count+=1
# continue
# print(count)
# count+=1
# else:
# print('else包含的代码会在while循环结束后,并且while循环是在没有被break打断的情况下正常结束的,才不会运行')
# count=0
# while count < 6:
# if count == 4:
# break
# print(count)
# count+=1
# else:
# print('======>')
# 应用案列:
# 版本1:
# count=0
# tag=True
# while tag:
# if count == 3:
# print('输错三次退出')
# break
# 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('账号名或密码错误')
# count+=1
# 版本2:优化
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次,退出')
作业;
作业(必做题):
#1. 使用while循环输出1 2 3 4 5 6 8 9 10
count = 1
while count < 11:
if count == 7:
count += 1
continue
print(count)
count += 1
#2. 求1-100的所有数的和
count = 1
index = 0
while count <= 100:
index += count
count += 1
print(index)
#3. 输出 1-100 内的所有奇数
count = 1
while count <= 100:
if count % 2 == 1:
print(count)
count += 1
#4. 输出 1-100 内的所有偶数
count = 1
while count <= 100:
if count % 2 != 1:
print(count)
count += 1
#5. 求1-2+3-4+5 ... 99的所有数的和
count = 1
index = 0
while count < 100:
if count % 2 == 1:
index += count
else:
index -= count
count += 1
print(index)
#6. 用户登陆(三次机会重试)
user_rel = 'egon'
pass_rel = '1234'
num = 1
while num <= 3:
username = input('请输入用户名:')
password = input('请输入密码:')
if username == user_rel and password == pass_rel:
print('登陆成功')
break
else:
print('登陆失败')
num += 1
#7:猜年龄游戏
要求:
允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
egon = '18'
num = 1
while num <= 3:
age = input('请输入egon的年龄:')
if age == '18':
print('猜对了')
else:
print('不好意思,猜错了')
num += 1
#8:猜年龄游戏升级版(选做题)
要求:
允许用户最多尝试3次
每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
如何猜对了,就直接退出
egon = '18'
num = 1
while num <= 3:
age = input('请输入egon的年龄:')
if age == '18':
print('猜对了')
else:
print('不好意思,猜错了')
num += 1
if num == 4:
entry = input("回复'Y'继续,回复'N'退出,是否还想继续玩:")
if entry == 'Y':
num = 1
else:
break
day07深浅copy与流程控制的更多相关文章
- [基本运算符、流程控制之if判断、与用户交互、深浅拷贝]
[基本运算符.流程控制之if判断.与用户交互] 基本运算符 1.算数运算符 python支持的算术运算符与数学上计算的符号使用是一致的 salary = 3.3 res = salary * 12 p ...
- Python 深浅copy 和文件操作
深浅copy 1,先看赋值运算. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barry', ...
- Python之深浅copy与字符编码
一.深浅copy 1. 首先看赋值运算 l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barr ...
- 数据结构中的列表、元组、字典、集合 ,深浅copy
数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...
- 铁乐学Python_day07_集合and浅谈深浅copy
1.[List补充] 在循环一个列表时,最好不要使用元素和索引进行删除操作,一旦删除,索引会随之改变,容易出错. 如果想不出错,可以采用倒着删除的方法,因为倒着删除进行的话,只是后面元素的位置发生了变 ...
- Linux基础-shell脚本知识整理和脚本编写----------变量、运算符、流程控制、函数、计划任务(发送邮件)
I:知识整理:变量.运算符.流程控制.函数.计划任务 变量 系统变量:set:显示所有变量 env:环境变量 常用系统变量: path pwd lang home his ...
- ansible 流程控制
ansible 流程控制 使用when判断主机名 - hosts: rsync_server tasks: - name: Install rsyncd Server yum: name: rsync ...
- python基础--数据类型、运算符、流程控制
原文地址:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143165862 ...
- Python 流程控制 超全解析(不可错过)
流程控制 程序执行结构流程 计算机程序在解决某个具体问题时,包括三种情形,即顺序执行所有的语句.选择执行部分的语句和循环执行部分语句,这正好对应着程序设计中的三种程序执行结构流程:顺序结构.选择结构和 ...
随机推荐
- Linux安装svn服务
安装svn yum -y install subversion 创建保存仓库/版本库的目录 mkdir -p /opt/data/svndir 创建仓库/版本库, 这里同时创建两个仓库(project ...
- 手撸GBDT原理(未完成)
一直对GBDT里面的具体计算逻辑不太清楚,在网上发现了一篇好博客. 先上总结的关系图 GBDT对类别变量是怎么处理的? 这些东西都是在网上发现的,讲的挺好的. GBDT原理与Sklearn源码分析-回 ...
- Vue+elementUI build打包部署后字体图标丢失问题
错误描述:Vue+elementUI build打包部署后字体图标丢失,控制台显示文件element-icons.woff和element-icons.ttf文件404 错误展现: 控制台报错截图 ...
- 安装centos7后不能联网
我们在安装centos的minimal版本后,在使用yum安装工具时会提示:cannot find a valid baseurl or repo:base/7/x86_64 这是因为不能联网导致的, ...
- HDU-1164-Eddy's research I(分解质因数)
由于这道题目数据范围小,所以属于水题.可以采取暴力的做法来解决. 代码如下: #include"bits/stdc++.h" using namespace std; ; ]; v ...
- JS数组与字符串相互转化
<script type="text/javascript"> var obj="new1abcdefg".replace(/(.)(?=[^$]) ...
- 常见PHP安全网站漏洞及防范措施
一:常见PHP安全网站漏洞 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍. 1.se ...
- App Store成绞肉机 让创业者止步
Store成绞肉机 让创业者止步" title="App Store成绞肉机 让创业者止步"> 曾几何时,苹果App Store一直被称之为创业者的天堂.似乎只要灵 ...
- Android编程权威指南第三版 第32章
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35564145/article/de ...
- 对RLC重排序窗口大小的一点讨论
在LTE协议栈的PDCP层和RLC层,都有一个重排序窗口(reordering window),主要用来保证数据的可靠传输,PDCP层的重排序窗口主要用于handover时保证数据的可靠传输,这里暂且 ...