Python学习【130】:用 Python 帮消毒工厂算装箱,输入编号就能出结果(二)
一、学前花絮
今天最大的新闻是美以打击伊朗,致使哈梅内伊及其亲属、官员多人伤亡。感觉这个世界从来都不太平,只是我们有幸生活在这个和平的国度。而和平靠什么?靠我们国家几代人的辛苦努力,让我们各个层面已经拥有了能够防止坏人骚扰的能力。想到革命先驱、两弹元勋、各个行业优秀的人,正是群策群力,众志成城,才让我们祖国如此强大。我们才有可能在外面炮火连天的时候,还能学习python。
上一篇关于消毒工厂计算装箱的文章,实际上是一种编程的思路。演示在实际生活中遇到问题的时候,如何把聊天内容转化为计算机编程需求,然后按照步骤去实现。
这个很重要,整个思考的过程,或者说设计的步骤,就是面向一个实际问题的时候,如何去转化为计算机语言。采用函数模块化封装的方法,为以后的程序阅读及修改提供了方便。
那么上篇文章的结尾也提到了,尽管我们通过编写python程序,实现了输入、输出,获取了结果。但毕竟与实际情况仍然存在偏差,这就需要进一步细化。此外,为了让程序更加友好,我们还应该增加界面,通过浏览器界面显示输入输出的信息,更加直观。
二、python程序示例(web优化)
2.1 程序设计
之前的程序为了简化,只是屏幕输入输出,本次改为BS架构。分为前后端,前端html程序显示基础信息及输出装箱结果。后端python程序完成业务逻辑实现。
核心思路升级
上一篇文章每个工厂的盒子数量只有1个,本次程序修改为任意个(以整数数字表示)。实际项目中,每个工厂的基础数据信息需要按照实际情况修改:

以上基础信息中,工厂整体是一个大的列表list,每个元素是字典dict。字典中包括id、工厂名称、盒子size、本批次数量等信息。
那么本次程序与上次最大的不同,不再只算 1 个箱子的最优组合,而是把选中的所有工厂的全部产品都装箱,计算需要多少个箱子、每个箱子装哪些产品,同时输出每个箱子的占用体积和剩余空间(最后一箱允许不满)。整理后的需求如下:
1.需求目标:把选中工厂的全部待装箱产品(即 quantity 字段的数量)都装完,计算总箱数 + 每箱的产品组合 + 剩余空间;
2.装箱逻辑:
l对每个箱子,优先装「空间利用率最高」的产品组合(尽可能装满);
l装完一箱后,扣除已装数量,继续装下一箱,直到所有产品都装完;
l记录每箱的装货明细、占用体积、剩余体积;
3.界面输出:展示总箱数,以及每箱的详细信息(装了哪些工厂的产品、数量、占用 / 剩余空间)。
2.2 实现思路梳理
1.技术栈:Flask(后端) + HTML/CSS(前端) + Jinja2(模板渲染)
2.核心功能:
l后端预设 10 个工厂的基础数据(ID、名称、包装盒体积)
l前端页面展示所有工厂的列表,用复选框让用户选择批次工厂
l提交后后端计算装箱数量,前端展示结果
l界面适配基础样式,保证易用性
2.3 完整实现代码
步骤 1:环境准备
先安装 Flask(如果未安装):
步骤 2:项目结构(单文件即可)
创建一个 app.py 文件,内容如下(包含后端逻辑 + 前端模板):

步骤 3:创建前端模板
在 app.py 同级目录下创建 templates 文件夹,然后在该文件夹中创建 index.html 文件:

2.3 运行与使用说明
1.启动程序:运行 app.py,控制台会输出访问地址(默认是 http://127.0.0.1:5000/)。
2.界面操作:
l打开浏览器访问上述地址,能看到所有工厂的复选框列表,每个工厂标注了名称和包装盒体积;
l勾选需要计算的工厂(可多选);
l点击「计算装箱数量」按钮,下方会立即显示每个选中工厂的装箱结果;
l如果包装盒体积超过消毒箱体积,会标注「无法装箱」。
2.4 界面效果说明
l选择界面:清晰展示每个工厂的 ID、名称、包装盒体积,复选框选择更直观,替代了手动输入数字;
l结果展示:结果区域单独划分,样式区分明显,异常情况(无法装箱)用红色标注,易读性高;
l响应式基础样式:在电脑端显示整洁,适配不同屏幕大小。
2.5 浏览器界面显示
运行app.py程序输出:

直接点击链接或者在浏览器中输入:127.0.0.1:5000,显示如下界面:

以上就是工厂的基础信息,包括工厂的id、名称、盒子size、盒子数量等。
当选择本批次的工厂后,系统会自动计算装箱结果:


通过查看以上输出结果,应该说与实际情况比较接近了。但是否还有优化空间呢?答案是肯定的,一个程序很少是完美的,更何况我们要面对各种复杂的需求。
哪些地方需要优化呢?我们看到程序的核心算法是遍历,也可以认为是穷举法,把所有的排列组合按照盒子与箱子的尺寸进行比较,这种运算是效率比较低的。
2.5 扩展优化建议
l算法优化:当前用笛卡尔积遍历所有组合,工厂数量多时计算较慢,可替换为「动态规划算法」(适合背包问题,效率更高);
l批量计算:支持多箱计算(比如 10 个箱子的总装箱量);
l自定义参数:允许用户在界面修改工厂的 quantity、箱子体积等参数;
l结果导出:支持将最优组合导出为 Excel/CSV 文件。
此外,对于盒子的size,我们假设为100的整数,所以导致前面几个箱子100%利用率。那么如果盒子的尺寸有奇数,无论如何怎么求和也不能100%,所以真正的需求是让每箱装的盒子最大化。
三、小结
对于python学习,我们通过实际案例,编写应用程序。这种方法会更快速提升编码水平,也让学习python更有趣。
2026 农历马年,让我们保持热爱,持续学习 Python。用知识与行动,把平凡的日子过得充满意义。愿我们在 Python 的学习路上稳扎稳打,日日精进,让每一段时光都不负自己。