📋 题目分析
✅ 简单介绍
本题目是关于一个超市销售报表自动生成的任务。过去,员工需要在关店后手动统计每日销售数据并报告总部。你的目标是帮助他们实现这部分流程的自动化,节省下班时间。
程序会接收多条销售记录,每条记录包含:
- item type(商品种类):字符串
- item quantity(销售数量):整数
- sale total(销售总价):浮点数
最终的目标是:
- 并列出所有错误的销售记录。
- 成一份销售汇总报告(按商品分类统计,包括销量、销售次数、平均收入以及错误数量)。
💡 解题思路
核心任务拆解
题目共分为三个子任务,对应三个函数的实现逻辑:
🧚 1. is_valid_sale(...)
功能:判断一条销售记录是否有效。
判断规则:
- 商品种类必须存在于价格表中;
- 销售总价必须等于 单价 × 数量。
✅ 只要任一条件不满足,这条记录就是无效的。
伪代码:
🔍 2. flag_invalid_sales(...)
功能:找出所有不合法的销售记录。
- 遍历销售列表,调用
is_valid_sale(...)
逐条判断;
- 返回一个新列表,包含所有错误记录;
- 不得修改原始
sales
列表内容。
伪代码:
📊 3. generate_sales_report(...)
功能:生成一个销售报表字典,统计每天每种商品的汇总情况。
包含以下统计项:
字段名 | 含义说明 |
Units Sold | 有效记录中总销量(单位) |
Sales Made | 有效记录中出现的次数 |
Average Income | 有效记录中的平均销售额(/次) |
Errors | 错误记录数(不参与任何其他统计) |
⚠️ 所有统计仅考虑有效记录,但报表必须覆盖所有价格表中定义的商品类型,即使当天没卖出。
伪代码:
📌 注意事项
- 精度问题: 比较金额时浮点数可能会导致误差,考虑用
round(...)
处理或差值比较方式。
- 平均收入 需要避免除以 0 的情况(没有有效销售记录时设置为 0)。
sales
中每个记录的格式为列表或元组,需要明确结构顺序。
- 报表格式以字典方式返回,不需要特定表格输出,只要结构对即可。
- 不可修改函数定义或参数,严格按照提供的函数框架编写。
- 分离逻辑模块是加分项,例如写一个辅助函数来统计单个商品的数据。
🧐 总结
实现上不复杂,但对结构化思维的要求较高。掌握了清洗数据、分步处理、字典归类这类操作,这种题就能轻松拿下。总之问题不大,秒了。