自学Python第5天:函数与字典实战,突破编程分水岭

发布时间:2026/10/21 7:46:59

自学Python第5天:函数与字典实战,突破编程分水岭 打卡第5天。说实话前四天我过得很轻松环境装好、print() 打出第一行字、变量赋值、字符串拼接、if 判断跟着视频敲一遍运行通过就截图收工当时觉得 Python 也不过如此。今天开始明显不对劲函数和字典两个新东西同时进场视频里每一行都能看懂可一关掉视频自己动手写手指就跟脑子闹矛盾。这种眼睛会了手不会的状态基本标志着 Python 学习正式上强度了。这篇东西就是第5天的完整复盘记录学到哪、怎么练的、踩了哪些坑、打卡这个动作本身又该怎么调整。如果你也是自学 Python 刚到第5天附近希望这份记录能帮你省掉一点摸索的时间。1. 第5天的进度坐标函数和字典同时进场1.1 前4天的学习路线回看先把我前几天的进度摆出来你才好对照自己现在在哪。我的节奏不算快但每一步都动过手第1天装 Python、配置编辑器、第一次运行 print(hello)搞明白什么是交互模式、什么是脚本文件。第2天变量、基本数据类型整数、浮点数、字符串、布尔值、简单的运算和拼接。第3天input() 输入、字符串的常用方法比如用 strip() 去掉空白、用 split() 拆分踩了输入进来都是字符串的坑。第4天if / elif / else 条件判断还有 for 循环做过一个小练习循环打印 1 到 100 里的偶数。到第5天为止我已经能写出从上往下顺序执行、遇到判断走分支、遇到循环重复执行的脚本但所有代码都是平铺在文件里的写完了自己都嫌啰嗦。今天要解决的就是这个痛点函数解决代码复用的问题字典解决数据怎么组织得更合理的问题。1.2 为什么第5天是一道分水岭我自己的体会是前4天学的都是语法零件第5天开始是在学组装思路。变量、判断、循环这些本质是程序怎么走而函数和字典开始触及程序怎么设计。同样是写10行代码前4天你只要记对关键字和格式就行第5天开始需要你在动笔之前先想清楚这块逻辑要不要抽出来这批数据用列表还是字典装这种转变最明显的信号就是报错从语法错误变成了逻辑问题。语法错误好办哪错了编译器直接告诉你但逻辑问题往往不报错代码能跑结果却不对。能处理逻辑问题才算真正在学编程。1.3 第5天的时间分配参考我建议如果你今天也练到函数和字典别只盯着视频看按这个比例来。我把可用的晚上两小时拆成了三块30分钟把函数和字典的语法过一遍重点是 def、return、{} 的写法。60分钟做一次完整的综合练习今天做一个班级成绩统计的小工具后面细说。30分钟把练习中踩的坑整理成笔记顺手把报错信息抄下来。压轴那60分钟才是今天真正的重头戏前30分钟只是为了有工具可用。2. 函数的本质把重复的事情封装成工具2.1 先看看没有函数时代码有多痛很多人学函数最容易犯的错不是语法而是不知道为什么要学。我第4天写循环打印成绩等级时代码长这样scores [92, 78, 65, 88] for score in scores: if score 85: print(优秀) elif score 70: print(良好) else: print(加油)看着还行但如果程序里要判断三次呢就得把这四行判断原样再抄两遍。抄一遍两遍还行抄到五遍维护起来就是灾难比如你想把优秀的分数线从85改成90得去所有复制过的地方逐一修改漏改一处就是 bug。函数的思路特别直白把一段逻辑起个名字包起来以后每次要用喊这个名字就行参数不同返回结果不同。生活里这就是个菜谱同一个菜谱今天放这条鱼、明天放那条鱼做法不变材料变出锅的东西就跟着变。2.2 def、参数和返回值的完整拆解来看今天写的第一个函数def level(score): if score 85: return 优秀 elif score 70: return 良好 else: return 加油拆开讲三个部分def是定义函数的关键字后面跟函数名函数名最好起得能说明用途比如level就是评等级。括号里的score是参数相当于菜谱里的主料。调用函数时传进来的值会被填进这个位置。return是产出函数算完之后把结果交回给调用它的地方。这个优秀/良好/加油字符串就是返回值。调用就是一句话print(level(92)) # 输出优秀 print(level(78)) # 输出良好我第5天第一次写函数时总是忘了在函数体后面留空行或者把return和print混着用。先忍住这些细节冲动把骨架记牢def 函数名(参数)缩进写下函数体最后用 return 交回结果。2.3 return 和 print 的区别新手必问这个问题我今天在自己身上真实发生了也是几乎所有初学者都会困惑的点函数里写print和写return看起来都能在屏幕上显示内容到底有什么不一样一句话回答print只是把东西显示出来显示完就没了return是把结果交还给程序后续代码还能接住继续用。看这段对比def show(score): print(score) def give(score): return score # 调用 show 直接显示数字 show(92) # 屏幕上出现 92但 show(92) 这个式子本身是 None # 调用 give 得到数字可以继续参与计算 result give(92) 8 # result 是 100关键的坑就在最后一行如果give里写的是print(score)那give(92) 8会直接报错因为give(92)拿到的是None空值空值没法跟数字相加。我当时盯着报错看了快十分钟才反应过来自己把 return 写成了 print。这个坑迟早要踩早踩早踏实。2.4 作用域的三个场景学函数绕不开作用域这个词听着吓人其实就是一句话函数内部定义的变量外面默认看不见外面定义的变量函数内部可以读但想改它就得另外商量。我整理了三个最常出现的场景场景一函数内部创建变量外面访问不到。这是设计好的隔离避免程序太大时变量名互相污染。场景二函数内部读外面的变量比如全局定义一个pass_score 60函数里直接拿来比较没问题。场景三函数内部想改外面的变量直接改写会报UnboundLocalError。我建议新手绕开这个用法需要改的值就通过返回值传出来比如score update_score(score)比在函数里塞global干净得多。作用域不熟没关系你先记住内部变量不外露这条底线剩下遇到底再处理。3. 字典入门数据有了名字就不再靠序号硬找3.1 列表的局限和字典的登场第4天我只用列表存数字比如成绩列表[92, 78, 65, 88]。要拿某个成绩只能靠下标scores[0]是第一个scores[1]是第二个。可现实问题往往是我想找小明的成绩你根本不知道小明是第几个。字典干的就是这件事它用键来存数据而不是用位置。字节跳动一点说字典就像通讯录按人名查号码不是从第一页翻起scores {小明: 92, 小红: 78, 小刚: 65, 小丽: 88} print(scores[小明]) # 92不用管小明排在第几个这里冒号左边是键名字右边是值成绩。一个字典里键是唯一的后面再写同名的键新值会覆盖旧值。这一点和现实通讯录一样同名的人你会备注区分字典里则直接不让你有两条同键记录。3.2 字典的增删改查基础操作我第5天手抄了一遍这些操作建议你也至少敲一遍# 新建空字典 d {} # 增加或修改键不存在就是增加存在就是覆盖 d[语文] 90 d[数学] 85 d[语文] 95 # 覆盖原 90 被替换 # 查询直接用键取值但键不存在会报 KeyError print(d[数学]) # 85 # 推荐用 get()找不到时返回 None 或者你自己给的默认值 print(d.get(英语)) # None不报错 print(d.get(英语, 0)) # 0自己指定的兜底值 # 删除 d.pop(数学) print(d) # {语文: 95}几个细节值得敲黑板字典的键要求是不可变类型整数、字符串、元组可以列表不行。d[不存在的键]会直接抛 KeyError程序就停了。所以我后面写代码统一用了.get()宁可先拿个默认值也不要程序中途倒下。字典在 Python 3.7 之后保证插入顺序但我不依赖这个顺序写逻辑遍历时顺序变不变都不影响正确性。3.3 遍历字典的几种常用姿势遍历字典是今天实战的核心动作。三种姿势对应三种需求scores {小明: 92, 小红: 78, 小刚: 65, 小丽: 88} # 只要键 for name in scores: print(name) # 只要值 for score in scores.values(): print(score) # 键和值都要用 items() for name, score in scores.items(): print(name, score)最常用的是items()一个循环同时拿到名字和成绩后面做统计工具全靠它。注意这里for name, score in ...是拆包等于把每个(键, 值)元组打开成两个变量。我当时第一次写这个循环总是忘写.items()直接for name, score in scores:结果报错需要解包的值的数量不对把scores里一个个键拿去拆包拆不出两个值来。4. 今日实战班级成绩统计小工具4.1 动手前先写伪代码前几天的习惯是拿到需求就开敲今天特意改了流程先在纸上列步骤。我要做的工具需求很简单三个统计功能算班级平均分找出最高分是谁、多少分每个学生按分数评等级伪代码长这样不用在意语法只看思路定义函数计算平均分 把所有分数加起来 除以人数 返回结果 定义函数找出最高分 假设当前最高分是最小值 遍历每个人 如果分数比当前最高分高 更新最高分和名字 返回名字和分数 定义函数评等级 如果分数 85返回优秀 否则如果分数 70返回良好 否则返回加油 准备好成绩字典 调用上面的函数打印结果这段伪代码花了我五分钟但后来写代码几乎没有卡壳。这个习惯我从第5天开始保留了下来后面学越复杂的东西越觉得值得代码是给人看的顺序想不清楚写出来的代码也只是碰运气跑通。4.2 完整代码与逐步讲解下面是今天写出并运行通过的完整代码# 班级成绩统计第5天练习 def compute_average(data): 计算平均分 total 0 for score in data.values(): total score return total / len(data) def find_best(data): 找出最高分的学生返回姓名和成绩 best_name best_score -1 for name, score in data.items(): if score best_score: best_score score best_name name return best_name, best_score def make_level(score): 根据分数返回等级 if score 85: return 优秀 elif score 70: return 良好 else: return 加油 scores {小明: 92, 小红: 78, 小刚: 65, 小丽: 88} avg compute_average(scores) best_name, best_score find_best(scores) print(班级平均分, round(avg, 1)) print(最高分, best_name, best_score) for name, score in scores.items(): print(name, score, make_level(score))挑三个地方展开讲因为这三个地方今天我都出了状况total / len(data)除法算出来的是浮点数比如 323 / 4 80.75我打印时用了round(avg, 1)让它保留一位小数不然屏幕上会出现一长串尾巴。best_score -1这个初始值因为它比任何真实成绩都小所以第一次循环必更新。这里如果用best_score 0也说得过去但万一成绩里允许负数-1 更稳。return best_name, best_score函数可以一次返回多个值用逗号隔开调用时也用逗号分别接住。这比我之前先更新全局变量再在外面拼凑的做法干净太多。4.3 运行结果与扩展玩法代码跑起来屏幕输出班级平均分 80.8 最高分 小明 92 小明 92 优秀 小红 78 良好 小刚 65 加油 小丽 88 优秀看到这五行输出的时候我终于把之前学的东西串起来了字典存数据、for 循环 items() 遍历、函数封装逻辑、if 判断等级、字符串打印输出。第5天这个项目不大但它是我第一个由多个函数拼起来的完整程序。如果你想练得更深我给三个扩展方向都是顺着今天代码往上叠的扩展一支持从键盘逐个输入学生成绩把scores写成input()加循环动态构建。扩展二再加一个统计不及格人数的函数这时候就能体会把逻辑放进函数的好处主流程只加一行调用。扩展三把结果按分数从高到低排序去查一查sorted()和字典的结合用法。5. 第5天高频踩坑实录与排查思路5.1 三条最常见的报错及对策今天一天内我的编辑器里出现了不少红色报错挑三个最常见的整理成表报错信息出现原因处理办法NameError: name xxx is not defined变量名拼错、赋值之前就使用、或函数外的代码访问了函数内变量检查拼写检查变量是否在作用域内IndentationError: unexpected indent缩进不一致比如同一段循环体里混用了空格和 Tab全选代码统一用4个空格编辑器里设置缩进为空格TypeError: dict object is not callable把字典或列表当函数调用了比如scores()这是因为用了小括号而不是中括号/花括号检查是不是该用scores[key]或scores.items()这三个坑背后有个共同规律报错信息里那一行提示通常不是根因而是第一个被波及的地方。比如 NameError 提示第10行出错实际可能是第8行少写了赋值。所以我的习惯是先从报错行往前找往上翻两三行看定义。5.2 用 print 大法逐段定位逻辑错误今天的班级平均分第一次算出来是 80.75我验算了一下总分是对的说明这一段的逻辑没问题。真正让我卡住的是find_best运行结果最高分居然是小红78明显不对。这时候我做了个最笨也最有效的操作把中间值打出来看。我在循环里临时加了print(当前比较, name, score, 当前最高, best_score)屏幕上立刻看到了问题所在——best_score每次循环都被重置成了 0原来我把best_score -1写进了循环体内部导致每次比较前最高分都被清零。这个print 大法不需要任何高级工具本质上是在程序的关键位置放监控探头看变量的中间状态。排查完后把这些临时 print 删掉即可。代码不报错但结果不对的时候别无脑改来改去先在可疑位置打点看数据流在哪一步歪了。5.3 照抄代码的三种错误姿势打卡学习最典型的误区就是照抄。今天看到群里有人把 demo 代码抄了三遍还是不会自己写我顺便复盘了自己的三种错误姿势姿势一视频放着暂停一次抄一行。这等于打字练习手指过了脑子没过。姿势二抄完就运行运行通过就翻篇。过两天这个函数语法早忘了。姿势三抄的时候改变量名却又没改全导致 NameError最后还被误认为是自己不仔细。我现在改成三遍法第一遍看懂了把代码合上尝试默写第二遍对照着改错标注自己哪里卡住第三遍隔半小时后重新默写不看资料。整个过程十分钟记忆效果远超抄五遍。6. 王者归来的自我总结第5天这样打卡才有效6.1 重学 Python 和第一次学的不同王者归来这个标题不是梗是我真实的状态我并不是第一次学 Python第一回学到函数就放弃了断断续续又捡起来几次。这次重学到第5天我能明显感觉到自己和之前的差别第一心态变了。第一次学的时候任何报错都让我觉得我可能不适合写代码现在我知道报错是常态编辑器只是做了把我拦住的事。第二方法变了。以前追求把视频全部看完现在追求每看15分钟就停下来写点东西哪怕是改一行参数看看变化。第三目标变了。以前目标是把课程刷完现在目标变成能做小工具这就导致我在第5天愿意花一小时写成绩统计而不是急着赶进度。我在小本子上写了句话进度是假的手感是真的。与其追第20天的课程不如把第5天的知识点练到能闭眼复现。6.2 第5天的过关自检清单打卡总得有个过关的验收标准。今天睡前我自己出了三个快速验证题不看资料回答能不能在白纸上写出一个带参数、有返回值的函数并说明它和 print 的区别能不能解释为什么修改函数外面的大变量不推荐并说出更稳的替代写法能不能写一个 for 循环遍历字典同时拿到键和值并完成一个累加统计三题都能顺畅过关我才把今天的打卡勾掉。如果哪题卡住第二天早上第一件事就是补那块缺口。这样打卡才不会变成打了卡但什么都没留下的自欺欺人。第5天就这么过去了。要说心里话函数和字典给我的冲击不小但也是从今天开始我才觉得自己写的不是几行玩具代码而是一个可以组合、可以复用的东西。明天准备把今天的小工具再扩展一下试着加上排序和交互输入。如果你正好走到第5天附近先别急着跟人比进度把这三个自检题过了比啥都强。
延伸阅读

