Python进阶必修课:像搭积木一样玩转循环与数据容器
摘要刚学Python的时候很多人都会遇到一个很尴尬的问题代码能跑但是写得像流水账。比如要打印5次“我错了”就真的复制粘贴5行print。这种写法不仅看着累以后要改个字还得改5次。其实Python早就给我们准备好了“偷懒”的工具——循环和数据容器。这篇笔记就用一个运维/开发同学的日常视角聊聊怎么用while、for和各种容器字符串、列表把重复劳动交给电脑让自己早点下班。引言现在的业务场景里不管是写自动化脚本还是处理日志、批量操作用户数据都离不开两样东西一是让程序反复干活的循环二是能一把抓一堆数据的容器。比如服务器监控要一直跑循环日志文件一行行读出来存到列表里容器。搞懂这两个你写的就不叫脚本了叫工具。循环语句让电脑替你干重复的活什么是循环说白了循环就是让电脑“照着模板反复做”。比如老师说“把这个词抄10遍”你脑子里知道这是一件事只是重复10次。程序也一样。生活中的例子抄单词10遍 → 我知道次数用for往杯子里倒水直到满 → 我不知道倒几次看情况用while如果不用循环代码是这样的print(今天是我不对)print(今天是我不对)print(今天是我不对)# ... 抄到第10遍手都酸了用了循环世界都清净了# 抄10遍foriinrange(10):print(今天是我不对)while循环不知道要跑多久的时候用它while的核心逻辑很简单只要条件成立就一直干。执行逻辑先看条件条件为真干活干完活回来再看条件条件为假收工基础写法# 从1数到5i1whilei5:print(f这是第{i}次)i1# 别忘了这一步不然就死循环了print(数完了)实际场景一模拟用户登录真实场景里我们不知道用户第几次能输对密码所以用while。# 模拟登录直到密码正确whileTrue:pwdinput(请输入密码)ifpwdadmin:print(密码正确登录成功)break# 输对了就跳出循环else:print(密码错误再试一次)代码解读while True代表一直循环。如果输对了用break强制结束不然它就一直问你要密码。这种方式非常适合“等待某个状态发生”的场景比如等服务器启动、等文件出现。实际场景二定时任务提醒比如写个脚本每隔3秒提醒女朋友别生气慎用可能会被拉黑。importtimewhileTrue:print(别生气了我错了)time.sleep(3)# 程序暂停3秒代码解读time.sleep(3)是让CPU歇会儿不然你的电脑风扇会狂转。这种“死循环”常用于监听消息、监控系统状态。for循环知道要干几次或者有一堆东西要挨个处理for循环在Python里有个外号叫“遍历神器”。它最适合干两件事干固定次数的活for i in range(10)。把一堆数据挨个拿出来处理遍历列表、字符串。基础写法# 遍历字符串forchinitheima:print(ch)# 输出i t h e i m arange函数的用法range就是帮你生成一个数字队列。range(5)- 0,1,2,3,4 注意不含5range(1, 5)- 1,2,3,4range(1, 10, 2)- 1,3,5,7,9 步长为2实际场景三批量处理用户数据假设我们有10个用户ID要给每个人发优惠券。# 模拟给前5个用户发券foruser_idinrange(1,6):print(f正在给用户{user_id}发放优惠券...)print(发券完毕)实际场景四九九乘法表经典练手这个例子能很好地理解双层循环。外层控制行内层控制列。# 打印九九乘法表forrowinrange(1,10):forcolinrange(1,row1):print(f{col}×{row}{col*row},end\t)print()# 打完一行换一行代码解读外层row决定现在是第几行。内层col决定这一行有几列。比如第3行就有3列。end\t是为了不让print自动换行用制表符隔开。break和continue循环的刹车和跳板break直接熄火整个循环结束。continue本次算了直接进入下一轮。场景寻找第一个能被7整除的数i1whileTrue:ifi%70:print(f找到了{i})break# 找到就走人不用再看后面的了i1场景跳过讨厌的数字打印1到10但是不想看到5。foriinrange(1,11):ifi5:continue# 跳过5后面的print这次就不执行了print(i)数据容器装数据的篮子字符串文本处理的万金油字符串其实就是一串字符。在Python里它是最常用的容器之一。常用操作去掉两边空格处理用户输入必用usernameinput(用户名)# 用户不小心输了空格usernameusername.strip()# 把头尾空格干掉print(f欢迎{username})大小写转换验证码校验codeAbC3user_inputaBc3# 统一转小写再比较防止用户大写小写混着输ifcode.lower()user_input.lower():print(验证码正确)查找和替换日志分析常用logERROR: File not found# 看看日志里有没有ERRORiflog.find(ERROR)!-1:print(发现错误日志)# 把敏感词替换掉text这傻逼真烦safe_texttext.replace(傻逼,**)print(safe_text)切片截取想要的部分字符串就像一根香肠切片就是切香肠。path/user/home/file.txt# 只要文件名filenamepath[-8:]# 取最后8个字符print(filename)# 反转字符串有时候挺有用wordPythonprint(word[::-1])# nohtyP列表最灵活的数据仓库如果你有一堆同类型的东西比如全班同学的名字用变量一个个存太傻了用列表。定义和基本操作# 定义列表names[张三,李四,王五]print(names[0])# 张三索引从0开始# 增加names.append(赵六)# 在末尾加names.insert(1,田七)# 插到第二个位置# 删除names.remove(李四)# 移除指定元素delnames[0]# 删除第一个# 修改names[0]张三丰# 查询if王五innames:print(王五在名单里)实际场景一黑名单IP拦截写一个简单的防火墙逻辑检查来访IP是否在黑名单里。black_ips[192.168.1.100,10.0.0.5,172.16.0.8]visit_ip10.0.0.5ifvisit_ipinblack_ips:print(fIP{visit_ip}已被封禁拒绝访问)else:print(fIP{visit_ip}允许访问。)实际场景二解析日志文件假设我们有一段Nginx日志想提取出所有的IP地址。logs 192.168.1.1 - - [GET] 10.0.0.2 - - [POST] 192.168.1.1 - - [GET] ip_list[]# 按行分割forlineinlogs.strip().split(\n):# 按空格分割取第一个元素就是IPipline.split( )[0]ip_list.append(ip)print(f提取出的IP列表{ip_list})# 统计访问次数print(f192.168.1.1 访问了{ip_list.count(192.168.1.1)}次)列表的遍历heroes[貂蝉,大乔,小乔]forheroinheroes:print(f正在加载英雄{hero})列表嵌套处理更复杂的数据结构比如年级-班级-学生。# 三层列表嵌套年级 - 班级 - 学生school[[张三,李四],# 一班[王五,赵六],# 二班[田七,钱八]# 三班]# 找二班的王五print(school[1][0])# 先拿第二个班索引1再拿班里第一个人索引0# 遍历全校学生forclass_roominschool:forstudentinclass_room:print(f学生姓名{student})QA环节Q什么时候用while什么时候用forA简单记数得清次数用for比如循环10次、遍历一个列表数不清次数用while比如一直等用户输入、一直监控某个端口直到它打开。Q字符串和列表有什么区别A最大的区别是字符串一旦定下来就不能改不可变比如你把字符串里的’a’换成’b’其实是生成了一个新的字符串。而列表是可以随便改的可变可以直接在原来的列表上加人减人。Qbreak和continue在多层循环里怎么生效A它们只管自己这一层循环。比如你在内层循环写了break只会跳出内层循环外层循环还会继续跑。如果想一下子全停掉可能需要配合标志位或者把循环封装成函数用return。Qrange(5)为什么是0-4A这是编程界的传统艺能了叫“零基索引”。习惯了就好主要是为了方便计算机底层计算偏移量。记住一句话含头不含尾。总结今天我们聊了Python里的两个核心概念循环和数据容器。循环while/for解决了“重复劳动”的问题让我们能用几行代码搞定成千上万次的运算。数据容器字符串、列表解决了“数据打包”的问题让我们能优雅地管理一堆杂乱的信息。在实际工作中这两者往往是组合使用的。比如用while一直盯着日志文件用for循环逐行读取内容再用字符串的方法提取IP最后放进列表里做统计。把这些基础打牢后面学爬虫、Web开发或者数据分析都会轻松很多。

