当前位置: 首页 > news >正文

【Python中while循环】

一、深拷贝、浅拷贝

1、需求

1)拷贝原列表产生一个新列表
2)想让两个列表完全独立开(针对改操作,读的操作不改变)
要满足上述的条件,只能使用深拷贝

2、如何拷贝列表

1)直接赋值

# 定义一个数组
list1=["paipai","3",[10,3]
]
# 1、使用赋值的方式,值的变动肯定是对等的
list2=list1
print(list1)
print(list2)
# 重新为list1赋值
list1[0]='achao'
print(list1)
print(list2)

执行结果

/usr/local/bin/python3.8 /Users/achao/PycharmProjects/Achao/day07/深浅拷贝&while循环.py
['paipai', '3', [10, 3]]
['paipai', '3', [10, 3]]
['achao', '3', [10, 3]]
['achao', '3', [10, 3]]Process finished with exit code 0

2)浅拷贝 xxx.copy()

实现方式🔽

# 定义一个列表
list1 = ['paipai','eat',[3, 12]
]
# 使用浅拷贝
list2 = list1.copy()
print(list1)
print(list2)
# 修改list1中的值但是list2中的值不会随之改变
list1[2][1] = 'chaochao'
list1[1] = 'sleep'
print(list1)
print(list2)
print(id(list1[0]),id(list1[1]),id(list1[2]))
print(id(list2[0]),id(list2[1]),id(list2[2]))

执行结果

/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/深浅拷贝.py
['paipai', 'eat', [3, 12]]
['paipai', 'eat', [3, 12]]
['paipai', 'sleep', [3, 'chaochao']]
['paipai', 'eat', [3, 'chaochao']]
4302011504 4302021232 4303476416
4302011504 4302021232 4303476416
Process finished with exit code 0

可以看出使用浅拷贝时,当修改原列表中不可变的元素(不可变类型的赋值)时,复制出的列表值是不会随之改变的,但是,如果原列表中修改的值是可变元素,那么复制出的列表值也是会随之变化的。
1)对于不可变类型的赋值:
赋值都是产生了新的值,让原列表的索引指向新的内存地址,所以并不会影响到新拷贝过去的列表
2)对于可变类型的赋值
虽然改变了可变类型中包含的值,但是整体的内存地址是不变的。新复制的列表的索引仍然指向原来的内存地址,但内存地址中存放的值的内存地址已经改变,所以大家就都变了

总结:浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表。
原理图:
在这里插入图片描述

3) 深拷贝 新列表名=copy.deepcopy(要复制的列表名)

说明:对每一层数据都做一个区分(区分对应的数据类型是否可变)
根据浅拷贝的表现。要想copy得到新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy。
但复制的数据类型可变时,会产生一个新的地址空间

# 2)深拷贝import copylist1 = ['paipai',  # 不可变'eat',  # 不可变[3, 12]  # 可变
]
list2 = copy.deepcopy(list1)
# print(id(list1))
# print(id(list2))
# print(id(list1[0]),id(list1[1]),id(list1[2]))
# print(id(list2[0]),id(list2[1]),id(list2[2]))
print(id(list2))
print(id(list1[2][0]), id(list1[2][1]))
print(id(list2[2][0]), id(list2[2][1]))
# 修改原列表的值,可以发现只有原列表的值被改变了,copy出来的值是没有被改变的
list1[2][1] = 18
print(id(list1[2][0]), id(list1[2][1]))
print(id(list2[2][0]), id(list2[2][1]))

执行结果🔽

/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/深浅拷贝.py
4300084288
4296927600 4296927888
4296927600 4296927888
4296927600 4296928080
4296927600 4296927888

原理图
在这里插入图片描述

4)总结

深拷贝与浅拷贝最本质的区别

浅拷贝
在这里插入图片描述
深拷贝
在这里插入图片描述

二、while循环(条件循环)

1、定义

2、样式

