资讯动态

Python学习第五天:从函数到列表,用组合应用写出第一个实用程序

发布时间:2026/9/30 13:00:36 来源:尧图企业网站定制
学Python的第五天我终于觉得自己在编程了事情是这样的前四天我按部就班跟着教程走变量会了、if会了、for循环也会了每节课后的练习题都能做对。但到了第五天早上我盯着屏幕忽然有点慌——语法都认识可让我自己从零写个有点用的东西居然无从下手。我猜很多自学Python的人都有过这种虚假的掌握感看懂代码和写出代码完全是两码事。第五天是个很微妙的节点。第一天的安装和配置早就忘了疼第二天的print和变量也觉得没什么第三天的条件判断勉强能用第四天的循环开始有点绕。到了第五天教练式的教程开始变少需要自己组合知识点的练习开始变多。也就是从这天起我才慢慢摸到门道学习Python不是背书是搭积木——把学过的小零件拼成能解决实际问题的东西。这篇内容不打算讲什么高深理论就是如实记录第五天我是怎么学的、学了什么、踩了哪些坑以及一个从零到一跑通的小工具。如果你也刚好处在Python学了一周左右、会语法但不会写程序的阶段这篇应该对你有用。我按自己的节奏走每天大概投入一个半小时到两小时所有代码都能直接复制运行。1. 前四天打下的底子第五天该站在什么地方第五天不是凭空开始的。先把前四天做了什么理清楚你才能判断自己是不是也有继续往前的资格。1.1 第一天环境搭建差点劝退第一天的任务很简单装Python、配编辑器。我在官网下了最新版安装包安装时记得勾选“Add Python to PATH”那个选项Windows用户不勾的话后面命令行敲python会提示找不到命令。编辑器用的是VS Code装好之后加了个Python扩展插件按F5能直接跑脚本。这里有个很常见的坑Python装好了但VS Code里跑代码时提示“Python was not found run without arguments to install from the Microsoft Store”。这多半是VS Code没有正确识别Python解释器路径按CtrlShiftP输入 “Python: Select Interpreter”把解释器选到你自己安装的那个版本问题就解决了。第一天我在这上面耗了差不多一个小时。1.2 第二天变量和数据类型第二天接触的东西很基础但很重要变量怎么命名、int/float/str/bool这几种类型怎么区分、字符串怎么拼接。老实说第二天的内容在最难熬的因为太简单了简单到你会怀疑自己学的到底是不是一门编程语言。但数据类型这个观念要建立起来否则后面会吃大亏。字符串拼接是第一个容易出现报错的地方。name 张三然后print(你好 name)没问题但你要是print(年龄 18)Python直接甩给你一个TypeError。字符串只能和字符串拼接数字得先转成字符串。这个坑我在第五天还又踩了一次后面细说。1.3 第三天条件判断if、elif、else配合比较运算符和逻辑运算符and、or、not。第三天的练习题开始有点意思了写一个成绩等级判断90分以上优秀80分以上良好60分以上及格以下不及格。这种题目好就好在它逼着你把现实问题翻译成代码逻辑而这正是编程的核心能力。1.4 第四天循环for循环和while循环加上range()、break和continue。循环配合range是我刷得最多的因为后面几乎所有练手题都要用到。这一天的经典题目是打印1到100之间的偶数、计算1加到100的总和。这些题做多了会腻但手指的肌肉记忆确实在慢慢形成。# 第四天最常写的代码之一1到100求和 total 0 for i in range(1, 101): total i print(total) # 5050到自己动手写这个循环、能解释清楚每一行在干什么前四天的地基就算打完了。第五天的核心任务是在这个地基上第一次盖起组合应用的小楼。2. 第五天重头戏函数——把代码变成能复用的积木前四天写的代码都是一条道走到黑的脚本从上往下执行结束就完事。到了第五天我开始接触一个改变代码组织方式的概念——函数。2.1 为什么第五天必须学函数这样说吧不学函数之前你写代码像在一张纸上从头到尾列清单学了函数之后你是在搭积木每块积木能独立完成一件事拼在一起能完成复杂任务。函数解决的不只是重复代码的问题更是一种思维升级把我要做什么拆成我需要哪几个功能块。你说第五天学函数早不早不早。因为在组合应用练习里如果不提前用函数把逻辑包起来代码会变成一团乱麻自己都看不下去。2.2 def的基础写法def add(a, b): result a b return result print(add(3, 5)) # 8def关键字后面跟函数名和参数列表函数体缩进用return返回结果。如果你不写return函数会默认返回None。最让我恍然大悟的是之前写的代码是死的写死算3和5就不算别的了。有了函数一段逻辑能喂不同的参数进去得到不同的结果——代码这才算真正活了。2.3 参数与返回值的坑初学函数时最迷惑我的两个问题一个是我传进去的参数在函数里改了外面会不会跟着变另一个是return之后还能不能继续写代码第一个问题的答案是如果是数字、字符串这种不可变类型函数内修改不影响外面的变量但如果你传的是一个list列表在函数里用list.append()这种操作外面的列表也会被改。这个属于进阶内容第五天只要知道会变和不会变两种情况的区别就行。第二个问题比较直白return执行后函数立即结束return后面的代码永远不会执行。有些人在return后继续写代码然后问我怎么不输出我只能说程序不会读心术它以你的代码为准。2.4 一个函数式的小练习把四则运算做成工具def calculate(x, y, op): if op : return x y elif op -: return x - y elif op *: return x * y elif op /: if y 0: return 除数不能为0 else: return x / y else: return 不支持的运算符 print(calculate(10, 5, )) # 15 print(calculate(10, 5, /)) # 2.0 print(calculate(10, 0, /)) # 除数不能为0这段代码我把条件判断嵌套进函数里等于把前四天学的if和现在的def连起来了。跑通的那一刻有种很微妙的感觉我发现自己在用已经学会的东西去组织新东西了。这和学习函数的语法同等重要因为编程最难的不是语法是组合。3. 列表的切片、类型转换、常用内置函数——新手最容易忽略的三连击第五天我同时接触了三个看似独立、实际关联紧密的知识点列表切片、类型转换、常见内置函数。把它们放一起学不是因为教程这么排而是因为它们在实际代码里永远是组合出现的。3.1 列表切片Python最优雅的语法之一Python里所谓数组其实多数情况是指list列表。切片操作list[start:stop:step]可以一次性取出列表的一部分左闭右开包含start位置不包含stop位置非常直观。nums [10, 20, 30, 40, 50, 60] print(nums[1:3]) # [20, 30] 索引1包含索引3不包含 print(nums[:4]) # [10, 20, 30, 40]从头到索引3 print(nums[2:]) # [30, 40, 50, 60]从索引2到末尾 print(nums[-2:]) # [50, 60]倒数两个 print(nums[::2]) # [10, 30, 50]步长为2 print(nums[::-1]) # [60, 50, 40, 30, 20, 10]反转经典操作负索引是最容易绕晕的-1表示最后一个元素-2表示倒数第二个。[::-1]是不带参数的完整切片前两个位置默认走全列表后面的-1是步长为负从右往左取一步到位反转列表。切片操作同样适用于字符串我第五天用text[::-1]做字符串反转一行代码就完成了之前以为要写一大段循环才能做的事。这种原来还能这样的瞬间特别能积累学习快感。3.2 类型转换程序世界的翻译官int()、float()、str()这三个函数是我用得最频繁的转换工具。它们的经典应用场景是处理input()的返回值——input一律返回字符串如果你要拿它做数学运算必须先转成数字。age input(请输入你的年龄) age int(age) # 不转的话下面会报错 if age 18: print(成年人) else: print(未成年)这里还有一个很常见的坑输入18.5这种小数用int()会报错要用float()先转成浮点数再处理。以及int(18.5)报错但float(18.5)是18.5因为int()只能把整数形式的字符串转成整数。3.3 内置函数别急着造轮子abs()绝对值、max()取最大值、min()取最小值、sum()求总和、len()求长度这些内置函数在第五天的练手题里帮了大忙。特别是sum()和len()组合可以用来算平均值。对了我当时一直纠结abs()有什么用后来做成绩统计时发现有负数情况的差值计算abs()能省掉一个if判断。4. 第一次组合应用把函数、循环、列表拼成一个成绩统计工具理论知识学得再多不如在第五天做一次完整的小项目。我的第一个小工具是学生成绩统计程序。这个选题不复杂但五脏俱全要输入、要存储、要计算、要逻辑判断、要输出。做完之后我对学习Python到底在学什么这个问题有了完全不同的理解。4.1 需求拆解一个小工具的需求是这样的输入若干个学生的成绩不知道具体多少个就设计成输-1结束。把所有成绩存进列表。求出总分和平均分。找出最高分和最低分。统计及格60分以上人数。输出结果。这六个需求拆开来看全是前四天学过的内容循环用来反复接收输入列表用来存成绩sum/max/min用来算统计量if用来判断及格和终止条件。我唯一需要新学的是把这些碎片拼成一个完整程序。4.2 完整代码和运行逻辑def get_scores(): scores [] while True: s input(请输入成绩输入-1结束) s int(s) if s -1: break scores.append(s) return scores def analyze_scores(scores): total sum(scores) count len(scores) avg total / count if count 0 else 0 max_score max(scores) if count 0 else 0 min_score min(scores) if count 0 else 0 passed 0 for score in scores: if score 60: passed 1 return total, avg, max_score, min_score, passed def main(): scores get_scores() if len(scores) 0: print(没有输入任何成绩) return total, avg, max_score, min_score, passed analyze_scores(scores) print(f总人数{len(scores)}) print(f总分{total}) print(f平均分{avg}) print(f最高分{max_score}) print(f最低分{min_score}) print(f及格人数{passed}) main()实际运行的效果模拟输入62、85、47、90、58、-1请输入成绩输入-1结束62 请输入成绩输入-1结束85 请输入成绩输入-1结束47 请输入成绩输入-1结束90 请输入成绩输入-1结束58 请输入成绩输入-1结束-1 总人数5 总分342 平均分68.4 最高分90 最低分47 及格人数3这段代码里有两个隐藏知识点值得单独拿出来讲第一个是avg total / count if count 0 else 0。这行用到了条件表达式三元运算符意思是如果count大于0就相除否则结果就是0——防止输入成绩数量为0时程序崩溃。第五天学这个略微超前但配合注释完全能看懂遇到报错也知道怎么处理。第二个是f-string。print(f总人数{len(scores)})是Python 3.6以后推荐的格式化写法在字符串前面加f花括号里直接写变量名或表达式比老式的print(总人数 str(len(scores)))简洁太多。4.3 这个练习教会我的事做完这个练习我第一次感受到程序解决真实问题的快乐。以前做题是证明自己会语法现在写程序是真的在帮老师统计成绩。虽然代码总共不到四十行但它让我明白了学编程的路径不要等所有知识学完再动手学一点用一点用的时候自然知道自己缺什么。5. 第五天踩过坑的完整记录缩进、类型、越界和input这一节专门记录第五天我实际遇到的报错。我做的每一件事都是真实发生过的不是编的。如果你也正在经历同样的报错看到这里应该能少走很多弯路。5.1 IndentationError缩进错误Python的第一道门槛报错信息长这样IndentationError: unexpected indent第五天上午我写了个函数把函数体里的代码多缩进了一格或者函数外层的代码不小心多按了TabPython直接拒绝运行。Python是一门通过缩进划分代码块的语言缩进混乱等于语法错误。我当时最气人的经历是在一个for循环后面按了Tab键但项目里别的代码块用的是四个空格。VS Code里Tab和空格默认会做转换但如果你直接在其他编辑器里写就很容易混用。解决办法只有一个统一用四个空格缩进把编辑器里的Tab键配置成展开为空格。我现在写Python还是坚持这个习惯宁可多按几次空格也不要Tab键。5.2 TypeError字符串不能直接和数字拼接我写的代码是这样的age 18 print(我今年 age 岁)结果报错TypeError: can only concatenate str (not int) to str这个错误的原因我在第二天就学过但第五天写程序一着急就忘了。解决办法就是类型转换print(我今年 str(age) 岁)或者用f-stringprint(f我今年{age}岁)。这类错误特别能体现编码能力细心程度经验积累。你越急越容易写错写错一次记住一次后面自然条件反射式地先转类型。5.3 IndexError列表索引越界nums [10, 20, 30] print(nums[3])报错IndexError: list index out of range列表的索引从0开始所以三个元素的列表索引范围是0到2访问nums[3]必然越界。第五天做切片练习时我老想着第3个元素是不是索引3结果直接踩了坑。有个小技巧如果你不确定列表长度先len(nums)看看有多少个元素再去访问索引。或者访问最后一个元素直接用nums[-1]这个负索引在Python里是合法且好用的。5.4 input()返回的全是字符串这条不算报错但导致的后果很容易让人挠头。score input(请输入成绩) if score 60: print(合格)不报错吗其实score 60在Python 3里会直接报TypeError因为字符串不能和整数比较。我把这个错误单独列出来是因为它太常见了在代码里输入一个数字想当然地以为它就是数字。从input拿到的永远是字符串一定要显式转成int或者float再参与运算。5.5 错误对照表第五天新手高频报错速查错误类型典型报错触发原因快速解决IndentationErrorunexpected indent缩进不统一或多余缩进统一用4个空格别混TabTypeErrorcan only concatenate str (not int) to str字符串和数字拼接用str()转换或f-stringIndexErrorlist index out of range访问了不存在的索引确认len()或用负索引ValueErrorinvalid literal for int()把非数字字符串转int检查输入内容或先用float()NameErrorname xx is not defined变量名拼错或未定义检查拼写和赋值顺序第五天遇到这些错误不用慌。我当时的感受是报错其实是Python在告诉我具体的错误位置和原因比那种程序不报错但结果不对的情况好排查多了。最怕的恰恰是程序能跑、逻辑不对因为这种需要自己一行行排查。6. 第五天之后怎么走三条真实可行的路线参考第五天是第一个分水岭。往后的方向选择决定你接下来几周的学习难度和动力。我不打算给你列二十个方向就说说三个我观察到的、也是最常见的Python应用入口以及每个入口需要的核心技能。6.1 路线一数据处理与分析这是Python在职场里最硬通货的应用方向对应的热搜关键词是python数据分析与可视化python写入excelpython结构化数据。数据处理需要你掌握pandas库处理表格数据DataFrame结构、openpyxl或者pandas的to_excel方法导出Excel、matplotlib或seaborn画图。前提是列表和循环要熟练因为pandas处理数据时非常依赖对行、列操作的理解。第五天之后你可以先用标准库做数据练习读取一个CSV文件计算每列的平均值找出去重后的唯一值种类。这些用目前学的for循环、列表、切片就能完成大半然后再过渡到pandas。6.2 路线二自动化脚本与小工具爬虫、文件批量处理、自动化办公脚本都属于这条路线。热搜里python爬虫的火热程度说明这是自学Python的人最想做的事之一。爬虫需要的基础技能是requests库发HTTP请求、解析HTML常见的是BeautifulSoup或lxml、数据处理和保存。说实话爬虫真正的门槛不在于Python本身而在于你要理解网页的结构HTML标签、CSS选择器和反爬机制。第五天就冲去爬虫容易学得很挫败因为基础还不牢。更好的过渡方式是先用Python做自己手工操作的替代品。比如用glob和shutil批量重命名文件、用openpyxl把多个Excel合并成一个文件、用email库发自动邮件。这些脚本用到的同样是循环、列表、条件判断和字符串处理只是换了个应用场景。6.3 路线三Web开发与后端对应热搜里的python应用融入spring cloud alibaba微服务体系这个方向对第五天结束的初学者来说还很远但不代表你不应该知道它。框架层面有Flask、Django、FastAPI需要理解HTTP协议、路由、数据库SQL基本操作、用户认证等概念。如果选这条路第五天之后要做的是先把函数、面向对象编程class和模块import彻底掌握。Web框架会把大量的编程细节封装好但框架之上的业务逻辑还是靠你写Python代码。基本功不扎实用框架写出来的东西也容易出各种诡异问题。6.4 给第五天后的自己具体建议我给自己定的接下来五天的计划是这样的第六天把class面向对象的基本概念过一遍不求深入先知道为什么会有这东西。第七天挑一个数据处理的小任务比如统计一个Excel文件的销售数据全程用Python做。第八天学文件读写把程序运行结果保存成 txt 或 csv。第九天写一个待办事项管理程序支持添加、查看、删除、保存到文件。第十天复习并复盘前面所有内容整理自己的笔记和报错记录。这个计划的中心思想是以练代学每天学一点新东西但更大比例的时间是在用旧知识做新项目。等到能亲手完成一个待办管理程序回头再看看第五天的成绩统计工具你会明显感觉到自己的进步——这种肉眼可见的进步感才是坚持学下去最好的燃料。第五天真正改变我的不是多学了几个函数而是第一次靠组合已有知识做出来一个完整的工具。虽然粗糙但它是属于我的第一个程序。对我来说那天之后学Python这件事从完成任务变成了实现想法。如果你现在正好在自学Python的初期我的建议就一条别赶进度去做东西。哪怕是最简单的成绩统计、猜数字游戏、待办清单把能想到的小需求挨个写出来跑通比多看几十遍教程都管用。语法背得再熟不动手照样写不出程序代码写得再烂跑起来的那一刻自信心就立住了。

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

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

免费获取报价 →
↑