更多相关文章

2026/10/21 7:46:59

AI不会杀死SaaS,但正在淘汰旧商业模式:企业软件如何转型?

1. 为什么说 AI 先杀的,不是 SaaS 本身先放结论:这场 AI 浪潮里,SaaS 公司几乎都活得好好的——今天你打开后台用的协同工具、设计软件、报表系统,底层依然是订阅付费,用户量没崩,收入也没崩。真正开始疼的…

2026/10/21 7:46:59

STM32 IAP固件升级防变砖:环形队列与自愈链路设计

做嵌入式开发的人,十有八九都要碰一次IAP升级。我上次处理的一批工控板卡,客户想更新算法参数,用串口ISP刷到一半,因为现场线缆接触不良加上上位机发包太急,几十台里有十几台烧死在半路,返厂拆壳用仿真器救…

2026/10/21 8:52:36

Coze+剪映自动化视频生产实战:从脚本到成片全流程指南

AI 视频自动化这两年是真火,但多数人要么停在“看教程”阶段,要么只拿 AI 写个文案,剩下剪辑还得自己一帧一帧磨。我前前后后折腾了两个月,把 Coze 搭工作流、剪映做后期这套组合彻底跑通了一遍。这篇文章不聊虚的,直接…

2026/10/21 8:52:36

