【Python自动化】安全库存阈值不同?库管/小白1个脚本预警

【Python自动化】安全库存阈值不同?库管/小白1个脚本预警
为什么你需要这个脚本管多品类库存有多痛苦在仓库、仓库管理系统中管理货品时出现令库管烦恼的问题是把所有货品的安全库存阈值即剩下多少件就预警且提示该补货/进货设为统一标准导致销量快的货总是缺货、销量慢的货总是积压这样既降低了仓库空间流转、又出现资金的配置严重失衡。因为每个货品的销量不同安全库存阈值就不同。这个脚本能帮你做什么这怎么办呢没事有Python多货品安全库存预警系统解决。库管输入每个货品的商品名、商品当前库存、商品安全库存阈值就能自动提示该货品是否进货/补货了。Python多货品安全库存预警系统能解决因为库管把所有货品安全库存阈值设置为统一的值导致的上述的后果。对于Python小白来说Python多货品安全库存预警系统运用Python函数的默认参数的语法知识可以通过它来达到熟练掌握、灵活运用Python函数的默认参数的目的。多货品安全库存预警脚本源码运行结果运行Python多货品安全库存预警系统时通过输入商品名、商品当前库存、商品安全库存阈值给出是否需要补货/进货的预警。我在雪糕仓库工作有一定的相关工作经验。我通过运行Python多货品安全库存预警系统给雪糕做库存预警。更新多货品安全库存预警表.xlsx在下面几幅图中在多货品安全库存预警表.xlsx在的情况下会更新该.xlsx表里面增加新输入的商品信息、更新改动的商品信息没有改动的商品信息不变。同时展示输入商品名、商品当前库存、商品安全库存阈值的校验功能。下面两幅图是运行前的图片多商品安全库存预警表.xlsx在了。运行前多货品安全库存预警表.xlsx的内容如下图所示。下面几幅图是在运行的图片。运行时更新的多货品安全库存预警表.xlsx的内容如下图所示。创建多货品安全库存预警表.xlsx以下几幅图中在没有多货品安全库存预警表.xlsx的情况下运行python多货品安全库存预警系统时会新创建一个多商品安全库存预警表.xlsx。如下一幅图这是在运行之前。没有多商品安全库存预警表.xlsx。下面几幅图是在运行的图片。在运行之后已经创建了多货品安全库存预警表.xlsx。创建好的多货品安全库存预警表.xlsx的内容如下图所示。退出python多货品安全库存预警系统如下几幅图展示的是python多货品安全库存预警系统的退出功能。代码详解Python多货品安全库存预警脚本的完整源码如下。如果你们看不懂代码那么没事代码里带注释。该脚本的代码的注释中主要讲解了商品名称、商品当前库存、商品安全库存阈值的输入及其校验比较商品当前库存和安全库存并给出是否需要补货/进货的预警把结果保存在excel表中还重点介绍了在哪里以及如何运用Python函数的默认参数的语法知识。如果你不懂Python函数的默认参数的语法知识请阅读下面一篇文章。Python函数默认参数错PyCharm中新手1招根治这些能保证库管和Python新手能看懂。importopenpyxlfromopenpyxl.stylesimportFont,PatternFill,Alignmentimportos# # 全局配置Excel文件名# EXCEL_FILE多商品安全库存预警表.xlsx# # 功能一库存预警判断# ## 【Python 默认参数 知识点】## 写法def 函数名(参数1, 参数2, 参数3默认值):## 规则# · 参数1、参数2 是必填参数调用时必须给值不给就报错# · 参数3默认值 是默认参数调用时可给可不给# - 给了 → 用你给的值# - 没给 → 自动用等号后面的默认值## 本例warn_threshold15# · 大多数商品安全库存都是15不用每次写# · 少数特殊商品比如贵重品可以自定义如传20## 三种合法调用方式# stock_warning(8, 苹果) → 用默认值15# stock_warning(8, 苹果, 20) → 用自定义值20# stock_warning(8, 苹果, warn_threshold25) → 带名字传更清晰# defstock_warning(stock_num,sku,warn_threshold15):判断库存是否需要补货返回是或否ifstock_numwarn_threshold:# 当前库存 安全阈值print(f{sku}库存{stock_num}低于阈值{warn_threshold}该补货了)return是# 返回是表示需要补货else:print(f{sku}库存{stock_num}正常无需补货。)return否# 返回否表示不需要补货# # 功能二获取用户输入带校验# ## 【又是默认参数】must_be_intFalse## 作用一个函数干两件事靠默认参数区分# · 输入商品名时 → get_input(提示文字)# 只校验非空因为商品名可以是汉字、字母# · 输入库存数量时 → get_input(提示文字, must_be_intTrue)# 额外校验必须是整数库存不能是小数或文字## 返回值# · 正常输入 → 返回输入的内容# · 输入 q 或 Q → 返回 None表示用户想退出# defget_input(prompt,must_be_intFalse):获取用户输入校验后返回。输入q/Q返回None表示退出whileTrue:# 无限循环直到输入合法才跳出textinput(prompt).strip()# input()接收键盘输入strip()去掉首尾空格iftext.lower()q:# .lower()把大写Q转成小写q统一判断returnNone# 返回None外层收到None就知道要退出iftext:# 输入全是空格或直接回车print(输入不能为空请重新输入。)continue# 跳过本次循环重新要求输入ifmust_be_int:# 如果调用时传了 must_be_intTruetry:returnint(text)# 尝试把字符串转成整数成功就返回exceptValueError:# 转失败如输入了abc会抛异常被except捕获print(输入错误请输入整数)continue# 重新要求输入returntext# 不需要校验整数直接返回# # 功能三保存到Excel核心中的核心# ## 核心逻辑一句话有则更新无则新增不动别人## 分两种情况# 1. 文件不存在 → 创建新文件画表头写第一条数据# 2. 文件已存在 → 打开文件找这个商品# · 找到了 → 更新那一行的数据其他商品不动# · 没找到 → 在表格最下面新增一行## 参数说明# sku: 商品名称# stock_num: 当前库存数量# warn_threshold: 安全库存阈值# need_replenish: 是或否来自 stock_warning() 的返回值# defsave_to_excel(sku,stock_num,warn_threshold,need_replenish):把商品库存信息写入Excel有则更新无则新增# 表头文字Excel第一行要显示这些列名headers[商品名称,当前库存,安全库存阈值,是否需要补货/进货]# ---------- 情况1Excel文件已存在 ----------ifos.path.exists(EXCEL_FILE):# os.path.exists() 检查文件是否存在wbopenpyxl.load_workbook(EXCEL_FILE)# 加载已有的Excel文件wswb.active# .active 获取当前正在使用的工作表SheetfoundFalse# 标记是否找到这个商品先假设没找到# 遍历已有数据从第2行开始第1行是表头不用看# ws.max_row 是Excel最后一行的行号forrowinrange(2,ws.max_row1):# ws.cell(row行号, column1) 取第1列商品名称列的单元格# .value 取单元格里的文字ifws.cell(rowrow,column1).valuesku:# 找到同名商品更新这一行4个单元格的数据# enumerate([数据列表], 1) 产生 (列号, 值) 的配对从第1列开始forcol,valinenumerate([sku,stock_num,warn_threshold,need_replenish],1):cellws.cell(rowrow,columncol,valueval)# 写入数据cell.alignmentAlignment(horizontalcenter,verticalcenter)# 水平垂直居中foundTrue# 标记为已找到print(f已更新{sku}的库存信息。)break# 找到了就跳出循环后面不用再找了# 循环结束如果 found 还是 False说明遍历完所有行都没找到这个商品ifnotfound:new_rowws.max_row1# 最后一行的下一行就是新增的位置forcol,valinenumerate([sku,stock_num,warn_threshold,need_replenish],1):cellws.cell(rownew_row,columncol,valueval)cell.alignmentAlignment(horizontalcenter,verticalcenter)print(f已新增{sku}的库存信息。)# ---------- 情况2Excel文件不存在从零创建 ----------else:wbopenpyxl.Workbook()# 创建一个全新的Excel工作簿wswb.active# 获取默认的第一张工作表ws.title多商品安全库存预警表# 给这张表起个名字# 画表头第1行灰色背景 黑色粗体 居中forcol,headerinenumerate(headers,1):cellws.cell(row1,columncol,valueheader)# 写入表头数据cell.fontFont(boldTrue,color000000)# 黑色粗体字cell.fillPatternFill(start_colorD3D3D3,end_colorD3D3D3,fill_typesolid)# 浅灰背景cell.alignmentAlignment(horizontalcenter,verticalcenter)# 写第一条数据第2行同样居中forcol,valinenumerate([sku,stock_num,warn_threshold,need_replenish],1):cellws.cell(row2,columncol,valueval)cell.alignmentAlignment(horizontalcenter,verticalcenter)# 设置列宽让表格好看不拥挤# zip() 把两个列表按位置一对一配对A→25, B→16, C→16, D→25forcol_letter,widthinzip([A,B,C,D],[25,16,16,25]):ws.column_dimensions[col_letter].widthwidthprint(f已创建{EXCEL_FILE}并写入{sku}的信息。)# 不管上面走的是更新还是新增还是创建最后都要保存并关闭wb.save(EXCEL_FILE)# 保存到硬盘wb.close()# 关闭文件释放资源# # 程序入口主循环# ## 流程图# 输入商品名 → 输入库存数 → 输入安全阈值回车默认15→ 判断预警 → 保存Excel# ↑___________________________________________________________↓# 循环继续下一件商品# defmain():# 打印欢迎界面globalwarn_threshold# 定义全局变量warn_thresholdprint(**40)print( 多商品安全库存预警系统 )print(**40)print(提示任意环节输入q或Q即可退出)print(**40)whileTrue:# 无限循环一件接一件录入商品print(\n*40)# 打印一条分隔线让界面清晰# 第1步输入商品名称# get_input 只传一个参数must_be_int 用默认值 False只校验非空skuget_input(请输入商品名称 (q或Q退出): )ifskuisNone:# 用户输入了q返回None退出程序print(拜拜)break# break 跳出while循环程序结束# 第2步输入库存数量# 传 must_be_intTrue强制要求输入整数stock_numget_input(请输入库存数量 (q或Q退出): ,must_be_intTrue)ifstock_numisNone:print(拜拜)break# 第3步输入安全库存阈值# 这里直接用 input()因为要支持直接回车使用默认值whileTrue:warn_inputinput(请输入安全阈值 (q或Q退出, 回车默认15): ).strip()ifwarn_input.lower()q:#用户输入为Q或qbreak# 【默认参数思想的实际运用】# 函数里用 warn_threshold15 做默认参数# 这里用户直接回车程序同样用15作为默认值# 两者思想一致大多数情况用这个数特殊情况再改ifwarn_input:# 用户直接回车输入为空字符串warn_threshold15# 使用默认值15print(使用默认阈值: 15)breakelse:try:warn_thresholdint(warn_input)# 用户输入了自定义阈值exceptValueError:# 输入不是整数如abcprint(输入无效请输入整数。)continuebreakifwarn_input.lower()q:print(拜拜)break# 第4步调用预警判断函数# 把用户输入的库存和阈值传进去得到是或否needstock_warning(stock_num,sku,warn_threshold)# 第5步保存到Excel# 把4个信息全部传给 save_to_excel由它决定是更新还是新增save_to_excel(sku,stock_num,warn_threshold,need)print(f已保存excel文件到:{os.path.abspath(EXCEL_FILE)})# # 程序启动开关# # if __name__ __main__: 是Python的固定写法意思是# 只有当直接运行这个文件时才执行 main() 函数# 如果这个文件被别的文件导入main() 不会自动执行# if__name____main__:main()核心功能讲解Python多货品安全库存预警脚本的核心功能用流程图表示。该流程图的内容用两句话来简要概括那就是输入商品 → 输入库存 → 输入安全库存阈值回车默认15→ 判断预警 → 写入Excel有则更新/无则新增/无文件则创建→ 循环继续下一件。并且整个流程里任意一步输入 q 或 Q都会直接打印拜拜并结束程序。该脚本的流程图如下。▶ 【程序启动】└─ 打印欢迎界面└─ 提示输入 q/Q 可随时退出│▼▶ 【主循环】开始录入第 N 件商品│▼▶ ① 输入商品名称├─ 输入 q/Q ───→ 【退出】打印拜拜├─ 输入为空 ─→ 提示输入不能为空请重新输入返回重输└─ 正常输入 ───→ 保存商品名继续│▼▶ ② 输入当前库存数量├─ 输入 q/Q ────→ 【退出】打印拜拜├─ 输入为空 ─→ 提示输入不能为空请重新输入返回重输├─ 输入非整数 ─→ 提示输入错误请输入整数返回重输└─ 正常整数 ────→ 保存库存数继续│▼▶ ③ 输入安全库存阈值├─ 输入 q/Q ─────→ 【退出】打印拜拜├─ 直接回车空输入→ 自动使用默认值 15├─ 输入非整数 ────→ 提示输入错误请输入整数返回重输└─ 正常整数 ─────→ 保存阈值继续│▼▶ ④ 库存预警判断├─ 当前库存 安全阈值│ ├─ 是 → 打印库存不足该补货了│ │ 返回结果 “是”│ └─ 否 → 打印库存正常无需补货│ │ 返回结果 “否”└─ 返回是/否结果│▼▶ ⑤ 写入 Excel 文件├─ 文件已存在│ ├─ 否 → 【创建新文件】│ │ ├─ 新建工作簿 命名工作表│ │ ├─ 第1行画表头灰底黑体居中│ │ │ 【商品名|当前库存|安全库存阈值|是否需要进货/补货】│ │ ├─ 第2行写入第一条数据│ │ └─ 调整列宽│ └─ 是 → 打开文件逐行查找商品名│ ├─ 找到了│ │ ├─ 是 → 更新该行4个单元格│ │ │ 打印已更新│ │ └─ 否 → 表格底部新增一行│ │ 打印已新增│ └─ 所有数据居中显示├─ 保存到硬盘 → 关闭释放资源└─ 打印文件完整路径│▼▶ ⑥ 一件商品处理完毕└─ 回到主循环顶部继续录入下一件商品重复 ①→②→③→④→⑤Python运行环境安装在运行多货品安全库存预警系统的之前需要做的重要的前置准备是安装和使用Pycharm和Python.exe。如果你们对安装和使用Pycharm和Python.exe一窍不通那么请阅读如下两篇文章。安装Pycharm配置python.exe0基础新手一次成功如何使用PyCharm0基础新手必看七大核心功能越用越有意思这个脚本还能用在哪些场景能用多货品安全库存预警系统的场景中除了在仓库里根据多货品的当前库存、安全库存阈值来判断多货品是否进货/补货的场景外还能用在多品类办公用品/耗材领用预警、多品类实验室工具/仪器管理、多品类小卖部食材管理、多品类小型工厂/作坊的原材料/零件管理等等。切换场景使用多货品安全库存预警系统时不用改代码直接运行使用就可以了。复盘总结本文详细讲解了Python多货品安全库存预警系统的运行结果、源码、核心功能解决了库管的统一设置所有货品安全库存阈值产生的问题同时它运用了Python函数的默认参数供Python小白练手使Python小白熟练掌握、灵活运用Python函数的默认参数。对于库管来说读到这块相信你已经赢了遇到统一设置所有货品安全库存阈值产生的问题后没有解决的库管真的挺棒了对于Python小白来说读到这里相信你已经赢了没有学Python函数的默认参数或只学Python函数的默认参数理论而不去练手的Python小白真的挺了不起完整资源文件下载如果你觉得复制粘贴麻烦想更省事那么我这里有完整的Python多货品安全库存预警系统的源码的.py文件其链接如下点击链接下载且在Pycharm中找到该.py文件运行即可。PythonExcel 多商品安全库存预警系统库管库存管理Python 小白入门毕设课设源码专栏下篇剧透在专栏中下一篇文章讲的是用Python函数的语法知识解决库存管理痛点的干货。如果你觉得我写的文章有帮助、有用或者你喜欢读我写的文章请动一动宝贵的金手指进行点赞、收藏、转发加关注你的支持是我继续创作的动力我会感激不尽关注我我会发布更多安装和使用编程软件、Python及其他编程语言的语法知识、突破Python及其他编程语言的语法知识的痛点、Python及其他编程语言实战的干货。如果你在Python语法、库存管理等方面有疑惑、问题或你对我写的文章有疑问那么欢迎你到评论区留言我看到后会一一回复。