You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免代码重复并高效使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:39:02