零基础入门python06:把重复代码变成函数——商品结算器
零基础入门python06把重复代码变成函数——商品结算器一、上一篇课后练习讲解成绩统计练习要求输出排名。参考做法是sorted(scores, reverseTrue)生成新列表不直接修改原始成绩如果要同时保留姓名和成绩应排序字典列表的score字段。可执行验收答案defrank_students(rows:list[dict])-list[dict]:返回新列表原始列表顺序和内容保持不变。returnsorted(rows,keylambdarow:(-row[score],row[name]))students[{name:小王,score:88},{name:小李,score:95},{name:小张,score:95}]rankedrank_students(students)assert[row[name]forrowinranked][小李,小张,小王]assertstudents[0][name]小王# 没有就地排序forrowinranked:print(f{row[name]}:{row[score]})同分时按姓名排序只是一个确定性示例产品也可以改成保留输入顺序。关键是通过key明确排序字段并让函数只负责排序不混入输入读取和打印。二、本篇要完成什么把购物清单改造成可复用的商品结算器。重点不是记住def而是理解函数如何接收输入、完成一个职责并返回结果。三、参数和返回值defcalculate_subtotal(items:list[dict])-float:计算商品小计不读取输入也不打印结果。returnsum(item[price]*item[quantity]foriteminitems)调用者提供items函数返回一个数字。return会结束当前函数如果没有 return默认返回None。把计算函数和交互函数分开测试时可以直接传列表不需要模拟键盘。四、默认参数和作用域defapply_discount(amount:float,rate:float1.0)-float:ifnot0rate1:raiseValueError(折扣必须大于0且不超过1)returnamount*ratedefcheckout(items:list[dict],discount_rate:float1.0)-float:subtotalcalculate_subtotal(items)returnround(apply_discount(subtotal,discount_rate),2)subtotal是函数内部变量函数结束后不会污染外部。不要依赖全局购物车否则不同用户同时结算时会互相影响这正是后端服务必须避免共享可变全局变量的原因。五、完整程序和运行结果defcalculate_subtotal(items:list[dict])-float:returnsum(item[price]*item[quantity]foriteminitems)defcheckout(items:list[dict],discount_rate:float1.0,delivery_fee:float0)-float:ifdelivery_fee0:raiseValueError(配送费不能为负)subtotalcalculate_subtotal(items)returnround(apply_discount(subtotal,discount_rate)delivery_fee,2)defapply_discount(amount:float,rate:float)-float:ifnot0rate1:raiseValueError(折扣必须在0和1之间)returnamount*rate cart[{name:键盘,price:99.9,quantity:1},{name:鼠标,price:39.9,quantity:2}]print(f原价{calculate_subtotal(cart):.2f})print(f结算价{checkout(cart,0.9,6):.2f})预期原价179.70九折加配送费后为167.73。课后练习为结算函数写三个断言下一篇将把账单保存为 JSON 文件。实战补充商品结算的函数设计函数设计先确定输入和输出再决定内部实现。商品结算可以拆成校验商品、计算小计、计算优惠和生成收据四个函数。fromdecimalimportDecimaldefline_total(item:dict)-Decimal:priceDecimal(str(item[price]))quantityint(item[quantity])ifprice0orquantity0:raiseValueError(商品价格和数量必须为正)returnprice*quantitydeforder_total(items:list[dict],shipping:Decimal)-Decimal:subtotalsum((line_total(item)foriteminitems),Decimal(0))discountDecimal(0.9)ifsubtotalDecimal(100)elseDecimal(1)return(subtotal*discountshipping).quantize(Decimal(0.01))生成器表达式适合求和但排错时可以先改成普通 for 循环打印每个商品小计。函数参数不依赖全局购物车测试可以直接传入列表。验收与课后练习验收空购物车、非法商品、满减和配送费课后增加优惠券函数并写出优惠叠加顺序下一篇保存 JSON 记账数据。本篇结束完整模块文件本节不是代码片段而是本篇结束时该模块的完整版本。请先备份旧文件再整体替换替换后重新运行本篇命令和测试。阅读时重点看本篇新增的函数、事务边界和错误处理未涉及的代码先不要自行删减。main.pydefcalculate(items,discount1.0):subtotalsum(price*quantityforprice,quantityinitems)returnround(subtotal*discount,2)cart[(19.9,2),(8.5,3)]print(calculate(cart),calculate(cart,0.9))

