首页/新闻资讯/正文详情

Python基础知识与三种程序结构:变量、判断、循环实战详解

发布时间:2026/9/24 22:25:14 来源:云帆数科 栏目:资讯中心
Python基础知识与三种程序结构:变量、判断、循环实战详解
做Python编程笔记整理这事我其实拖延了挺久。之前一直觉得“基础知识”和“三种结构”这种内容网上一搜一大把再写一遍好像没什么意思。但真当我自己系统梳理学习路线时才发现很多人包括以前的我卡住的地方根本不是那些花哨框架和高阶语法反而是最基础的变量、数据类型、if判断、for循环这些内容没有真正吃透。这篇笔记就是系列整理的开篇把这些容易被跳过、却最不该跳过的东西用我自己踩过坑的经验重新捋一遍。这篇内容适合两类人一类是零基础入门Python刚装好环境、准备系统学语法的朋友另一类是已经学过一阵子却总觉得自己“写不出成段代码”的人。后者的问题往往不是出在高级语法上而是地基不牢。文章里提到的概念都不难但我尽量把每个知识点背后“为什么这样做”的原因也讲清楚这比单纯罗列语法要有用得多。1. 内容整体设计与思路拆解1.1 为什么从基础知识和三种结构切入一个完整的Python程序看起来再复杂拆到底也逃不出两样东西处理数据的语法和控制流程的结构。基础知识解决的是“怎么表示和处理数据”比如变量用来存数据、数据类型决定数据能做什么运算、输入输出负责与用户交互三种结构解决的是“代码按照什么顺序执行”包括顺序、选择、循环。这两块合在一起才能构成一个真正能解决实际问题的程序闭环。我见过太多人学Python的路径是反的今天看到爬虫有意思就去抄爬虫代码明天看到数据分析很火就转头学pandas。结果代码能跑但一行都改不动。归根结底还是基础不牢。这也是我把“基础知识三种结构”放在整套笔记最前面的原因。它们不是最炫酷的部分却是所有应用层学习的先决条件。用盖房子来类比语法基础相当于钢筋、水泥、砖头这些原材料三种结构相当于墙体、房梁和承重柱。没有承重柱越往上搭越容易塌。不管最终想做Web开发、数据分析、自动化脚本还是人工智能方向判断条件和循环处理都是躲不开的日常操作早一点把地基打扎实后面学什么都会顺畅很多。1.2 这套笔记的组织方式避免变成“语法词典”很多入门教程的通病是把所有语法知识一次性罗列出来读者看的时候觉得“挺简单”关上教程就全忘了。这次整理我给自己定了一条原则每个知识点必须搭配一个能立刻运行的最小示例并且把示例放在真实任务里解释而不是为了举例而举例。比如讲循环我不会只写一个打印1到100的空洞demo而是会把循环放进“统计一串数字里的偶数个数”这种小任务里。这样你记住的不只是语法更是“什么情况下应该用循环”的判断力。后面每一篇笔记我都会沿用这个思路。另外强烈建议跟着文章动手敲一遍代码照着看和动手敲完全是两码事只有真写了代码才谈得上调试和排错。2. Python基础知识核心细节与实操要点2.1 变量与数据类型先放下“盒子思维”先聊一个很多新手都理解错的点。网上大量教程喜欢把变量比喻成“装数据的盒子”这个比喻在Python里其实不太准确。更准确的说法是变量是贴在数据上的便签。你可以把写着a的便签贴到整数10上过一会儿也可以把同一张便签撕下来贴到字符串hello上Python完全不会拦着你。a 10 print(a) # 10 a hello print(a) # hello这在Python里完全合法因为Python是动态类型语言变量不需要声明类型类型是跟着数据走的。动态类型带来的好处是代码写起来很快但坑也在这里同一个变量在不同阶段的类型可能完全不同。我在实际项目里遇到过脚本一直运行得好好的某天外部输入的数据格式变了变量从数字变成了字符串后面所有运算全部报错。排查到最后才发现是变量类型在源头就发生了变化。所以实操中我养成了几个习惯。变量命名要清晰且能表达含义尽量用snake_case风格比如student_score而不是ss看到名字就知道存的是什么。命名要避开Python内置关键字class、if、for这些都不能作为变量名。还有一点大段代码里尽量不要让同一个变量反复改变类型类型一旦混乱后面的代码很容易猜错。Python自带type()函数可以随时检查变量类型score 95.5 print(type(score)) # class float基础类型需要记住六个整数int、浮点数float、字符串str、布尔值bool、空值NoneType、列表list。想判断某个数据类型能不能做某种运算最快的办法就是在交互式环境里直接试一下让报错告诉你答案。2.2 输入输出理解与程序打交道的两个窗口print()和input()是新手最先碰到的两个内置函数但越基础的东西越容易用错。先看print()默认情况下每次调用会自动换行多个参数用逗号隔开输出时参数之间会用空格分隔。想改变分隔符或结尾可以用sep和end参数print(Python, 编程, 笔记, sep-, end!\n) # 输出Python-编程-笔记!这些细节看起来不起眼实际写小工具时很有用。比如循环打印进度信息希望不换行而是不断刷新在同一行end就是关键参数。再看input()需要特别提醒无论用户输入什么input()返回的都是字符串。这个点坑过无数新手age input(请输入年龄) print(age 1) # 报错 TypeError字符串和整数不能直接相加所以要先转换类型age int(input(请输入年龄)) print(age 1) # 正常输出int()这类的类型转换函数还藏着一个风险如果用户输入的内容不是纯数字比如abc程序会直接抛出ValueError。严谨一点的写法需要配合try/except做异常捕获这属于后话新手阶段先记住“输入内容要转类型”这个关键点就行。格式化输出方面强烈推荐f-stringPython 3.6以后都支持。可读性最好写起来也最自然name 小明 score 87.5 print(f{name} 的成绩是 {score} 分) # 小明 的成绩是 87.5 分以前流行的%格式化和.format()方法认识一下就行实际开发里f-string用起来最顺手。2.3 运算符体系算术、比较、逻辑与赋值分开记运算符看着多其实可以拆成四个小家族来理解。算术运算符 - * / // % **。新手最容易混淆的是/和//。Python 3里/是真正的除法即使能整除也会返回浮点数比如4 / 2的结果是2.0。//是向下取整的整除7 // 2结果是3。%取余看着简单用途却很大判断奇偶数的经典写法是n % 2 0处理分页逻辑时判断“当前是不是最后一页”也常用取余。它解决的问题本质上是“一个数被另一个数整除之后还剩多少”。比较运算符 ! 。是判断相等是赋值二者看起来相似实际天差地别。我见过有人排查了半小时发现条件怎么都不成立最后一看写成了if score 90解释器直接报语法错误才反应过来。Python的比较还有一个很舒服的链式写法比如判断分数是否在0到100之间if 0 score 100: print(分数合理)这个写法在很多语言里并不支持Python可以可读性高了不少。逻辑运算符and、or、not。特别要注意短路求值and左边为False时右边根本不会执行or左边为True时右边也不会执行。这个特性偶尔能用来简化代码比如“列表不为空才取第一个元素”可以写成first data and data[0]但新手阶段不建议过度使用这种技巧先把逻辑写清楚再说。赋值运算符、、-、*、/等。count 1等价于count count 1是循环里控制次数最常用的写法。3. 三种程序结构从顺序到循环的进化3.1 顺序结构程序默认的执行方式顺序结构不需要刻意写任何语法因为Python解释器天然就是逐行读取、逐行执行代码的。你写第一行它执行第一行你写第二行它执行第二行遇到赋值语句也不例外。这个“顺序”的意义在于代码的先后顺序本身就是逻辑的一部分。看这段代码num 5 num num 3 print(num) # 8第二行num num 3在数学上看着不像等式但在程序里它的含义是“先取num当前的值5加上3得到8再把这个新值贴回num这个标签上”。理解这一点后面再学循环逻辑就顺了。顺序结构最经典的小问题是交换两个变量的值。很多语言新手会写a 1 b 2 a b b a # 结果两个都变成了2因为前两行执行完a已经变成2原来的1丢了。正确做法要么引入临时变量要么借助Python的多元赋值特性a, b b, a这一行在Python里就能完成交换因为右侧会先组成一个元组(b, a)再按顺序解包赋值给左侧。顺序结构的“坑”主要来自顺序依赖。比如先使用了某个变量后面才给它赋值那前面这句就会报NameError: name xxx is not defined。这种问题在代码段重复时尤其容易出现解决方法是保持代码从上到下、从依赖到被依赖的顺序去读不要跳着写。3.2 选择结构让程序学会看情况办事选择结构就是判断Python用if实现基本有三种形态。单分支if score 60: print(及格)双分支if score 60: print(及格) else: print(不及格)多分支if score 90: print(优秀) elif score 60: print(良好) else: print(不及格)这里有三个关键点要牢牢记住。第一elif是else if的简写但比层层嵌套的else if可读性高很多。多个elif会从上到下逐个判断条件一旦某个条件成立后面的所有分支统统跳过。所以分支顺序是有讲究的范围大的条件尽量放后面范围小的条件放前面否则大范围条件会把后面的分支“吃掉”。比如先判断score 0再判断score 60那后面那句永远不会执行。第二if后面的条件本质上是一个表达式Python会把它转成布尔值处理。数字0、空字符串、空列表[]、None都会被当作False其他值都当作True。所以经常能看到这种简洁写法if data: print(data 非空)而不是写成if data is not None and len(data) 0。当然太隐晦也不好代码是给人看的一味追求“短”反而增加阅读成本。第三也是Python最让新手头疼的特性——缩进即语法。其他语言用花括号{}包住代码块Python靠缩进决定哪些代码属于这个if。同一个if下面的语句必须保持同样的缩进层级否则解释器直接报IndentationError。嵌套选择不是不能用但要控制层级缩进超过三四层读起来就很痛苦。我常用的优化思路是合并条件或者把复杂判断拆成小函数尽量让代码保持“横向短、纵向浅”。3.3 循环结构for 和 while 各管一摊循环是程序自动化能力的来源也是三种结构里内容最丰富的部分。for循环适合“明确知道要遍历什么”的场景字符串、列表、字典、range序列都可以遍历。最常见的用法是配合range()# range(5) 生成 0,1,2,3,4 for i in range(5): print(i) # range(1, 6) 生成 1,2,3,4,5 # range(1, 10, 2) 生成 1,3,5,7,9第三个参数是步长遍历列表很直接names [小明, 小红, 小刚] for name in names: print(name)如果你不仅需要元素还需要下标用enumerate()for index, name in enumerate(names): print(index, name)while循环适合“不知道循环多少次只知道什么时候结束”的场景。比如猜数字游戏用户没猜对之前循环一直继续guess 0 target 7 while guess ! target: guess int(input(猜一个数字)) print(猜对了)while最大的风险是死循环条件一直为True循环就不会结束。解决办法是在循环体内确保某个条件会变化比如每轮重新给guess赋值。程序真卡死了可以在IDE里点停止按钮或者用CtrlC中断。循环里还有两个控制语句。break彻底跳出整个循环continue跳过本次循环进入下一轮。实操中经常配合使用比如遍历名单时遇到空名字跳过遇到管理员提前退出。Python还有一个独有特性for/while后面可以跟else含义是“循环没有被break中断时执行else块”。这个设计常见于搜索场景找到目标就break全部找完没找到就会进入else。第一次看到这个语法觉得别扭用得久了反而喜欢上这种紧凑感。循环里比较隐蔽的坑是“边遍历边修改列表”。比如想在for循环里通过remove删除所有偶数你会发现结果经常不对因为索引在遍历过程中发生了变化。这种场景建议先构造一个新列表把要保留的元素收集起来最后再替换原列表。场景推荐用 for推荐用 while知道循环次数是否遍历列表/字符串/字典是否不知道何时结束只知道退出条件否是配合用户输入做交互否是3.4 组合实战把三种结构捏在一起三种结构单独看都不难难点在于把它们组合起来解决实际问题。来看一个经典小任务输入5个学生的成绩统计及格人数、最高分和平均分。passed 0 total 0 max_score 0 for i in range(5): score float(input(f请输入第{i1}个学生的成绩)) total score if score max_score: max_score score if score 60: passed 1 print(f及格人数: {passed}) print(f最高分: {max_score}) print(f平均分: {total / 5:.1f})这段代码里for循环是主体属于循环结构循环内部用if更新最高分、判断是否及格属于选择结构代码从上到下按顺序执行属于顺序结构。三个结构整合在一起就是一个完整的小程序。建议你亲手敲一遍然后试着改成统计不及格人数、计算优秀率改着改着三种结构就彻底吃透了。4. 常见问题与排查技巧实录4.1 新手最容易踩的坑从报错信息反推问题学习阶段报错不是坏事报错信息反而是排查问题最直接的线索。整理了几个入门阶段最高频的问题直接做成了速查表。报错信息常见原因解决办法IndentationError: unexpected indent缩进不统一或有意外空格统一用4个空格检查是否有多余缩进NameError: name xx is not defined变量名打错或变量还没定义就使用检查拼写确认赋值语句在调用之前TypeError: can only concatenate str...字符串和数字混用运算用int()或str()做类型转换ValueError: invalid literal for int()int()处理了非数字字符串先校验输入内容或做异常捕获ZeroDivisionError: division by zero除数为0检查循环里的数据是否可能为0程序没报错但结果不对逻辑问题和混淆最常见在关键节点用print()打印变量核对读报错信息有个小技巧不需要从第一行开始看直接从最后一行看起。最后一行通常是异常类型和具体说明前面的调用堆栈在入门阶段信息量没那么大。4.2 调试三板斧print、注释、小步验证还不熟悉调试工具的阶段print就是最强大的调试工具。觉得哪一步结果不对就在那一步前后打印变量print( 调试开始 ) print(当前 num 的值:, num) print(当前类型:, type(num))打印出来一看问题往往就清楚了。还有一个方法是“注释排查法”先用#把代码分成两半注释掉后半段跑一次确认前半段正常再把后半段加回来逐步缩小范围。这个过程有点像二分查找比对着屏幕发呆高效得多。写代码时建议打开IDE的语法高亮和行号提示。我用VS Code写Python比较多装官方Python插件后很多拼写错误和类型问题在保存时就被标红。很多人觉得环境配置麻烦其实装对插件后基本零成本。另外注释不用每行都写重点标注“这段逻辑期望的结果是什么”比如# 这里期望 num 是偶数进入分支 if num % 2 0: ...一旦实际结果和注释描述对不上说明问题就藏在这段逻辑附近。最后说点心态上的事情。学到三种结构这个阶段代码出错是绝对正常的。我到现在还记得自己第一次写for循环时死循环到只能关掉终端重开但恰恰是那些报错和卡顿让我把break、continue、缩进这些规则真正刻在了脑子里。基础阶段犯错成本很低放心大胆去试就好。