相关新闻

VMware安装蓝屏与注册表错误:从虚拟化原理到彻底修复指南

VMware安装蓝屏与注册表错误:从虚拟化原理到彻底修复指南

1. 项目概述:当VMware遇上注册表与蓝屏如果你正在折腾虚拟机,尤其是VMware Workstation或者Player,那么“无法打开注册表项”和“一开虚拟机电脑就蓝屏重启”这两个拦路虎,你大概率迟早会碰上。这可不是什么小众问题,而…

2026/10/5 16:33:22 阅读更多 →
Unity动态河流与泥石流模拟:基于动态网格与着色器的程序化生成方案

Unity动态河流与泥石流模拟:基于动态网格与着色器的程序化生成方案

1. 项目概述:从静态水体到动态灾害的路径模拟在游戏开发、虚拟仿真和数字孪生项目中,河流与泥石流这类动态环境元素,往往是提升场景真实感与沉浸感的关键。传统做法可能是直接使用Unity的Terrain系统绘制静态水体,或者放置预制好的…

2026/10/14 5:59:38 阅读更多 →
Unity Recorder保姆级教程:录制透明背景序列帧与游戏视频

Unity Recorder保姆级教程:录制透明背景序列帧与游戏视频

1. 项目概述:为什么你需要一个“保姆级”的Unity Recorder教程?如果你正在用Unity开发游戏,无论是独立开发者还是团队中的一员,制作宣传视频、录制玩法演示、或者为UI和特效生成序列帧动画,都是绕不开的环节。你可能试…