while 条件:代码1代码2代码3
print('循环结束开始执行其他代码')

代码块

count = 0
while count < 5:print(count)count += 1
print("循环结束啦,开始执行其他代码")

执行结果

/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day02/while循环练习.py
0
1
2
3
4
循环结束啦,开始执行其他代码Process finished with exit code 0

3、死循环与效率问题

# 1)死循环与效率问题
count=0
while count < 5 :print(count) #会一直输出0
# 2)直接将条件写为真
while True:name=input('your name is:') #有用户交互(io)的死循环输入对终端的性能影响问题<纯计算问题print(name)
# 3)纯计算无io死循环问题
while Trueprint(1+1)

4、循环应用

1)for循环

遍历序列或其它可迭代对象

for 变量 in 可迭代对象:循环体 

示例:找到一个大于3的数字,并退出循环

list1=[1,2,3,4,5]
for num in list1:print(list)if num>3print("找到第一个大于3的数字:{num}")break

2)while循环

🧬 基于条件重复执行代码块
while循环在给定条件为True时才会执行循环体

count =0
while count <5:print(count)count+=1

进阶使用:验证用户账号密码是否正确,给出对应的提示;若验证失败,需要启动循环让用户可以一直输入
**☝🏻第一步:**先实现账号密码验证逻辑正常

name = "paipai"
password = '123'
username = input("请输入你的用户名:")
userpassword = input("请输入你的密码:")
if username==name and userpassword==password:print("账号密码验证通过,登录成功")
else:print("账号或密码输入失败,请重新登陆")

🔽执行结果

#验证成功时
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:paipai
请输入你的密码:123
账号密码验证成功,可以直接登录Process finished with exit code 0
# 验证失败时
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:KKK
请输入你的密码:hhhh
账号或密码输入失败,请重新登陆Process finished with exit code 0

可以看到,当验证失败时,理论上用户要可以再次输入账号密码的,也就是代码要可以循环执行,此时引入while

✌🏻第二步 利用while实现循环

name = "paipai"
password = '123'
while True:username = input("请输入你的用户名:")userpassword = input("请输入你的密码:")if username == name and userpassword == password:print("账号密码验证通过,登录成功")else:print("账号或密码输入失败,请重新登陆")

🔽执行结果

#验证失败时(符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:123
请输入你的密码:123
账号或密码输入失败,请重新登陆
请输入你的用户名:
#验证成功时(不符合预期,用户账号密码都已经验证通过,但是仍然需要用户再次输入,当条件满足时,循环体缺少一个终止的机制)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:paipai
请输入你的密码:123
账号密码验证通过,登录成功
请输入你的用户名:

3)退出循环

方式一:将while循环的条件改为False,等到下次循环判断条件时才会生效

# 终止循环
name = "paipai"
password = '123'
tag = True
while tag:tag = False# 本次循环中的代码会继续执行,只有在下次循环条件判断时,tag的值才发生改变username = input("请输入你的用户名:")userpassword = input("请输入你的密码:")if username == name and userpassword == password:print("账号密码验证通过,登录成功")else:print("账号或密码输入失败,请重新登陆")print("代码会继续执行到这里")

🔽执行结果

# 验证成功时(符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:paipai
请输入你的密码:123
账号密码验证通过,登录成功
代码会继续执行到这里Process finished with exit code 0# 验证失败时(不符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:123
请输入你的密码:123
账号或密码输入失败,请重新登陆
代码会继续执行到这里Process finished with exit code 0

如何使用方式一来满足验证成功就不循环执行,验证不成功就循环执行呢
只需要把结束循环的条件赋值修改语句换个位置就好了

# 终止循环
name = "paipai"
password = '123'
tag = True
while tag:username = input("请输入你的用户名:")userpassword = input("请输入你的密码:")if username == name and userpassword == password:print("账号密码验证通过,登录成功")tag = False  # 本次循环中的代码会继续执行,只有在下次循环条件判断时,tag的值才发生改变else:print("账号或密码输入失败,请重新登陆")print("代码会继续执行到这里")

