查看全课大纲(第 22 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
如何用列表记录每一周的存款?
约 19 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
还记得上一节我们完成的“52周存钱挑战”吗?我们成功算出了一年能存下13780元,但程序就像一个健忘的会计,算完就忘,没有留下任何“存钱流水账”。这一节,我们要给程序加上一个“记账本”,让它不仅能算出总数,还能清清楚楚地记下每一周到底存了多少钱。学完这一节,你的程序将拥有“记忆”功能!
💡 核心导读
- 新增功能:学会用“列表”这个强大的“记账本”来记录每周的存款金额。
- 核心新知:认识Python中的“列表”(list),学习如何创建、添加元素和求总和。
- 趣味点:你的程序不再“健忘”,它能记住你存钱的每一步,就像一个真正的储蓄罐。
- 平滑过渡:我们只做一件事——把原来直接累加的方式,改成先记录再求和。
从“健忘”到“记账”:为什么需要列表?
在1.0版本中,我们的程序是这样的逻辑:第一周存10元,累计就是10元;第二周存20元,累计就是10+20=30元……它只关心最后的“累计”这个结果,至于每一周具体存了多少,它并没有保存下来。
这就像你只知道自己钱包里总共有多少钱,但说不清里面每张钞票是什么时候放进去的。如果我们想看看“第10周我存了多少钱?”或者“哪一周存得最多?”,原来的程序就无能为力了。
所以,2.0版本的核心任务非常明确:我们要记录下每一周的存款金额。
那么,用什么来记录一系列的数据呢?在Python里,我们有一个非常趁手的工具——列表(list)。
认识你的“记账本”:Python列表
你可以把列表想象成一个可以装很多东西的“容器”或者“记账本”。这个“记账本”有以下几个特点:
- 有序:里面的东西是按顺序放的,第一格、第二格……清清楚楚。
- 灵活:可以放数字(10, 20)、文字(‘第一周’),甚至混合着放。
- 易访问:通过“位置编号”(索引)可以快速找到任何一格里的东西。
创建你的第一个列表
创建一个列表非常简单,用方括号 [] 把元素括起来,中间用逗号隔开。
# 创建一个记录前三周存款的列表
week_savings = [10, 20, 30]
print(week_savings)[10, 20, 30]如果想创建一个空的“记账本”(就像我们程序一开始那样),直接写一对空方括号就行。
# 创建一个空的列表,准备开始记账
money_list = []
print("初始的记账本是空的:", money_list)初始的记账本是空的: []往“记账本”里添加记录:.append()
有了空的记账本,我们怎么往里添加每周的存款记录呢?用 .append() 方法。它的作用就是:在列表的末尾添加一个新元素。
money_list = [] # 空记账本
# 第一周,存入10元
money_list.append(10)
print("第一周后:", money_list)
# 第二周,存入20元
money_list.append(20)
print("第二周后:", money_list)
# 第三周,存入30元
money_list.append(30)
print("第三周后:", money_list)第一周后: [10]
第二周后: [10, 20]
第三周后: [10, 20, 30]看,我们的“记账本” money_list 变得越来越厚了!append 这个词就是“附加、添加”的意思,非常形象。
升级存钱程序:引入列表和数学库
现在,我们有了“记账本”(列表)和“记账笔”(.append()),可以来改造我们的52周存钱程序了。
本节新增的核心改动就是:用一个列表来记录每周存款,而不是直接累加。
同时,为了能方便地计算列表里所有数字的总和(也就是我们的总存款),我们需要请出一个新帮手——Python的 math库。它里面有一个叫 fsum 的函数,专门用来对列表这样的集合里的数字进行精确的求和。
第一步:导入数学工具箱
在程序开头,我们告诉Python:“我要用数学工具箱里的工具”。
import math # 导入数学库第二步:写出2.0版本的完整程序
我们把1.0版本的程序复制过来,然后进行关键改造:
- 增加一个空的
money_list作为记账本。 - 在每周循环里,不再用
saving += money_per_week,而是:- 用
money_list.append(money_per_week)把本周金额记到本子上。 - 用
saving = math.fsum(money_list)重新计算当前总金额(把本子上所有数字加起来)。
- 用
"""
作者:小象教研组
功能:52周存钱挑战
版本:2.0
新增功能:记录每周的存款数
"""
import math # 导入数学库,为了使用fsum函数求和
def main():
# 初始化参数
money_per_week = 10 # 第1周存入的金额
increase_money = 10 # 每周递增的金额
total_week = 52 # 总共的周数
current_week = 1 # 当前周数
saving = 0 # 账户累计总金额
money_list = [] # 新增!记录每周存款数的列表(我们的记账本)
while current_week <= total_week:
# 核心改造部分开始
# 1. 记录:把本周要存的钱记到"记账本"里
money_list.append(money_per_week)
# 2. 计算:把记账本里所有的钱加起来,得到当前总金额
saving = math.fsum(money_list)
# 核心改造部分结束
# 输出本周信息
print(f'第{current_week}周,存入{money_per_week}元,账户累计{saving:.2f}元')
# 更新下一周的存钱金额和周数
money_per_week += increase_money
current_week += 1
# 为了让代码能直接运行,我们在这里调用主函数
main()运行这个程序,你会得到和1.0版本一样的总金额,但程序内部已经发生了质的变化——它现在拥有完整的“记忆”了!
第1周,存入10元,账户累计10.00元
第2周,存入20元,账户累计30.00元
第3周,存入30元,账户累计60.00元
...
第52周,存入520元,账户累计13780.00元程序是如何“记忆”的? 让我们模拟一下程序的前几周:
- 第1周开始:
money_list = [](空) - 第1周存入后:
money_list.append(10)→money_list变成[10]→math.fsum([10])结果是10.0 - 第2周存入后:
money_list.append(20)→money_list变成[10, 20]→math.fsum([10, 20])结果是30.0 - 第3周存入后:
money_list.append(30)→money_list变成[10, 20, 30]→math.fsum([10, 20, 30])结果是60.0
看,money_list 这个列表就像录像一样,完整记录下了 [10, 20, 30, ...] 每一帧(每一周)的画面。
列表的“超能力”:更多常用操作
列表除了能 append(添加),还有很多其他实用的“超能力”。了解它们,能让你的“记账本”变得更强大。
我们来快速认识一下(你可以在Python交互环境里逐一尝试):
# 假设我们有一个记账本
my_list = [30, 10, 50, 20, 40]
# 1. 排序:让杂乱的数据变整齐
my_list.sort()
print("排序后:", my_list) # 输出:[10, 20, 30, 40, 50]
# 2. 反转:倒序查看
my_list.reverse()
print("反转后:", my_list) # 输出:[50, 40, 30, 20, 10]
# 3. 查找位置:数字30在第几个位置?(注意位置从0开始数)
position = my_list.index(30)
print("30的位置是:", position) # 输出:2
# 4. 计数:数字20出现了几次?
count = my_list.count(20)
print("20出现了", count, "次") # 输出:20出现了 1 次
# 5. 删除:删除第一次出现的20
my_list.remove(20)
print("删除20后:", my_list) # 输出:[50, 40, 30, 10]排序后: [10, 20, 30, 40, 50]
反转后: [50, 40, 30, 20, 10]
30的位置是: 2
20出现了 1 次
删除20后: [50, 40, 30, 10]math库的“数学魔法”
我们刚才用到的 math.fsum() 只是数学库 (math) 的冰山一角。这个库就像哆啦A梦的四次元口袋,装满了数学工具。比如:
math.pi:精确的圆周率 π。math.ceil(4.2):向上取整,得到 5。math.floor(4.8):向下取整,得到 4。math.sqrt(9):计算平方根,得到 3.0。
你可以通过官方文档探索更多:https://docs.python.org/3/library/math.html
📝 动手练一练
- 体验“记账本”:运行上面的2.0版本程序后,如果我想在程序最后打印出“第10周存了多少钱?”,应该怎么做?(提示:列表的位置索引从0开始,第10周的数据在列表的第几个位置?)
👉 点击查看参考答案
思路:列表 money_list 记录了所有周的存款。第10周的数据,在列表中索引是9(因为索引从0开始)。我们可以在循环结束后,通过索引访问它。
# 假设这是程序最后添加的代码
# 注意:这段代码需要放在能访问到 money_list 的地方,比如 main() 函数内部循环结束后
# 这里为了演示,我们单独构造一个列表
money_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] # 模拟前10周数据
week_10_saving = money_list[9] # 获取第10周数据,索引是9
print(f"第10周存了 {week_10_saving} 元")第10周存了 100 元- 探索小任务:如果我想知道在整个存钱计划中,单周存款超过300元的有几周,利用现在记录好的
money_list,你觉得思路应该是怎样的?(不需要写完整代码,说说你的想法)
👉 点击查看参考答案
思路:我们已经有了包含所有单周存款的列表 money_list。我们可以遍历这个列表,检查每一个元素(即每一周的存款),如果它大于300,就计数一次。最后,这个计数值就是超过300元的周数。
伪代码思路:
- 设置一个计数器
count = 0。 - 对于
money_list中的每一个amount:- 如果
amount > 300,那么count增加1。
- 如果
- 循环结束后,
count就是答案。
这个功能将在我们学习更多列表操作和循环控制后轻松实现!
本章小结
恭喜!你的“52周存钱挑战”程序成功升级到了2.0版本,获得了关键的“记忆”能力。
📋 行动清单
- 运行2.0版本的程序,感受它记录每一周存款的过程。
- 尝试修改程序初始的
money_per_week(比如从20开始)或increase_money(比如每周递增15),看看你的“记账本”money_list和最终总额如何变化。 - 思考:现在的
while循环需要我们手动用一个变量current_week来记录循环到了第几周。Python有没有一种循环,能自动帮我们计数呢?我们下一节揭晓!
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第5章代码包:52周存钱挑战(含全部版本 5 个 .py)ZIP · 3KB