相关推荐

Qwen Coder本地部署实战:Mac上运行AI代码生成模型的完整指南
Qwen Coder本地部署实战:Mac上运行AI代码生成模型的完整指南

把"coder"丢进搜索引擎,你会发现这个单词养活了好几条完全不相干的搜索路径:有人想知道"coder咋下载",有人盯着"qwen coder mac 部署"研究半天,有人在讨论"ai coder 代码生成现状"&#… · 2026/9/24 22:25:14

​断网也能用、待机低能耗!端侧AI算法,解决智能养宠硬件难题
​断网也能用、待机低能耗!端侧AI算法,解决智能养宠硬件难题

国庆等长假外出留守场景中,智能养宠硬件的弊端被无限放大:断电断网、长期待机时,传统算法高功耗极易造成设备掉线、停机、功能失效,成为用户投诉重灾区。市面上两类主流硬件痛点清晰分化:喂食器、智能窝等插电为主、电… · 2026/9/24 22:25:14

LaTeX模板实战:高效撰写学术论文审稿回复信的全流程指南
LaTeX模板实战:高效撰写学术论文审稿回复信的全流程指南

1. 录用通知到手之后,我为什么还要写这封回复信ICDE 2026的录用邮件弹出来那天,我盯着屏幕反复读了三遍,确认不是看错了论文编号。兴奋劲过了两三个小时,人缓下来之后,第一件让我头疼的事反而不是camera-ready版本怎么… · 2026/9/24 22:25:14

GitHub Trending 日榜怎么用?从看榜到跑通开源项目的完整指南
GitHub Trending 日榜怎么用?从看榜到跑通开源项目的完整指南

1. 日榜是信息入口,不是刷星工具每天早上打开 GitHub Trending 已经成了我的固定动作。今天(2026-09-20)的日榜依然保持了不错的密度,AI 应用、开发者效率、音视频工具、前端创意项目都有新面孔。不是说排行榜上的项目一定适合你&… · 2026/9/24 23:01:47

AI Agent Skills 完全指南:从原理到 Claude Code / Cursor 接入实践
AI Agent Skills 完全指南:从原理到 Claude Code / Cursor 接入实践

过去半年,我的大部分编码工作基本都交给了 AI Agent。Cursor 和 Claude Code 两款工具我都在用,而且是按项目性质来回切换。用得越深,一个痛点就越明显:同一个项目的编码规范、同一个框架的写法约定、同一个团队的审查标准&#x… · 2026/9/24 23:01:47

恶劣天气图像分类数据集:雾雨沙雪四类千张实拍图
恶劣天气图像分类数据集:雾雨沙雪四类千张实拍图

简介:本资源是一份面向计算机视觉初学者与算法工程师的恶劣天气图像分类数据集,聚焦雾、暴雨、沙尘暴、暴雪四类典型低能见度场景,适用于自动驾驶感知模块训练、交通监控系统鲁棒性验证及气象图像分析等实际任务。数据包共1030个文件&#xf… · 2026/9/24 23:01:47

