纯文本,不是完美数据
每一行应该是 名称|数量|单价。有些行会是空行、格式错误,或者包含无法转换的数字。
把字符串、列表、字典、循环、函数、错误处理和 JSON 串成一个小程序。输入故意是脏的,输出应该可预测。
每一行应该是 名称|数量|单价。有些行会是空行、格式错误,或者包含无法转换的数字。
返回商品列表、总额和错误列表。打印只是结果的一种展示,不是结果本身。
使用 Python 内置的字符串、列表、字典、函数、异常和 json 模块。不安装包,不读写文件,不联网,也不使用 input()。
把收据拆成多行,去掉首尾空白,跳过空行;但保留行号,出错时才能指出是哪一行。
按竖线拆分每一行,要求恰好三个字段;数量转成 int,单价转成 float,名称为空要拒绝。
数量必须为正,单价不能为负。记录错误后继续处理下一行;一行坏数据不应该毁掉整张收据。
为每个商品生成带两位小数的 line_total,最后只汇总一次,避免总额与明细对不上。
返回包含 items、total、errors 的字典。用单独的函数排版,再打印 JSON 摘要方便检查。
结构可预测,比一堆打印文字更容易测试。
{
"items": [
{"name": "Latte", "qty": 2, "price": 4.5, "line_total": 9.0}
],
"total": 18.75,
"errors": []
}起始代码可以运行,但返回空结果。补完 TODO 后再运行。参考答案同时解析正常收据和坏收据,并做自检。
接受可选折扣率,校验后作用于总额,同时在结果中保留折扣前的金额。
熟悉 csv 模块后,把竖线样本换成小型 CSV 文件,复用同一套校验逻辑。
把三个验收场景写成 assert。以后每次改代码,先跑测试,再改排版。