
简介这份《Python入门经典实例》PDF面向零基础或刚接触编程的初学者围绕Python基础语法与常用数据结构展开帮助读者在动手实践中建立扎实的编程根基。资源以实例驱动的方式讲解输入输出、类型转换、列表、字典、字符串、注释与编码等核心知识点每个实例都配有代码与知识点说明便于对照理解。压缩包内共1个PDF文件约107KB轻量便携适合随时查阅与练习。内容涵盖input()与print()的用法、字符串与数字的转换、列表的索引切片与增删操作、字典的键值访问与遍历、字符串的不可变特性及多行注释与UTF-8编码规范并延伸至条件与循环语句的初步应用。目前已有2021人学习适合作为课堂配套练习或自学参考帮助读者在反复编码中熟悉Python的语法风格与常见陷阱逐步提升独立解决问题的能力。1. 从一份 PDF 实例集说起Python 入门到底该练什么很多人学 Python 卡在同一个地方语法看懂了一到自己写就不知道从哪下手。打开编辑器光标闪了半天最后默默关掉。问题不在智力在于缺少一批「刚好够得着」的练习对象。一份被反复传阅的 Python 入门经典实例 PDF本质上就是这种练习对象的集合——它把变量、循环、函数、文件读写、常用标准库这些知识点拆成一个个能独立跑通的小程序让你在模仿和修改中把语法变成手感。这份材料适合两类人一类是刚学完基础语法、急需大量小练习来巩固的新手另一类是学过一阵但基础不牢、想回头系统补一遍的转行者。它不解决算法竞赛和大型工程问题但能帮你跨过「看得懂、写不出」这道坎。下面我不复述 PDF 里有什么而是讲清楚怎么把这类实例集用出效果包括环境怎么搭、练习怎么排、哪些坑几乎人人都会踩。2. 把实例集跑起来环境、目录与最小验证拿到一份实例 PDF最常见的错误是把它当小说从头读到尾。正确做法是先搭好能跑代码的环境再挑几个实例验证环境没问题然后按知识点分组推进。这一章解决「怎么开始」的问题。2.1 环境选型为什么我建议先用标准 CPython 而不是发行版新手最容易在环境上翻车。网上教程一会儿让你装某个科学计算发行版一会儿让你用系统自带的 Python结果版本冲突、包路径混乱一个简单的import就报错。我的建议是入门阶段只用官方 CPython版本选 3.10 或 3.11 这类长期稳定的别追最新也别用太老的 2.x。安装时勾选「Add Python to PATH」这一步漏掉后面命令行找不到 python 会让人抓狂。装完在终端验证# 查看版本确认是 3.x python --version # 查看解释器路径确认不是系统自带的旧版本 python -c import sys; print(sys.executable)逻辑说明第一条命令确认版本号第二条打印解释器的绝对路径。如果路径指向系统目录比如 Linux 下的 /usr/bin/python而你明明装了新版本说明 PATH 顺序有问题需要把新版本路径提前。参数上没什么可调的关键是看清输出。提示Windows 上用python还是py取决于安装方式两个都试一下哪个能出版本号就用哪个。2.2 目录结构给每个实例一个独立文件实例集里的代码往往按知识点排列但如果你把所有代码都塞进一个文件改着改着就乱了。我一般会建一个练习目录按章节分子目录每个实例一个.py文件mkdir -p python_practice/ch02_basics cd python_practice/ch02_basics touch ex01_hello.py ex02_loop.py逻辑说明mkdir -p递归创建目录-p保证父目录不存在时也一并创建。每个实例独立成文件的好处是出错时能快速定位是哪个练习的问题也方便用版本管理工具记录自己的修改。文件名带上序号和关键词比如ex03_file_read.py比test1.py强得多。2.3 最小验证用三个实例确认环境可用环境搭好后别急着做几十个练习先用三个覆盖不同能力的实例验证一个纯计算、一个文件读写、一个标准库调用。比如# 纯计算判断闰年练条件分支 def is_leap(year): return year % 4 0 and (year % 100 ! 0 or year % 400 0) print(is_leap(2024)) # True # 文件读写写一行再读回来 with open(demo.txt, w, encodingutf-8) as f: f.write(hello) with open(demo.txt, r, encodingutf-8) as f: print(f.read()) # hello # 标准库用 datetime 打印当前日期 from datetime import date print(date.today())逻辑说明第一段验证条件表达式和函数定义第二段验证文件上下文管理器with和编码参数encodingutf-8在中文环境下必须显式指定否则 Windows 上默认编码可能不是 UTF-8读中文会乱码第三段验证标准库导入。三段都跑通说明环境没问题可以开始按实例集推进了。3. 按知识点分组推进把实例集拆成可执行的练习计划一份实例 PDF 动辄几十上百个例子如果按顺序一个个做很容易在某个难点卡住然后放弃。更有效的做法是按知识点分组每组挑几个代表性实例做完再横向对比。这一章讲怎么分组、每组练什么、练到什么程度算过关。3.1 基础语法组变量、分支、循环的练习密度基础语法组的实例通常最多也最容易被轻视。很多人觉得「这我早会了」结果写循环时边界条件还是错。我的做法是每个知识点至少手敲三个变体不看答案先自己写写完再对照实例集里的写法。以循环为例实例集里可能有打印九九乘法表、求素数、累加求和。你可以这样练# 变体一打印九九乘法表练嵌套循环 for i in range(1, 10): for j in range(1, i 1): print(f{j}x{i}{i*j}, end\t) print() # 变体二求 1 到 100 的偶数和练条件加循环 total 0 for n in range(1, 101): if n % 2 0: total n print(total) # 2550 # 变体三用 while 实现同样的累加对比两种写法 total 0 n 1 while n 100: if n % 2 0: total n n 1 print(total) # 2550逻辑说明range(1, 10)生成 1 到 9不包含 10这是 Python 区间左闭右开的典型特征新手最常在这里多算一次。end\t把默认换行改成制表符让乘法表排成一行。while版本里n 1必须放在循环体内漏掉就是死循环。参数上range的第三个参数是步长比如range(0, 10, 2)生成偶数这个在实例集里出现频率很高。练到什么程度算过关能不看答案写出九九乘法表、能解释为什么range(1, 10)不含 10、能把 for 和 while 互相改写这组就算过了。3.2 数据结构组列表、字典、集合的典型操作数据结构是入门实例集的重头戏。列表的增删改查、字典的键值遍历、集合的去重和交并差这些操作在实际代码里出现频率极高。练习时不要只记方法名要理解每种结构的适用场景。# 列表统计成绩并排序 scores [88, 92, 75, 92, 60] scores.append(100) # 末尾追加 scores.remove(60) # 删除指定值 scores.sort(reverseTrue) # 降序排序 print(scores) # [100, 92, 92, 88, 75] # 字典统计单词出现次数 words [apple, banana, apple, cherry, banana, apple] counter {} for w in words: counter[w] counter.get(w, 0) 1 print(counter) # {apple: 3, banana: 2, cherry: 1} # 集合去重和交集 a {1, 2, 3, 4} b {3, 4, 5, 6} print(a b) # {3, 4} print(a | b) # {1, 2, 3, 4, 5, 6}逻辑说明counter.get(w, 0)是字典计数的经典写法第二个参数是键不存在时的默认值避免 KeyError。sort(reverseTrue)原地排序不返回新列表这点和内置函数sorted()不同后者返回新列表。集合的和|分别对应交集和并集比写循环判断高效得多。参数上remove删除不存在的值会报错如果值可能不存在用discard更安全。注意列表的append和extend容易混。append([1,2])把整个列表当一个元素加进去extend([1,2])把元素逐个加进去结果完全不同。3.3 函数与文件组把零散代码组织成可复用单元实例集后半部分通常会涉及函数定义和文件操作。这是从「写脚本」到「写程序」的分水岭。练习重点是函数怎么传参、怎么返回值、文件怎么安全读写。# 函数带默认参数和可变参数 def summarize(name, *scores, pass_line60): passed [s for s in scores if s pass_line] return f{name}: 通过 {len(passed)}/{len(scores)} print(summarize(A同学, 80, 55, 90)) # A同学: 通过 2/3 print(summarize(B同学, 40, 50, pass_line30)) # B同学: 通过 2/2 # 文件逐行读取并统计 with open(data.txt, w, encodingutf-8) as f: f.write(line1\nline2\nline3\n) with open(data.txt, r, encodingutf-8) as f: lines [line.strip() for line in f if line.strip()] print(len(lines)) # 3逻辑说明*scores收集位置参数成元组pass_line60是关键字参数带默认值调用时可以用pass_line30覆盖。文件读取用列表推导式配合strip()去掉换行符if line.strip()过滤空行。with语句保证文件自动关闭即使中间抛异常也不泄漏句柄。参数上open的encoding在跨平台时务必显式写这是血泪经验。4. 避坑与排查入门实例练习中最容易翻车的五个地方这一章集中讲踩坑。以下五条是我见过频率最高的每条按「现象 → 原因 → 解决」写照着排查能省不少时间。4.1 缩进报错IndentationError 的三种成因现象运行时报IndentationError: unexpected indent或expected an indented block。原因Python 用缩进表示代码块混用空格和 Tab、冒号后没缩进、缩进量不一致都会触发。编辑器里看起来对齐实际字符不同。解决统一用四个空格别用 Tab。在编辑器里开启「显示空白字符」一眼就能看出混用。冒号后记得换行缩进if、for、while、def、class后面都要。4.2 中文乱码编码问题的定位方法现象读文件时出现UnicodeDecodeError或者打印出来是乱码。原因文件实际编码和读取时指定的编码不一致。Windows 上默认可能是 GBK而文件是 UTF-8。解决读写都显式指定encodingutf-8。如果文件来源不明用chardet之类的库探测或者用二进制模式读进来再试不同编码。实例集里的代码如果没写编码参数自己补上。4.3 死循环while 条件永远为真的排查现象程序卡住不结束CPU 占用飙升。原因循环变量没更新或者更新语句放错了位置。比如while n 100:里面忘了n 1。解决在循环体第一行加print(n)观察变量变化确认它在向终止条件靠近。复杂循环里设一个计数器超过预期次数就break防止无限跑。4.4 列表越界IndexError 的预防现象IndexError: list index out of range。原因用固定下标访问列表但列表长度不够。比如scores[5]但列表只有三个元素。解决访问前用len()检查或者用负索引从后往前取。遍历时优先用for item in list而不是for i in range(len(list))后者容易在下标上出错。需要下标时用enumerate。4.5 模块导入失败ModuleNotFoundError 的三种情况现象ModuleNotFoundError: No module named xxx。原因一是没安装这个包二是装到了别的 Python 环境三是文件名和模块名冲突比如自己写了个random.py导入时优先找到自己的文件。解决先用pip show 包名确认装没装再看pip -V确认 pip 对应的解释器和你运行代码的解释器是同一个。如果是文件名冲突改掉自己的文件名别用标准库的名字。5. 从跑通到内化用实例集做二次改造的进阶技巧把实例集里的代码跑通只是第一步真正让能力长在身上的是二次改造。我的习惯是每做完一个实例至少做三件事中的一件——改参数看输出变化、加功能扩展、用不同写法重写。这一章讲具体怎么改以及怎么验证自己真的掌握了。5.1 改参数用边界值测试理解代码行为实例集里的代码通常用一组示例数据改参数是最低成本的练习。比如一个排序实例把输入改成空列表、单元素列表、全部相同的元素看输出是否符合预期。def bubble_sort(arr): n len(arr) for i in range(n): for j in range(0, n - i - 1): if arr[j] arr[j 1]: arr[j], arr[j 1] arr[j 1], arr[j] return arr # 边界测试 print(bubble_sort([])) # [] print(bubble_sort([1])) # [1] print(bubble_sort([3, 3, 3])) # [3, 3, 3] print(bubble_sort([5, 1, 4, 2])) # [1, 2, 4, 5]逻辑说明空列表时len为 0外层循环不执行直接返回空列表不会报错。单元素时内层循环范围是range(0, 0)也不执行。全相同元素时比较条件不成立不交换。这几种边界情况能跑通说明代码的健壮性没问题。参数上冒泡排序的时间复杂度是 O(n²)数据量大时换用内置sorted()。5.2 加功能在原有实例上叠加需求跑通一个实例后试着加一个小功能。比如实例是统计单词频率你可以加一个「按频率降序输出前三个」的功能from collections import Counter words [apple, banana, apple, cherry, banana, apple] counter Counter(words) top3 counter.most_common(3) for word, count in top3: print(f{word}: {count})逻辑说明Counter是标准库collections里的计数器most_common(3)返回频率最高的三个元素及其计数返回的是列表元素是元组。这比手写字典计数再排序简洁得多。参数上most_common()不传参数返回全部传整数返回前 N 个。5.3 换写法用不同思路实现同一功能同一个功能用不同方式实现能加深对语言特性的理解。比如列表去重可以用集合、可以用循环加判断、可以用字典的键data [1, 2, 2, 3, 3, 3] # 方法一集合去重但丢失顺序 print(list(set(data))) # [1, 2, 3] # 方法二循环加判断保留顺序 result [] for x in data: if x not in result: result.append(x) print(result) # [1, 2, 3] # 方法三字典键去重保留顺序且高效 print(list(dict.fromkeys(data))) # [1, 2, 3]逻辑说明集合去重最简单但顺序不保证循环加判断保留顺序但时间复杂度 O(n²)dict.fromkeys利用字典键唯一的特性保留顺序且是 O(n)。三种写法各有适用场景数据量小用哪种都行数据量大优先第三种。参数上dict.fromkeys的第二个参数可以指定默认值不传就是 None。5.4 验证掌握程度不看答案重写和讲给别人听怎么判断自己真的会了两个标准一是不看实例集从空白文件重写一遍能跑通二是能用自己的话讲清楚每行代码在干什么包括为什么这么写而不是那么写。我一般会挑几个典型实例隔一周再重写一次如果还能顺利写出来说明内化了。写不出来就回去看不丢人反复几次就记住了。最后说个我自己的习惯每学完一组实例我会把代码里的注释改成自己的话把参数改几个值跑一遍再把输出结果记在一个本子上。这个本子后来成了我查语法和常用写法的第一手资料比任何教程都快。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。