2026/10/14 16:23:54 阅读更多 →

最新新闻

基于React Native鸿蒙的智能调度分配模块设计与实践

基于React Native鸿蒙的智能调度分配模块设计与实践

做服务调度类项目,最让人头大的从来不是页面能做得有多花哨,而是“这件事到底该派给谁、怎么快速判断那个人现在真能用”这一连串业务规则背后的逻辑。最近我负责了一个基于React Native鸿蒙跨平台实现的调度分配模块,核心需求很明确&#xf…

2026/10/15 22:10:40 阅读更多 →
临床小讲课高效备:用WorkBuddy快速生成主动脉夹层PPT

临床小讲课高效备:用WorkBuddy快速生成主动脉夹层PPT

1. 临时被点名做小讲课,为什么我第一时间想到的不是自己硬肝在临床科室待过的人都懂,主任临时点名让你第二天晨会做个小讲课,那种感觉比夜班收三个急诊还刺激。尤其是讲主动脉夹层这种心血管急危重症,内容深、进展快、指南更新频繁…

2026/10/15 22:10:40 阅读更多 →
PMP第8章项目质量管理实战:从规划到控制的全流程指南

PMP第8章项目质量管理实战:从规划到控制的全流程指南

1. 质量管理不是“质检员的事”:从三个真实翻车场景说起很多人考完PMP之后,对第8章的记忆就只剩下“规划质量管理、管理质量、控制质量”这三个过程组名称。真到了项目上,要么把质量管理等同于测试团队的事,要么觉得“质量”是个软…

2026/10/15 22:10:40 阅读更多 →
PAT甲级1104:从暴力到O(N)公式,贡献法破解所有连续子段求和与精度坑

PAT甲级1104:从暴力到O(N)公式,贡献法破解所有连续子段求和与精度坑

如果你刷过 PAT 甲级题库,一定见过这道“智力题”味的题目:1104 Sum of Number Segments (20分)。题面只有一句话,意思就是给一串正数,求所有连续子段各自的和,再把所有和加起来。听起来是个人都会做,三层循…

2026/10/15 22:10:40 阅读更多 →
万能BIOS刷新工具实战:SPI Flash刷写与校验救砖全攻略

万能BIOS刷新工具实战:SPI Flash刷写与校验救砖全攻略

简介:一款面向主板BIOS升级场景的刷新工具,适用于需要修复启动故障、提升硬件兼容性或更新固件版本的电脑用户与运维人员。工具宣称“万能”,实际兼容性仍需按主板型号核对,但覆盖常见主板刷新需求。资源包共4个文件,包…

2026/10/15 22:10:40 阅读更多 →
Unity Profiler性能分析实战:从真机采集到GC优化完整指南

Unity Profiler性能分析实战:从真机采集到GC优化完整指南

1. 为什么每个Unity开发者都该把Profiler当日常工具做Unity这几年,我见过太多项目在编辑器里跑得飞起,一打包到真机就卡成幻灯片。帧率从90掉到22,发热烫手,玩家骂声一片,团队却找不到瓶颈在哪。这种场景几乎每个中大型…

2026/10/15 22:09:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →