求和,求平均,排序

用AI写的一个程序,方便后续进行核对菜的金额计算,并找出最贵的菜

点击查看代码
print("🍽️ 菜品消费统计系统")
print("请输入菜品名称和金额,我来帮你统计分析")

# 使用字典列表存储菜品信息
dishes = []  # 每个元素是 {'name': 菜品名, 'price': 金额}

print("\n提示:每行输入 菜品名 金额,用空格分隔")
print("例如:鱼香肉丝 48.5")
print("输入完成后输入 q 结束")

while True:
    user_input = input("\n请输入菜品和金额: ").strip()

    if user_input.lower() == 'q':
        break

    if not user_input:
        print("输入不能为空,请重新输入")
        continue

    parts = user_input.split()

    if len(parts) < 2:
        print("格式错误!请输入:菜品名 金额")
        continue

    # 获取菜品名(可能是多个单词,如"鱼香肉丝"或"宫保鸡丁")
    dish_name = parts[0] if len(parts) == 2 else ' '.join(parts[:-1])

    try:
        price = float(parts[-1])  # 最后一个部分是金额
        if price <= 0:
            print("金额必须是正数!")
            continue

        # 添加到菜品列表
        dishes.append({'name': dish_name, 'price': price})
        print(f"✓ 已添加:{dish_name} - ¥{price:.2f}")

    except ValueError:
        print("金额必须是数字!")

if not dishes:
    print("没有输入菜品信息")
else:
    # 提取所有金额用于统计
    prices = [dish['price'] for dish in dishes]
    count = len(prices)
    total = sum(prices)
    average = total / count
    max_price = max(prices)
    min_price = min(prices)

    # 找到最贵和最便宜的菜品
    most_expensive = [dish for dish in dishes if dish['price'] == max_price]
    cheapest = [dish for dish in dishes if dish['price'] == min_price]

    # 按价格排序
    sorted_dishes_asc = sorted(dishes, key=lambda x: x['price'])  # 升序
    sorted_dishes_desc = sorted(dishes, key=lambda x: x['price'], reverse=True)  # 降序

    print("\n" + "=" * 60)
    print("🍴 菜品消费统计报告")
    print("=" * 60)

    print("\n【1. 所有菜品列表】")
    for i, dish in enumerate(dishes, 1):
        print(f"  {i:2d}. {dish['name']:15} ¥{dish['price']:>8.2f}")

    print("\n【2. 按价格排序】")
    print("→ 从便宜到贵:")
    for i, dish in enumerate(sorted_dishes_asc, 1):
        print(f"  {i:2d}. {dish['name']:15} ¥{dish['price']:>8.2f}")

    print("\n→ 从贵到便宜:")
    for i, dish in enumerate(sorted_dishes_desc, 1):
        print(f"  {i:2d}. {dish['name']:15} ¥{dish['price']:>8.2f}")

    print("\n【3. 消费统计】")
    print(f"菜品总数:{count} 道")
    print(f"消费总额:¥{total:.2f}")
    print(f"平均每道菜:¥{average:.2f}")

    print("\n【4. 最贵菜品】")
    for dish in most_expensive:
        print(f"  {dish['name']} - ¥{dish['price']:.2f}")

    print("\n【5. 最便宜菜品】")
    for dish in cheapest:
        print(f"  {dish['name']} - ¥{dish['price']:.2f}")

    print("\n【6. 价格区间】")
    print(f"最高:¥{max_price:.2f}")
    print(f"最低:¥{min_price:.2f}")
    print(f"价格范围:¥{max_price - min_price:.2f}")

    # 按价格区间分组
    if count > 1:
        sorted_prices = sorted(prices)
        if count % 2 == 1:
            median_price = sorted_prices[count // 2]
        else:
            median_price = (sorted_prices[count // 2 - 1] + sorted_prices[count // 2]) / 2

        print(f"\n【7. 价格分布】")
        print(f"中位数价格:¥{median_price:.2f}")

        # 按价格区间统计
        if max_price > 0:
            print("\n  价格区间统计:")
            ranges = [(0, 20), (20, 50), (50, 100), (100, float('inf'))]
            range_labels = ["0-20元", "20-50元", "50-100元", "100元以上"]

            for (low, high), label in zip(ranges, range_labels):
                if high == float('inf'):
                    in_range = [dish for dish in dishes if dish['price'] >= low]
                else:
                    in_range = [dish for dish in dishes if low <= dish['price'] < high]

                if in_range:
                    range_total = sum(dish['price'] for dish in in_range)
                    print(f"  {label:10}:{len(in_range):2d}道菜,总计¥{range_total:.2f}")

    print("=" * 60)

    # 交互式查询功能
    while True:
        print("\n【查询功能】")
        print("1. 查找菜品")
        print("2. 按价格范围筛选")
        print("3. 计算人均消费(输入人数)")
        print("4. 显示总计和最大最小")
        print("5. 退出")

        choice = input("请选择功能(1-5): ").strip()

        if choice == '5':
            print("感谢使用菜品消费统计系统!")
            break

        elif choice == '1':
            search = input("请输入菜品名关键词: ").strip()
            found = [dish for dish in dishes if search.lower() in dish['name'].lower()]
            if found:
                print(f"找到 {len(found)} 个菜品:")
                for dish in found:
                    print(f"  {dish['name']} - ¥{dish['price']:.2f}")
            else:
                print("未找到相关菜品")

        elif choice == '2':
            try:
                min_p = float(input("最低价格: ") or 0)
                max_p = float(input("最高价格: ") or float('inf'))
                filtered = [dish for dish in dishes if min_p <= dish['price'] <= max_p]
                if filtered:
                    print(f"在¥{min_p:.2f}到¥{max_p:.2f}范围内找到 {len(filtered)} 个菜品:")
                    for dish in filtered:
                        print(f"  {dish['name']} - ¥{dish['price']:.2f}")
                    subtotal = sum(dish['price'] for dish in filtered)
                    print(f"  小计:¥{subtotal:.2f}")
                else:
                    print("该价格范围内无菜品")
            except ValueError:
                print("请输入有效的价格")

        elif choice == '3':
            try:
                people = int(input("用餐人数: "))
                if people > 0:
                    per_person = total / people
                    print(f"\n用餐人数:{people}人")
                    print(f"消费总额:¥{total:.2f}")
                    print(f"人均消费:¥{per_person:.2f}")

                    # 推荐菜品搭配
                    if len(sorted_dishes_asc) >= 2:
                        print("\n推荐搭配:")
                        print(f"  实惠选择:{sorted_dishes_asc[0]['name']}(¥{sorted_dishes_asc[0]['price']:.2f}) + "
                              f"{sorted_dishes_asc[1]['name']}(¥{sorted_dishes_asc[1]['price']:.2f})")
                        print(f"    合计:¥{sorted_dishes_asc[0]['price'] + sorted_dishes_asc[1]['price']:.2f}")
                else:
                    print("人数必须大于0")
            except ValueError:
                print("请输入有效人数")

        elif choice == '4':
            print(f"\n【消费汇总】")
            print(f"菜品总数:{count}道")
            print(f"消费总额:¥{total:.2f}")
            print(f"平均价格:¥{average:.2f}")
            print(f"最贵菜品:{most_expensive[0]['name']} ¥{max_price:.2f}")
            print(f"最便宜菜品:{cheapest[0]['name']} ¥{min_price:.2f}")

        else:
            print("请输入1-5之间的选项")

image

posted @ 2025-12-14 14:19  风筝-  阅读(3)  评论(0)    收藏  举报