🔽执行结果

# 验证成功时(符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:paipai
请输入你的密码:123
账号密码验证通过,登录成功
代码会继续执行到这里Process finished with exit code 0
# 验证失败时(会继续循环提示我重新输入,符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:123
请输入你的密码:1243
账号或密码输入失败,请重新登陆
代码会继续执行到这里
请输入你的用户名:11
请输入你的密码:

方式二:break,只要运行到break就会立刻终止本层循环
在循环体内,使用控制语句来改变循环的执行流程;

  1. break,终止最内部的循环

🔽执行结果

# 验证成功时(符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:paipai
请输入你的密码:123
账号密码验证通过,登录成功Process finished with exit code 0
# 验证失败时(完美符合预期)
/usr/local/bin/python3.9 /Users/yincheng/local/study/Python基础/2024-11/day07/while循环实际应用.py
请输入你的用户名:123
请输入你的密码:124
账号或密码输入失败,请重新登陆
代码会继续执行到这里
请输入你的用户名:

总结:如果while循环代码后面还需要执行其他代码,就用修改while条件判断的方式

相关文章:

【Python中while循环】

一、深拷贝、浅拷贝 1、需求 1&#xff09;拷贝原列表产生一个新列表 2&#xff09;想让两个列表完全独立开&#xff08;针对改操作&#xff0c;读的操作不改变&#xff09; 要满足上述的条件&#xff0c;只能使用深拷贝 2、如何拷贝列表 1&#xff09;直接赋值 # 定义一个…...

【深度学习】服务器常见命令

1、虚拟环境的安装位置 先进入虚拟环境 which python2、升序查看文件内容 ls -ltr3、查看服务器主机空间使用情况 df -hdf -h .4、查看本地空间使用情况 du -sh ./*du -sh * | sort -nr5、查找并删除进程 # 查找 ps aux# 删除 kill -KILL pid6、查看服务器配置 lscpuuna…...

技术分析模板

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; openAI 的 GPT 大模型的发展历程。 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 例如&#xff1a; 在语言模型中&#xff0c;编码器和解码器…...

python:文件操作

一、文件路径 在Windows系统中&#xff0c;每个磁盘都有自己的根目录&#xff0c;用分区名加反斜杠来表示。我们定位文件的位置有两种方法&#xff0c;一种是绝对路径&#xff0c;另一种是相对路径。绝对路径是从根目录出发的路径&#xff0c;路径中的每个路径之间用反斜杠来分…...

Nginx和Apache有什么异同?

Nginx和Apache都是广泛使用的Web服务器软件&#xff0c;它们各自具有独特的特点和优势&#xff0c;适用于不同的应用场景。以下是关于Nginx和Apache的不同、相同以及使用区别的详细分析&#xff1a; 一、不同点 资源占用与并发处理能力&#xff1a; Nginx使用更少的内存和CPU资…...

泰州榉之乡全托机构探讨:自闭症孩子精细动作训练之法

当发现自闭症孩子精细动作落后时&#xff0c;家长们往往会感到担忧和困惑。那么&#xff0c;自闭症孩子精细动作落后该如何训练呢&#xff1f;今天&#xff0c;泰州榉之乡全托机构就来为大家详细解答。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校&#xff0c;一直…...

Cookie跨域

跨域&#xff1a;跨域名&#xff08;IP&#xff09; 跨域的目的是共享Cookie。 session操作http协议&#xff0c;每次既要request&#xff0c;也要response&#xff0c;cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …...

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类&#xff0c;它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem&#xff0c;你可以定义和显示一个多边形&#xff0c;包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…...

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…...

如何构建一个可扩展、全球可访问的 GenAI 架构?

你有没有尝试过使用人工智能生成图像&#xff1f; 如果你尝试过&#xff0c;你就会知道&#xff0c;一张好的图像的关键在于一个详细具体的提示。 我不擅长这种详细的视觉提示&#xff0c;所以我依赖大型语言模型来生成详细的提示&#xff0c;然后使用这些提示来生成出色的图像…...

QT实战--qt各种按钮实现

本篇介绍qt一些按钮的实现&#xff0c;包括正常按钮&#xff1b;带有下拉箭头的按钮的各种实现&#xff1b;按钮和箭头两部分分别响应&#xff1b;图片和按钮大小一致&#xff1b;图片和按钮大小不一致的处理&#xff1b;文字和图片位置的按钮 效果图如下&#xff1a; 详细实现…...

RNN And CNN通识

CNN And RNN RNN And CNN通识一、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1. 诞生背景2. 核心思想和原理&#xff08;1&#xff09;基本结构&#xff1a;&#xff08;2&#xff09;核心公式&#xff1a;&#xff08;3&#xff09;关…...

生产环境中:Flume 与 Prometheus 集成

在生产环境中&#xff0c;将 Apache Flume 与 Prometheus 集成的过程&#xff0c;需要借助 JMX Exporter 或 HTTP Exporter 来将 Flume 的监控数据转换为 Prometheus 格式。以下是详细的实现方法&#xff0c;连同原理和原因进行逐步解释&#xff0c;让刚接触的初学者也能完成集…...

求平均年龄

求平均年龄 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 班上有学生若干名&#xff0c;给出每名学生的年龄&#xff08;整数&#xff09;&#xff0c;求班上所有学生的平均年龄&#xff0c;保留到小数…...

Ardusub源码剖析(1)——AP_Arming_Sub

代码 AP_Arming_Sub.h #pragma once#include <AP_Arming/AP_Arming.h>class AP_Arming_Sub : public AP_Arming { public:AP_Arming_Sub() : AP_Arming() { }/* Do not allow copies */CLASS_NO_COPY(AP_Arming_Sub);bool rc_calibration_checks(bool display_failure)…...

