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

如何用Python编写递归函数实现无限层级物品清单打印?

问题描述

我正在尝试编写一个简短的Python 3函数,该函数接收两类物品并输出一份清单。一类是普通对象(称为item类),另一类是可容纳其他对象的容器(称为container类)。需要打印清单中的所有物品(包括容器内的物品),预期输出格式如下:

You are carrying:
an apple
a basket, containing:
 an orange
 a glass bottle, containing:
  a quantity of water

目前通过手动嵌套循环实现,代码如下:

if(object.type=='container'):
 for object1 in object.inventory:
  print(object.name)
  if(object1.type=='container'):
   for object2 in object1:
    print(object2.name)

这种方式扩展性差,无法支持无限层级嵌套,需要一个简单易懂的解决方案。

解决方案

针对嵌套容器的无限层级遍历,最适合的方法是递归——让函数自己调用自己处理每一层的容器内容,同时用缩进级别控制输出格式,非常适合新手理解和实现。

步骤1:定义物品类结构

先明确Item和Container的基础结构(符合你描述的逻辑),方便后续测试:

class Item:
    def __init__(self, name):
        self.name = name
        self.type = 'item'

class Container(Item):
    def __init__(self, name):
        super().__init__(name)
        self.type = 'container'
        self.inventory = []  # 存储容器内的物品

步骤2:编写递归打印函数

函数接收物品列表和当前缩进级别(默认0,控制输出空格数),逻辑简单直接:

def print_inventory(items, indent=0):
    # 仅最外层调用时打印开头提示语
    if indent == 0:
        print("You are carrying:")
    # 遍历当前层级的所有物品
    for item in items:
        prefix = ' ' * indent
        if item.type == 'container':
            # 容器直接打印带提示的行
            print(f"{prefix}{item.name}, containing:")
            # 递归处理容器内的物品,缩进+1
            print_inventory(item.inventory, indent + 1)
        else:
            # 普通物品直接打印
            print(f"{prefix}{item.name}")

步骤3:测试验证

创建物品实例并调用函数,就能得到你想要的输出:

# 创建普通物品
apple = Item("an apple")
orange = Item("an orange")
water = Item("a quantity of water")
# 创建嵌套容器
glass_bottle = Container("a glass bottle")
glass_bottle.inventory.append(water)
basket = Container("a basket")
basket.inventory.append(orange)
basket.inventory.append(glass_bottle)
# 整理成携带的物品列表
carrying = [apple, basket]
# 打印清单
print_inventory(carrying)

运行后输出结果与预期完全一致:

You are carrying:
an apple
a basket, containing:
 an orange
 a glass bottle, containing:
  a quantity of water

方案优势

  • 递归天然支持无限层级嵌套,不管容器套多少层都能自动遍历
  • 缩进参数控制输出格式,层级清晰直观
  • 代码逻辑简单,新手容易修改和扩展(比如调整缩进空格数、修改提示语等)

内容的提问来源于stack exchange,提问作者Audrey Sims-Hunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:11:02