六、面向过程案例-购物车系统学习笔记
2026-02-20
Python基础
type
Post
status
Published
date
Feb 20, 2026
slug
python-data-structures-shopping-cart-notes-6
summary
用字典 + match-case 做一个购物车系统,记录一下思路和代码。
tags
Python数据存储容器
category
Python基础
icon
password
今天学习用字典 + match-case 做一个购物车系统,记录一下思路和代码。
一、需求分析
要做一个实现购物车功能,需要5个操作:
- 添加商品
- 修改数量
- 删除商品
- 查询购物车
- 退出
我的理解:就是一个循环菜单,根据用户选择执行不同操作。
二、数据结构设计
2.1 我想用什么存数据?
一开始想的是用列表,比如:
但是! 这样查找商品很麻烦,要遍历整个列表。
2.2 为什么用字典更好?
用字典的话,商品名称作为键(key),商品信息作为值(value):
好处:
- 查找快:
cart["苹果"]直接拿到信息
- 结构清晰:每个商品的信息包在一起
- 增删改查都方便
2.3 数据结构图
理解:
cart是大字典
- 每个商品名是键,对应一个小字典
- 小字典里存
price(价格)和quantity(数量)
三、整体流程设计
3.1 程序怎么跑起来?
关键点:
- 用
while True做无限循环
- 用
match-case判断用户选什么
- 选5就
break退出循环
四、完整代码
五、重点理解
5.1 match-case 的执行过程
我的理解:
- 从上往下匹配,匹配成功就执行,然后跳出 match
case _是兜底,前面都不匹配就走这里
- 比 if-elif-else 看起来清爽多了
5.2 字典操作总结
操作 | 代码 | 我的理解 |
添加/修改 | cart[name] = {...} | 键存在就修改,不存在就添加 |
访问 | cart[name]["price"] | 先拿到商品字典,再取价格 |
删除 | del cart[name] | 直接删掉整个键值对 |
遍历 | for name, info in cart.items() | items() 返回键值对元组 |
判断存在 | name in cart | 判断键是否在字典里 |
5.3 添加商品流程
注意:这里直接赋值,如果商品已存在会被覆盖,所以如果要增加数量需要另外处理。
5.4 查询购物车流程
关键点:
- 用
total变量累加总价
cart.items()同时拿到键和值
- 格式化字符串用
f"{name:<10}"左对齐
六、运行测试
七、遇到的问题和解决
问题1:输入的价格是字符串,怎么计算?
解决:用
float() 转成浮点数问题2:怎么判断商品是否存在?
解决:用
in 运算符问题3:遍历字典时怎么同时拿到键和值?
解决:用
items() 方法八、知识点回顾
8.1 match-case
match后面放要判断的变量
case后面放匹配的值
_通配符匹配所有,放最后兜底
8.2 字典
{}创建空字典
dict[key] = value添加/修改
del dict[key]删除
dict.items()遍历键值对
key in dict判断键是否存在
8.3 字符串格式化
f"{name:<10}"左对齐,占10个字符
f"{price:<8.2f}"浮点数保留2位小数
九、关于如何实现
- 添加商品时,如果已存在就增加数量,而不是覆盖
- 添加库存检查,数量不能为负数
- 查询时按总价排序显示
- 添加折扣功能,满100打9折
思路:
- 第1题需要在添加前判断
if product_name in cart
- 第2题需要判断
if quantity > 0
- 第3题需要把数据排序后再遍历
- 第4题需要在打印总计前判断并计算折扣
Loading...