Proteus元件库中英对照速查:51单片机仿真避坑指南

简介:这份文档面向使用51单片机进行电路仿真的初学者与电子爱好者,系统整理了Proteus元件库中常用元件的英文名称与中文对照,帮助解决仿真选型时“看不懂元件名、找不到对应器件”的常见困扰。资源为单个doc文件,压缩包约50KB&…

2026/10/21 8:52:36

双优先队列优化排队模拟:不开心的小朋友解题全解析

第一次看到《不开心的小朋友》这个题目时,我以为是道脑筋急转弯,想考什么心理学的“情绪管理”。点进去一看,好家伙,是一道 200 分的模拟大题,名字还挺有迷惑性。真正做起来才发现,题目本身不复杂&#xff…

2026/10/21 8:52:36

Proteus 51单片机仿真元件检索中英对照与避坑指南

简介:这份文档面向使用51单片机进行仿真学习的初学者与电子爱好者,系统整理了Proteus元件库中常用元件的英文名称与中文对照,帮助解决仿真选型时“看不懂元件名、找不到对应器件”的常见困扰。资源包内含1个doc文件,约50KB&#x…

2026/10/21 8:52:36

从OCR到结构化题库:智能试卷解析系统的设计与实现

最近一个多月,我一直在折腾一个叫“智能试卷解析系统”的小项目。起因很简单:一位做教研的朋友,每个月都要手工整理几十份试卷,把题目、选项、答案、解析一条条敲进题库,眼睛都快看花了。我陪他折腾了两周,…

2026/10/21 8:47:32

2021计算机二级C语言真题PDF解析:考点分类与错题本制作指南

简介:2021年计算机二级C语言考试(试题及答案详解)PDF是一份面向备考全国计算机等级考试二级C语言的考生复习资料,聚焦考试中出现的数据结构、软件工程基础与C语言语法等核心考点。包内共1个PDF文件,大小3.4MB&#xff…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