六、面向过程案例-购物车系统学习笔记

六、面向过程案例-购物车系统学习笔记

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个操作:
  1. 添加商品
  1. 修改数量
  1. 删除商品
  1. 查询购物车
  1. 退出
我的理解:就是一个循环菜单,根据用户选择执行不同操作。

二、数据结构设计

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位小数

九、关于如何实现

  1. 添加商品时,如果已存在就增加数量,而不是覆盖
  1. 添加库存检查,数量不能为负数
  1. 查询时按总价排序显示
  1. 添加折扣功能,满100打9折
思路
  • 第1题需要在添加前判断 if product_name in cart
  • 第2题需要判断 if quantity > 0
  • 第3题需要把数据排序后再遍历
  • 第4题需要在打印总计前判断并计算折扣
推荐云服务

雨云 - 云服务器首选

稳定 · 高速 · 性价比超高

使用优惠码立享折扣,开启你的云端之旅~

一元试用秒级开通24h在线客服

优惠码

zqf
立即访问
Loading...
灵心小窝

灵心小窝

这里不是一个喧闹的地方,只是用来存放一些还不想遗忘的东西。

声明 © 2026 早清风
加载中...