六、深浅拷贝与while循环
一、深浅拷贝
3.1 浅copy:
浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表
用法:
list1=[
'egon',
'lxx',
[1,2]
]
list2=list1.copy()
对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表。但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受影响.
3.2 深copy
要想copy得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy.
用法:
import copy
list1=[
'egon',
'lxx',
[1,2]
]
list2=copy.deepcopy(list1)
二、流程控制之while循环
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、循环的应用
两个问题:
1、重复代码
2、输对了应该不用再重复
username = 'egon'
password = '123'
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('账号名或密码错误')
方式二:break,只要运行到break就会立刻终止本层循环
while True:
inp_name=input('请输入您的账号:')
inp_pwd=input('请输入您的密码:')
if inp_name == username and inp_pwd == password:
print('登录成功')
break # 立刻终止本层循环
else:
print('账号名或密码错误')
7、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('账号名或密码错误')
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次,退出')
六、深浅拷贝与while循环的更多相关文章
- python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作
目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...
- python 深浅拷贝 for循环删除
###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...
- day2学python 数据类型+深浅拷贝+循环
数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...
- join,列表和字典用for循环的删除,集合,深浅拷贝
1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: s = ['a','b','c'] ...
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
- day06(深浅拷贝,元组,字典,集合)
1,今日内容: 1.深浅拷贝:**** 2.元组 - 元组可以存放可变类型 *** 3.字典:***** -- 增删改查 -- 常用方法 4.集合:** -- 集合运算 5.数据类型的相互转化 *** ...
- python运算符,数据类型,数据类型操作,三目运算,深浅拷贝
算数运算符: Py2中精确除法需要导入:from __future__ import division,(符由特 ,将来的.滴未省,除法) py3不需要导入 赋值运算符: 比较运算符: 成员运算符: ...
- 字典,字符串,元组,字典,集合set,类的初步认识,深浅拷贝
Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'Jaso ...
- 【python之路15】深浅拷贝及函数
一.集合数据类型(set):无序不重复的集合,交集.并集等功能 二.三元运算符 三.深浅拷贝 1)字符串和数字:深浅内存地址都一样 2)其他:浅拷贝:仅复制最外面第一层 深拷贝:除了最内层其他均拷贝 ...
随机推荐
- arm-eabi-addr2line工具跟踪Android调用堆栈
使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.h ...
- redis集群配置及python操作
之前我们分析过喜马拉雅的爬取信息,使用分布式爬取,而且需要修改scrapy-redis的过滤算法为布隆过滤来减少redis内存占用,最后考虑这样还是不一定够,那么redis集群就是更好的一种选择方式了 ...
- 软工 实验一 Git代码版本管理
实验目的: 1)了解分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...
- linux学习--2.文件管理的基本命令
文件的基本操作 前言: 看完这篇图文我应该能保证读者在Linux系统下对文件的操作能跟用Windows环境下一样流畅吧,好了下面正文 正文: 基础知识: linux里共有以下几类文件,分别为目录(di ...
- Java框架之SpringBoot-Web构建-yml-模块-注解
SpringBoot Spring Boot是一站式整合所有应用框架的框架,简化Spring应用开发,约定大于配置,去繁从简,开箱即用,准生产环境的运行时应用监控框架 快速构建 SpringBoot ...
- 小白学 Python 数据分析(13):Pandas (十二)数据表拼接
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 原生js中的常用方法的写法
1.js深度克隆的方法 //第一种 function deepClone(obj){ var str,newObj = obj instanceof Array? [] : {}; if(typeof ...
- Spring源码阅读笔记04:默认xml标签解析
上文我们主要学习了Spring是如何获取xml配置文件并且将其转换成Document,我们知道xml文件是由各种标签组成,Spring需要将其解析成对应的配置信息.之前提到过Spring中的标签包括默 ...
- JavaScript两道例题
1.有一个卡车司机肇事后想逃跑,但是被三个人看见其车牌号码,但是没有看全.一号说:车牌的前两位是一样的,二号说:车牌的后两位是一 样的,但是与前两位不一样,三号说:车牌是一个数字的平方,请计算车辆号牌 ...
- 基于sklearn的metrics库的常用有监督模型评估指标学习
一.分类评估指标 准确率(最直白的指标)缺点:受采样影响极大,比如100个样本中有99个为正例,所以即使模型很无脑地预测全部样本为正例,依然有99%的正确率适用范围:二分类(准确率):二分类.多分类( ...