liquid_engine鸿蒙化适配实战:从字符串拼接到模板引擎
liquid_engine鸿蒙化适配实战:从字符串拼接到模板引擎

做鸿蒙应用开发,尤其是从 Flutter 生态跨到 OpenHarmony 后,有一个问题会很快暴露出来:文本处理还在用$字符串拼接,模板稍微复杂一点就乱成一锅粥。我最近在帮团队把一套 Flutter For OpenHarmony 的商城应用做鸿蒙化适配时&#… · 2026/9/24 23:01:47

C# WinForm迷宫大作业:DFS生成、移动暂停与A*寻路避坑指南
C# WinForm迷宫大作业:DFS生成、移动暂停与A*寻路避坑指南

简介:这份资源是面向高校学生与C#初学者的WinForm迷宫游戏期末大作业完整项目,围绕桌面应用开发、迷宫自动生成、角色移动、暂停控制与路径提示等核心功能展开,适合作为课程设计参考或自学练手案例。压缩包共165个文件,约3.24MB&a… · 2026/9/24 23:01:47

网页视频下载实战:从开发者工具定位地址到HLS切片与防盗链处理
网页视频下载实战:从开发者工具定位地址到HLS切片与防盗链处理

不知道你有没有遇到过这种场景:想从某个网页上保存一段视频到本地,但页面里既没有下载按钮,也没有分享链接,右键菜单里只有脏兮兮的一段“视频另存为”结果点完直接变成假死,或者干脆转圈。我经常收到类似“下载页面上… · 2026/9/24 23:01:33

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码