【NLP 2、机器学习简介】

人生的苦难不过伏尔加河上的纤夫 —— 24.11.27 一、机器学习起源 机器学习的本质 —— 找规律 通过一定量的训练样本找到这些数据样本中所蕴含的规律 规律愈发复杂&#xff0c;机器学习就是在其中找到这些的规律&#xff0c;挖掘规律建立一个公式&#xff0c;导致对陌生的数…...

数据结构与算法——N叉树(自学笔记)

本文参考 N 叉树 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 遍历 前序遍历&#xff1a;A->B->C->E->F->D->G后序遍历&#xff1a;B->E->F->C->G->D->A层序遍历&#xff1a;A->B->C->D->…...

【趣味升级版】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 开始游戏 手动升级&#xff08;满100%即可升级&#xff09; 升级完成&#xff0c;即可解锁打怪模式 新增功能说明&#xff1a; 如何操作&#xff1a; 完整代码 实现一个简单的斗破苍穹修炼文字游戏&#xff0c;你可以使用HTML、CSS和JavaScript结合来构建…...

【Oracle】个人收集整理的Oracle常用SQL及命令

【建表】 create table emp( id number(12), name nvarchar2(20), primary key(id) ); 【充值一】 insert into emp select rownum,dbms_random.string(*,dbms_random.value(6,20)) from dual connect by level<101; 【充值二】 begin for i in 1..100 loop inser…...

Linux内核4.14版本——ccf时钟子系统(5)——通用API

1. clk_get 1.1 __of_clk_get_by_name 1.2 clk_get_sys 2. clk_prepare_enable 2.1 clk_prepare 2.2 clk_enable 3. clk_set_rate 1. clk_get clock get是通过clock名称获取struct clk指针的过程&#xff0c;由clk_get、devm_clk_get、clk_get_sys、of_clk_get、of_clk_g…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...