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

求助:用递归与循环实现水果仓储总吨数统计的问题

嵌套仓库水果总存储量统计问题解决方案

问题背景

需要编写函数统计Fruits Storage公司所有仓库(含各级分支)的水果总存储吨数,给定的仓库字典存在多层嵌套结构,既有直接存储水果列表的仓库,也包含嵌套分支的仓库。示例结构如下(已修正原代码的语法错误):

warehouses = { 
    "Warehouse Lisboa": [
        { "name": "apples", "tons": 4},
        { "name": "oranges", "tons": 10},
        { "name": "lemons", "tons": 50}
    ], 
    "Warehouse Cascais": { 
            "Branch 1": [
                { "name": "apples", "tons": 10},
                { "name": "oranges", "tons": 24}
            ],
            "Branch 2": [
                { "name": "apples", "tons": 16},
                { "name": "oranges", "tons": 8}
            ]
    }, 
    "Warehouse Oeiras": { 
            "Branch 1": { 
                "Sub Branch 1":{
                    "Sub sub Branch 1": [
                        { "name": "lemons", "tons": 10}       
                    ]
                } 
            }
    }
}

原代码问题分析

提供的代码存在以下关键错误:

  • 当遇到list类型的值时,错误尝试直接获取warehouses["tons"],但list中的每个元素才是包含tons键的水果字典,需要遍历列表逐个累加
  • 递归调用时未将返回的子分支吨数累加到总吨数中,导致分支数据被完全忽略
  • 使用type(...) == list判断类型不够灵活,推荐使用isinstance()以兼容继承场景

修正后的代码

def stock_fruits(warehouses):
    total_tons = 0
    # 遍历当前层级的所有仓库/分支内容
    for value in warehouses.values():
        if isinstance(value, list):
            # 遍历水果列表,累加每个水果的吨数
            for fruit in value:
                total_tons += fruit["tons"]
        elif isinstance(value, dict):
            # 递归处理嵌套分支,累加子分支的总吨数
            total_tons += stock_fruits(value)
    return total_tons

代码逻辑说明

  1. 初始化total_tons变量,用于存储当前层级及所有子层级的总吨数
  2. 遍历当前字典的所有值(无需关注键名,只需处理存储内容)
  3. 若值为list,说明这是具体的水果库存列表,遍历每个水果字典提取tons值并累加
  4. 若值为dict,说明这是嵌套的分支结构,递归调用函数处理该分支,并将返回的子分支总吨数累加到total_tons
  5. 最终返回统计完成的总吨数

测试验证:调用stock_fruits(warehouses)会得到结果132,与手动计算的4+10+50+10+24+16+8+10一致。

内容的提问来源于stack exchange,提问作者premier401

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:40:41