如何避免代码重复并高效使用while循环优化Python点餐代码
代码优化方案
优化思路
- 将重复的订单校验、金额计算、结果打印逻辑封装为独立函数,彻底消除重复代码
- 优化关键词匹配逻辑:将用户输入统一转为小写后再匹配,无需罗列所有大小写组合的关键词,大幅精简配置项
- 新增输入合法性校验:补充了非数字数量输入的异常处理,避免程序直接崩溃
优化后完整代码
# 菜品单价配置 PIZZA_PRICE = 2.50 RICE_PRICE = 7.89 # 点餐关键词匹配集合(统一用小写匹配,无需罗列大小写组合) RICE_KEYWORDS = {'r', 'ri', 'ric', 'rice', 'ice', 'ic', 'rce'} PIZZA_KEYWORDS = {'p', 'pi', 'piz', 'pizz', 'pizza'} CONFIRM_OPTS = {'yes', 'y'} CANCEL_OPTS = {'no', 'n'} def process_order(username: str, order_item: str, count: str) -> float: """处理订单逻辑,返回订单总金额,匹配不到菜品或输入非法返回0""" try: count_num = int(count) if count_num <= 0: print("数量不能小于1,请重新输入") return 0 except ValueError: print("数量输入不合法,请输入数字") return 0 order_item_lower = order_item.strip().lower() if order_item_lower in RICE_KEYWORDS: total = count_num * RICE_PRICE print(f"{username}的米饭订单已处理,总费用为 Rs.{total:.2f}") print("请完成支付!") return total elif order_item_lower in PIZZA_KEYWORDS: total = count_num * PIZZA_PRICE print(f"{username}的披萨订单已处理,总费用为 Rs.{total:.2f}") print("请完成支付!") return total else: return 0 # 主流程 if __name__ == '__main__': total_amount = 0 # 首次下单 username = input("请问您的姓名是?") order_item = input(f"您好{username},今天想要点什么?\n米饭还是披萨?") order_count = input("需要多少份?") total_amount = process_order(username, order_item, order_count) # 下单失败重试循环 while total_amount == 0: retry = input(f"我们没有{order_item}这个菜品,您要重新尝试下单吗?") retry_lower = retry.strip().lower() if retry_lower in CANCEL_OPTS: print("再见") break elif retry_lower in CONFIRM_OPTS: username = input("请问您的姓名是?") order_item = input(f"您好{username},今天想要点什么?\n米饭还是披萨?") order_count = input("需要多少份?") total_amount = process_order(username, order_item, order_count) else: print("输入不合法,请输入yes/y或no/n")
Windows系统打包为独立可执行程序方法
- 第一步:安装打包工具PyInstaller,执行命令:
pip install pyinstaller - 第二步:打开命令提示符(CMD),切换到你的Python代码文件所在的文件夹
- 第三步:执行打包命令,因为本程序是控制台交互程序,需要保留输入输出窗口,所以执行:
pyinstaller -F 你的代码文件名.py
参数说明:
-F代表打包为单个独立的exe文件,无需附带其他依赖;如果是不需要交互的GUI程序可以加-w参数隐藏控制台窗口,本交互程序不建议加该参数,否则无法正常输入输出
- 第四步:打包完成后,生成的exe文件会存放在同级目录下的
dist文件夹中,这个exe可以直接在未安装Python环境的Windows设备上运行
内容的提问来源于stack exchange,提问作者AMN
相关产品推荐
相关产品推荐

