资讯动态

Python入门第五天:吃透数据类型与容器,迈过编程分水岭

发布时间:2026/10/6 14:32:38 来源:尧图企业网站定制
今天这篇是 Python 从入门到精通系列的第五天。按照正常的学习曲线前四天你大概已经完成了环境搭建、变量与条件判断、循环、函数的初次接触。走到这一天很多人会陷入一个特别常见的状态教材里的例子都能看懂代码也能照着敲出来但一旦让你自己动手写一段处理数据的代码脑子里就一片空白。如果你正卡在这个位置上今天的内容就是为你准备的。day05 的核心任务不是继续堆新语法而是把“数据类型”这件事彻底吃透把列表、元组、字典、集合这几块基础数据结构练熟最后用一道经典题目把前面几天学的东西串起来。说白了这一天是从“能看懂”迈向“会写代码”的分水岭。1. day05 的关键节点从“能看懂”到“会写代码”的分水岭1.1 前四天你应该掌握的基础盘点在开始今天的内容之前先花两分钟自我检查一下。day05 不适合零基础直接看它默认你已经具备以下能力会在自己的电脑上跑通 Python理解解释执行的大致过程熟悉变量的赋值和最基本的数据类型整数、浮点数、字符串、布尔值能写 if / elif / else 条件判断能写 while 和 for 循环能定义函数理解参数和返回值的基本概念。如果你能轻松完成下面这两个小练习说明前四天的基础是扎实的写一段代码把两个变量的值交换要求不使用第三个变量写一个函数输入一个正整数 n输出 1 到 n 之间所有质数。这两个题目不复杂但很能检验你是否真的理解了变量和循环。如果这两道题做起来还有些吃力建议先回头把前四天复习一遍再继续往下看。今天的课程建立在“你会写基础代码”的前提上跳步学习在一个需要动手的领域里是最浪费时间的做法。基础不牢后面每一课都会变成补窟窿。1.2 “看懂了但写不出来”的根源是什么很多初学者都有过这样的困惑书上的代码每一行都懂自己写就废。这个现象太普遍了几乎每个学编程的人都经历过所以别觉得自己笨。问题不在于智商而在于你搞错了学习的重点。“看懂”一个语法本质上是在做模式识别——你看到for i in range(10)知道这是循环看到if知道是判断。但“写代码”需要的是另一种能力把现实问题翻译成“数据结构 操作步骤”的能力。换句话说你需要先想清楚“数据用什么形式存”再想清楚“怎么一步步处理这些数据”。day05 要解决的正是这个问题。Python 之所以适合入门和 Java、C 这类语言相比它的动态类型和简洁语法让你少写很多样板代码这在入门阶段非常友好。但也是因为动态类型导致很多人对类型不上心糊里糊涂地用了几百行代码遇到报错才意识到问题。所以今天我们会花大量时间在“数据怎么存、怎么取、怎么转”上这套基本功搞定了后面学文件读写、爬虫、数据分析都会顺畅得多。注意“看懂”和“会写”之间差着一个量的练习。今天的内容一定要亲手敲代码光看不敲等于没学。2. Python 变量与数据类型重新认识你每天都在用的东西2.1 动态类型的本质变量不是盒子是标签很多教程把变量比喻成盒子这个类比在初学阶段好用但到了第五天它已经不够准确了。更贴近 Python 实际运行机制的说法是变量是一张写着名字的便利贴。当你写下a 10Python 做的事情是在内存中创建一个整数对象10然后把写着“a”的便利贴贴到这个对象上。下一行你写a helloPython 并不会把盒子里的数字 10 变成字符串而是把“a”这张便利贴撕下来重新贴到字符串对象hello上。原来的整数对象如果没有任何标签引用它就会被垃圾回收机制清理掉。理解这个机制为什么重要因为它直接解释了 Python 的动态类型。很多从 C 语言转过来的朋友第一次看a 1; a text觉得不可思议觉得一个变量怎么还能变类型。用便利贴模型一看就明白了不是变量的类型变了是它引用的对象变了。同样的道理当你把两个变量关联在一起时b a并不是复制了对象而是把 b 这张便利贴贴到 a 所指的那个对象上。如果 a 后来改指向别的对象b 仍然指向原来的东西。这个特性在 Python 里叫“引用语义”。搞懂这一点很多看似诡异的行为都有了解释。2.2 类型转换int、str、float、list 互转的实际场景类型转换是 day05 最容易踩坑的地方也是实际工作中用到最多的操作之一。最常见的场景就是input()函数——它返回的一定是字符串。如果你写age input(请输入年龄)然后拿去和数字比较比如if age 18:等来的必然是 TypeError: not supported between instances of str and int。正确的做法是显式转换age int(input(请输入年龄))。这里的 int() 函数会把字符串转换成整数但有个前提字符串本身必须长得像整数。int(18)没问题int(18.5)会报错int(abc)也会报错。为什么因为 int() 期望的是一个整数字面量。想把 “18.5” 转成整数得分两步先float(18.5)得到 18.5再int(18.5)得到 18。反向的场景也很多。比如你做了一个计算器算出一个结果 42想打印出“答案是42”直接写print(答案是 42)会报错因为字符串和整数不能直接拼接。你需要先str(42)转成字符串。列表和字符串之间的互转也很实用。list(abc)得到[a, b, c]而把字符列表拼回字符串则要用.join([a, b, c])得到abc。这里还有一个经典坑.join()里面的元素必须都是字符串如果列表里有数字就得先循环转成字符串或者用列表推导式一步到位。2.3 变量类型练习题五道题带你自查光说不练假把式。这里准备了五道小题每道题都不超过三级难度但都能精准地暴露你的薄弱点。建议先在纸上写出结果再上机验证。第一题print(10 / 3, 10 // 3, 10 % 3)输出什么答案是3.3333333333333335 3 1。这里考察的是除法、整除、取余的区别其中 10 / 3 的结果是浮点数即使是 10 / 2 结果也是 5.0这是初学者很容易忽略的。第二题x 1.5; y 2; print(type(x y))输出什么答案是class float。整数和浮点数计算时整数会自动升级为浮点数这是 Python 的隐式类型转换规则。第三题print(int(3.14))会不会报错会报 ValueError。这个前面讲过了int() 不接受浮点字面量的字符串。正确的做法是int(float(3.14))结果是 3。第四题s hello; print(s[-1], s[::-1])输出什么s[-1] 是最后一个字符 os[::-1] 是整个字符串反转 olleh。这题在考察负索引和切片后面马上会详细讲。第五题d {name: 张三, age: 18}; print(d[name], d.get(score, 0))输出什么答案是张三 0。字典的 get() 方法在键不存在时返回默认值而直接下标会抛 KeyError。做完这五题你应该能明确自己哪里熟练、哪里还含糊。别急着往下走把做错的题涉及的知识点弄清楚再继续。3. 序列操作与切片让数据处理不再绕路3.1 列表、元组、字符串的统一操作规律Python 里的列表、元组、字符串虽然长得不一样但都属于“序列类型”也就是说它们共享一套操作规则。搞清楚这套统一规则是这一个阶段性价比最高的学习投资。几乎所有序列都支持这些操作通过下标访问元素s[0]取第一个通过负下标从末尾访问s[-1]取最后一个用len(s)取长度用for 元素 in s遍历用元素 in s判断是否存在还能用 拼接、用 * 重复。这里的核心概念是“下标”。Python 的下标从 0 开始这有历史原因C 语言就是这么设计的Python 沿用了。负下标是个很聪明的设计-1永远表示最后一个元素-2表示倒数第二个不用先算出长度再减一非常省事。这里要说一个列表和元组的关键区别列表可变元组不可变。你可以list[0] 99但如果你对元组做同样的操作会直接抛 TypeError。元组的不可变性让它可以被哈希能被当作字典的键也能在多线程环境下被安全地共享。很多初学者不理解为什么要有元组这个类型等你后面写代码时发现某个数据不希望被别人意外修改就知道元组的价值了。3.2 切片命令详解start:stop:step切片是 Python 处理序列最优雅的语法没有之一。它的基本形式是s[start:stop:step]表示从 start 开始到 stop 之前为止每隔 step 取一个。这三个参数都有默认值也都可以省略。先记住一个最重要的规则切片永远不包含 stop 位置的那个元素。s[0:3]取前三个元素因为索引 0、1、2 在范围内索引 3 不在。这看起来有点反直觉但 Python 统一这么设计带来的好处是长度可以直接用 stop - start 算出来。切片最常见的几个变形务必记牢。s[:]得到整个序列的副本这是复制列表最安全的方式s[::-1]将序列反转步长为 -1 表示从右往左走s[1::2]从第二个元素开始每隔一个取一个s[-3:]取出最后三个元素。下面这张表把高频写法整理出来了表达式结果示例s [0,1,2,3,4,5]说明s[0:3][0, 1, 2]前三个元素s[-1]5最后一个元素s[-3:][3, 4, 5]最后三个元素s[::2][0, 2, 4]隔一个取一个s[::-1][5, 4, 3, 2, 1, 0]反转s[1:5:2][1, 3]从索引1到4步长2切片不修改原序列它返回的是一个新序列。但注意如果切片对象是列表得到的新列表里的元素还是原来那些对象的引用。这个细节在嵌套列表时会让你踩坑比如先浅拷贝再改内部列表原列表也会跟着变。真正独立完整的复制需要用 copy.deepcopy不过那是后面章节的内容今天只需要有这个意识。3.3 列表推导式用一行代码替代三层循环的写法列表推导式是 Python 的标志性语法也是新手迈向“写得更像老手”的第一个台阶。基本语法是[表达式 for 变量 in 序列 if 条件]。举例来说想得到 1 到 20 之间所有偶数的平方普通写法是result [] for i in range(1, 21): if i % 2 0: result.append(i ** 2)用列表推导式就是一行result [i ** 2 for i in range(1, 21) if i % 2 0]这两种写法功能完全相同但推导式更紧凑、更直观而且运行速度在 Python 内部有优化数据量大时会快一些。我的建议是初学阶段当然可以先用普通的 for 循环因为那更容易理解但从 day05 开始遇到简单的“遍历条件收集”场景强迫自己用推导式写一遍。这个过程会很快建立你对 Python 风格的直觉也就是常说的 Pythonic。列表推导式的执行顺序是先执行 for 循环再执行 if 筛选最后执行表达式。所以阅读时应该从 for 开始读从右往左理解。这个顺序搞清楚了复杂的推导式也能轻松读懂。4. 字典与集合结构化数据的基石4.1 字典自带索引的“查表”数据结构如果说列表是按位置找数据字典就是按键找数据。写代码时我们常常需要“按名字存取”比如存一个学生的姓名、年龄、成绩。这种场景用列表非常别扭你得记住每个字段在列表里的位置顺序一乱就全乱了。字典完美解决了这个问题。创建一个字典的写法是student {name: 张三, age: 18, score: 90}。访问时用student[name]拿到“张三”。往里面加字段更简单student[class] 三班没有就新增有就覆盖。真正实用的几个字典方法值得花时间记住。get(key, default)在键不存在时返回默认值而不是抛异常这是处理配置数据时最常用的keys()、values()、items()分别拿到键、值、键值对的可迭代对象其中 items() 在遍历时最常用可以这样写for name, score in student.items(): print(name, score)这里有个容易踩的坑直接for key in dict遍历的是键不是值。如果你写for name in student得到的 name 是“name”、“age”、“score”这些键而不是“张三”这些值。很多初学者在这个地方困惑半天其实记住“字典默认遍历键”这个规则就能解决。字典底层用的是哈希表这意味着查询一个键的速度几乎不随字典大小变化这是列表线性查找做不到的。处理几万个键值对时速度提升非常明显。这也是为什么大配置文件、数据表都用字典或类似结构存储。4.2 结构化数据从嵌套字典到 pandas 的过渡day05 这个阶段接触的字典还比较简单但你已经可以开始理解“结构化数据”这个概念了。孙俪在《甄嬛传》里怎么说的来着单一个字典太单薄现实中的数据经常是“列表套字典、字典套列表”的嵌套结构。比如一个班级有多个学生完整的数据结构就是这样students [ {name: 张三, age: 18, score: 90}, {name: 李四, age: 19, score: 87}, {name: 王五, age: 18, score: 95}, ]这就是典型的结构化数据外层是列表代表“多个记录”每个列表元素是字典代表“一条记录”字典里的键是字段名值是字段值。这种结构在 Excel 表格、JSON 文件、数据库查询结果里到处都是。理解了这一点你就等于迈进了数据处理的大门。很多同学问搜到的资料里总是出现 pandas 的 DataFrame那是什么简单说DataFrame 就是一个加强版的“列表套字典”结构——把它做成表格每一行是一条记录每一列是一个字段。pandas 提供了大量方便的操作方法比如筛选出成绩大于 90 分的学生一行代码就够了。但你千万别急着直接去学 pandas那样只会被一堆 API 砸晕。先把字典和列表弄熟练DataFrame 无非是换了个更高效的容器而已。基础数据结构不熟用起 pandas 来也是百试百坑。4.3 集合去重和判断的幕后英雄集合 set 的关键特性有三个元素不重复、无序、查询速度快。日常写代码时它的用处比你想象的更广泛。最常用的一个场景是去重。有一个列表是ids [1, 2, 2, 3, 4, 4, 4, 5]你想知道里面一共有几个不同的 id一句len(set(ids))得到 5。如果某个数据分析的需求是“统计今天访问的用户人数”把用户名逐个 add 进一个 set最后 len 一下逻辑清晰又不费事。另一个高频场景是成员判断。判断一个元素是否在集合里用x in set时间复杂度是 O(1)而列表的 in 是 O(n)。如果代码在一个大列表上反复做 in 判断把它转成集合再判断速度会提升几个数量级。这个优化在很多性能问题里都能看到它的身影。集合还天然支持数学运算交集、并集、差集对应运算符 | -。比如你知道 A 网站和 B 网站的用户名单想找两个网站都登录过的用户直接set_a set_b就是答案。这几个操作在实际的数据清洗任务里非常常用。到这里Python 的四种核心数据容器已经全部出场了。怎么选我整理了一张决策表贴到代码注释里都适用容器类型特点适用场景一句话例子列表 list有序、可变、元素可重复动态数据、按位置访问待办事项清单元组 tuple有序、不可变固定结构、安全共享坐标(x, y)字典 dict键值映射、按键查询结构化记录、快速查找学生档案集合 set无序、不重复去重、成员判断、集合运算用户 ID 名单5. 综合实操用“李白打酒”把今天的知识点串起来5.1 题目分析与数学建模讲完了基础来做一个综合练习。这道题在学习圈里有名气叫“李白打酒”。题目背景是唐代诗人李白逛街打酒说的是李白街上走提壶去买酒。遇店加一倍见花喝一斗。三遇店和花喝光壶中酒。试问壶中原有多少酒翻译成程序逻辑就是初始壶中有某个数量的酒李白遇到一个店酒量变成原来的两倍加一倍遇到一朵花喝掉 1 斗。整个过程是“遇店、见花、遇店、见花、遇店、见花”一共三次最后一次见花后壶中酒正好为 0。问初始有多少酒。这是典型的“建模 求解”问题。先做数学建模设初始酒量为 x 斗。第一次遇店后酒量为 2x第一次见花后变成 2x - 1第二次遇店后为 2(2x - 1)见花后为 2(2x - 1) - 1第三次遇店后为 4(2x - 1) - 2见花后为 4(2x - 1) - 3等于 0。展开就是 8x - 7 0解得 x 0.875。这道题为什么值得在 day05 做因为它把变量、循环、函数、类型转换、浮点数、列表推导式这些知识点全用上了而且题目本身趣味性强容易让人记住。Coincidence不是有意为之。最好的练习就是这种“读起来不像作业”的题目。5.2 三种 Python 解法代码逐步解析第一种解法正向枚举。既然初始酒量在 0 到 1 之间想想也知道如果初始超过 1 斗最后要么喝不完要么负数我们就从 0 开始按 0.001 的步长往上试找到哪个初始值经过三次操作后剩余量为 0。这种办法虽然笨但思路最直观很适合作为第一版代码。def balance(initial_wine: float) - float: 模拟整个过程返回最终的剩余酒量 wine initial_wine for _ in range(3): wine * 2 # 遇店酒量翻倍 wine - 1 # 见花喝掉一斗 return wine x 0.0 step 0.001 while abs(balance(x)) 1e-6: x step print(f正向枚举壶中原有约 {x:.3f} 斗酒)注意这里用abs(balance(x)) 1e-6判断是否近似为 0原因很简单浮点数运算会有精度误差直接判断balance(x) 0很可能永远不成立。跑出来的结果是 0.875 附近因为 0.001 的步长恰好能踩到 0.875。第二种解法逆向推导。既然最后剩余 0 斗并且操作是固定的“翻倍、减一”我们完全可以从结果反推。最后一次见花前壶中应该有 1 斗因为喝掉 1 斗变 0最后一次遇店前应该有 0.5 斗因为翻倍变成 1。按照“店、花、店、花、店、花”的顺序倒推就是先 1 再除以 2循环三次。def reverse_solve(times: int 3) - float: wine 0 for _ in range(times): wine 1 # 逆推“见花喝一斗” wine / 2 # 逆推“遇店加一倍” return wine answer reverse_solve() print(f逆向推导壶中原有 {answer} 斗酒)这段代码干净利落而且有个非常漂亮的特性参数 times 可以任意调整。比如改成“四遇店和花”它也能秒算出来。这比方程硬解更通用也更像“算法”该做的事。第三种解法列方程求解。这个方法不用循环直接解出数学答案# 设初始酒量为 x推导出方程8x - 7 0 x 7 / 8 print(f列方程求解壶中原有 {x} 斗酒)三种方式得出的结果完全一致都是 0.875 斗。我不只希望你看到最终答案更希望你看懂这三种解法的思路差异枚举是计算机的笨办法逆向推导体现的是反向思维方程则是纯数学手段。实际工程中遇到问题先从数学角度分析再从算法角度模拟最后用代码落地这个流程几乎适用于所有题目。5.3 扩展与可视化把结果画出来会更有感觉解完题别急着结束。我们可以顺手做两件事把今天学的列表和绘图技能也练了。第一把上面的逆向解法改造成一个通用函数支持传入任意次数的遇店见花过程输出对应的初始酒量。这里面甚至还能再验证一个规律初始量是 1 减 2 的负 n 次方。第二把正向枚举过程可视化。我们用列表把所有枚举过的 x 和对应的余额保存下来用 matplotlib 画出来。这会碰上一个几乎所有新手都会遇到的问题横坐标刻度太密集x 有 2000 多个采样点默认刻度全部画出来会糊成一团。解决办法是控制刻度数量或者旋转文字。import matplotlib.pyplot as plt x_values [] y_values [] x 0.0 step 0.001 while x 2.0: x_values.append(x) y_values.append(balance(x)) x step plt.plot(x_values, y_values) plt.axhline(0, colorgray, linestyle--) # 在 y0 处画参考线 plt.gca().locator_params(nbins10) # 控制刻度数量解决密集问题 plt.xticks(rotation45) # 旋转刻度防止文字重叠 plt.title(李白打酒初始酒量与最终剩余量的关系) plt.xlabel(初始酒量 x) plt.ylabel(第三次见花后剩余酒量) plt.savefig(li_bai_wine.png, dpi150, bbox_inchestight) plt.show()这里有一个保存图片的顺序要点plt.savefig()最好写在plt.show()之前因为有些后端在 show() 之后会重置画布保存下来的可能是一张空图。另外bbox_inchestight能确保保存时把标题和坐标轴标签都完整收进图片里不会出现文字被裁掉的情况。6. 环境与依赖管理速查学到第 5 天你该会装库了6.1 pip 安装第三方库的正确姿势走到 day05你大概率已经遇到需要第三方库的场景了。matplotlib 做绘图、numpy 做数值计算、scikit-learn 做机器学习、opencv-python 做图像处理这些都是后续课程里会频繁用到的东西。想用它们就得学会用 pip 安装依赖包。最基础的命令就一个pip install 包名。比如pip install numpy或者pip install matplotlib。如果你想一次装多个包用空格隔开就行。这里有几个高频包名容易混淆特别提醒一下你要用的库pip 安装命令说明科学计算pip install numpy最基础的数值计算库数据分析pip install pandas表格数据处理绘图pip install matplotlib最常用的画图库机器学习pip install scikit-learn注意是 scikit-learn不是 sklearn图像处理pip install opencv-python想用 cv2 就要装这个包如果你在安装时发现特别慢甚至卡住不动那一般是网络问题。解决办法是使用国内镜像源比如清华源和阿里源。一条命令就能指定镜像pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple装完之后可以用 pip 的配置文件长期设置默认镜像源就不用每次打一大串了。不过我对新手的建议是先别急着玩配置把基础命令用熟后面自然会想优化。6.2 Python 版本选择与环境配置要点很多人在学 Python 的第一个月最大的坑不是语法而是 Python 版本和环境的混乱。关于版本选择我的建议很实际如果你是自己学习新项目用 Python 3.10 或 3.12 都行如果你要跑老项目那就看项目依赖库支持什么版本老库跟不上新解释器是常见事。为什么还有那么多人用 Python 3.8因为很多公司老项目就是基于 3.8 搭建的依赖的二进制库只发布到 3.8 的版本升级解释器会导致一堆库装不上。这种人不是不懂新版本有多好而是被兼容性绑住了。你自己学习时不需要体验这种痛苦但要知道存在这个现象。配置环境变量时Windows 用户常见的坑是装完 Python 之后在 cmd 里输入 python 提示“不是内部或外部命令”。这种情况十有八九是安装时没勾选“Add Python to PATH”。解决办法很简单重新运行安装程序选择 Modify勾上这个选项。macOS 和 Linux 一般自带了 Python3直接用python3命令就行。多个 Python 版本共存的时候用python -m pip而不是直接pip这个细节非常有用。它能保证你安装的包属于当前正在使用的那个 Python而不是装到别的解释器里去。6.3 安装失败的几个典型排查技巧pip 安装失败是每个 Python 使用者都绕不去的坎。常见的报错和原因我整理在下面你可以直接对照排查。报错/现象常见原因排查方向ERROR: No matching distribution found包名写错或当前 Python 版本太高/太低检查包名检查 Python 版本支持范围externally-managed-environment系统 Python 受保护不允许随意装包用 venv 创建虚拟环境再装Microsoft Visual C 14.0 is required某些库需要编译 C 依赖安装对应 Visual C Build Tools安装很慢或超时网络原因使用镜像源重试安装成功但 import 报错装到了错误的解释器环境用 python -m pip 重装确认解释器路径另外一个真实教训OpenCVcv2在部分新版 Python 上只能通过 opencv-python 包名安装装完导入模块是import cv2很多新手在这两个名字上绕了好久以为装错了。如果装的是 rapidocr、paddleocr 这类 OCR 包你可能还会遇到“单张图片就把 CPU 拉满”的问题。这不是安装出错了而是这类模型本质上就是在吃算力做推理。排查思路是先看图片分辨率是不是太高OCR 前把大图缩一缩再看是单张处理还是批量处理批量任务最好避开人正在用电脑的时候跑。对于 day05 阶段的人知道“装完库之后它运行时会吃资源”这个观念就够了具体的性能优化等到后面图像处理章节再系统聊。7. 常见问题排查与避坑实录7.1 画图横坐标太密集的三类解决办法在刚才李白打酒的可视化里已经碰到过横坐标太密集的情况。这是 matplotlib 新手最常问的问题之一网上一搜一大堆。根本原因很简单数据点太多了每个点都被画成刻度自然挤成一团。解决办法从易到难有三招。第一招旋转刻度文字plt.xticks(rotation45)把文字从横排改成斜的能显著缓解重叠。第二招控制刻度数量plt.gca().locator_params(nbins10)告诉 matplotlib “我只想要大约 10 个刻度”它就会自动挑选间隔。第三招手动指定刻度位置plt.xticks([0, 0.5, 1, 1.5, 2, 2.5])完全由你掌控。实际画图时先用第二招不行再上第三招一般都能解决。这里还有一个小教训保存图片时如果发现坐标轴文字不完整多半是没设置bbox_inchestight。加上之后matplotlib 会自动调整画布范围把标签都包含进去。这个参数我几乎每次保存图片都会写属于低成本的保险措施。7.2 三个真实场景中的类型错误排查type 相关的报错是 day05 这个阶段最让人头疼的。我挑三个出现频率最高的就当帮你提前踩坑了。第一个是TypeError: unsupported operand type(s) for : int and str。这个最常见出现在试图把数字和字符串直接相加时。排查思路很明确找到出错的代码行检查 两边的变量类型。一般是因为input()返回的是字符串你忘了转成 int。修复方式是age int(input(...))或者输出时用 f-string 而不是拼字符串。第二个是ValueError: invalid literal for int() with base 10。前面讲过int() 要求的字符串必须长得像整数。排查时先打印一下你要转换的字符串看看里面是不是混了空格、小数点或字母比如int( 18 )其实是可以的但int(18.5)、int(18a)都会报错。第三个是字典查不到键时的 KeyError。新手经常写d[key]直接取值键一旦不存在就崩。更稳的写法是d.get(key, 默认值)这个前面讲字典时已经提过但它值得再强调一次因为等你做配置文件解析时会天天用到它。排查这些报错我建议你借用 Python 自带的交互式环境做实验把出问题的代码一行一行敲进去每敲一行就打印一次 type() 和变量的值。这个习惯能帮你快速定位是哪个环节出了问题。7.3 这个阶段别急着碰给 day05 之后的你三个忠告学完今天的知识你可能会觉得自己已经行了想赶紧上手做一些“真正厉害”的项目。我理解这种冲动但在 day05 的时间节点有几件事我建议你忍一忍先把基础打稳。第一别急着写爬虫。爬虫看起来酷但你需要学的远不止 requests 库。网页结构、正则表达式、JSON 解析每一个都是独立的知识点。而且爬虫涉及数据获取的合规性问题一定要在遵守目标网站服务条款的前提下进行不该动的东西别动。第二别急着上量化交易。你搜“量化交易策略代码”可能会看到一堆让你心动的代码但那些代码几乎都建立在 numpy 和 pandas 的数据操作能力之上。你现在的列表和字典还没练熟直接上 pandas 只会被一堆 API 砸晕。基础数据结构熟练之后pandas 不过是换个容器而已。第三别去研究那些打擦边球的东西。网上流传的所谓“攻击脚本”“外挂辅助”之类的代码看着像捷径实则把你这几天的学习成果用在了危险的方向上。程序员的第一课永远是能力越大责任越大把技术用在学习、工作和创造价值上路才走得长远。想练网络安全先从自己搭的测试环境开始绝不要对公共系统动手。写在最后的一点体会day05 这一天真正的收获不在于你又背下了多少新语法而在于你开始有了“数据意识”——拿到一个需求先想清楚用什么数据结构去承载。列表、元组、字典、集合这四兄弟以后会陪着你走很远。在这个阶段我建议你养成一个习惯每学完一个知识点就用今天那种“李白打酒”的方式把它编进一道小题目里练一遍。给自己出题、自己写、自己调试这个过程比看十遍教程都有用。也不用贪多每天能认真做通一道综合题坚持一个月你的手感绝对和现在不同。保存好你写的每一个版本的代码一个月后回头看看你会被自己的进步吓一跳。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