相关新闻

知识产权管理平台的核心能力:官文自动归档与案件状态智能更新

知识产权管理平台的核心能力:官文自动归档与案件状态智能更新

在企业知识产权管理工作中,官方来文的处理是一项高频但容易被低估的工作量。每次收到专利局发来的官文通知书数据包,IPR都需要手动解压、逐个查看文件内容、判断对应哪个申请号、再分类上传到管理系统或文件夹中。当案件量达到数百件时,这项工…

2026/10/12 12:55:00 阅读更多 →
毛绒玩具 + AI 机芯——我们如何帮客户做出爆款玩偶

毛绒玩具 + AI 机芯——我们如何帮客户做出爆款玩偶

梯度算子(Nablai)基于涂鸦 T5E / 乐鑫 ESP32S3 / PY32,推出了 TY / LX / NT 三条产品线代号。从工程视角看,毛绒玩具 AI 机芯之所以能成爆款,是因为它在「低门槛交互」和「可运营内容」之间找到了平衡点。 为什么是毛…

2026/10/13 6:59:23 阅读更多 →
紧急安全预警|AI模型疯狂“越狱”!一场被低估的全网安全危机

紧急安全预警|AI模型疯狂“越狱”!一场被低估的全网安全危机

01 前言:当AI开始“挣脱人类管控”最近,全网充斥着各类AI越狱指令、解锁脚本、突破限制教程。很多人抱着猎奇心态跟风尝试,只为解锁AI“无底线问答”“全能使用权限”。但绝大多数人都不知道:2026年的AI越狱,早已脱离简…

2026/10/12 7:06:48 阅读更多 →

最新新闻

恶意代码检测毕设实战:PE特征提取与机器学习模型训练

恶意代码检测毕设实战:PE特征提取与机器学习模型训练

简介:这份资源是一套基于机器学习的恶意代码检测项目源码,面向计算机、人工智能、通信工程、自动化等专业的在校学生与教师,也适合作为毕设、课程设计或项目立项演示的参考。项目围绕恶意代码的特征提取、向量化与模型训练展开,涵…

2026/10/13 6:58:55 阅读更多 →
入口日志参数缺失导致500故障的根因与防御体系

入口日志参数缺失导致500故障的根因与防御体系

1. 项目概述:一次典型的“入口参数缺失”故障复盘“Agent 第一句就 500,我们查了三轮:入口日志少打了一个参数”——这句话不是段子,是某次线上服务发布后凌晨两点的 Slack 截图标题。它精准击中了现代分布式系统中最常见、最隐蔽…

2026/10/13 6:58:55 阅读更多 →
代码工具悄悄上传 .git 目录?从版本库泄露到安全排查的完整指南

代码工具悄悄上传 .git 目录?从版本库泄露到安全排查的完整指南

这两年做代码安全相关的事,最怕看到的就是这句:“ZCode 疑似被抓到上传工作区/.git 记录到云端”。当时看到这个消息,我第一反应是后背发凉。做过几年开发的人都清楚,工作区里最不能见光的目录就是.git,它不仅仅是版本…

2026/10/13 6:58:55 阅读更多 →
从Java后端到Agent开发:收藏这份转型指南,抓住AI时代机遇!

从Java后端到Agent开发:收藏这份转型指南,抓住AI时代机遇!

本文探讨了Java后端开发者转向Agent开发的可能性与挑战。Agent开发涉及将企业文档转化为知识库、模型工具API集成、多步骤任务流程设计等,不同于简单的LangChain调参。虽然Agent开发岗位火热,但也存在岗位泡沫、技术栈变化快、要求复合技能等风险。建议J…

2026/10/13 6:58:55 阅读更多 →
(187页PPT)贝恩保健品Swisse商业尽职调查项目报告(附下载方式)

(187页PPT)贝恩保健品Swisse商业尽职调查项目报告(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/92962815 资料解读:贝恩保健品 Swisse 商业尽职调查项目报告 详细资料请看本解读文章的最后内容。这份由贝恩公司出具的商业尽职…

2026/10/13 6:58:55 阅读更多 →
Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战

Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战

Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战 本文主要讲解Nginx 进阶(HTTPS / 动态站点 / PHP / 反向代理)与 ECshop 实战,每个概念讲清「是什么、为什么、怎么用」,每条命令解释「意图和…

2026/10/13 6:57:55 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →