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

如何从**kwargs中打印值?Python文本游戏开发疑问

解决文本游戏中物品打印格式问题

先梳理你遇到的两个核心问题:

  1. 直接打印self.items.values()会输出dict_values(['gun', 'magazine'])这类带类型标识的内容——这是因为values()返回的是dict_values迭代对象,并非友好的展示格式。
  2. 用self.join(items_list)会报错——join是字符串的内置方法,不是你的Room类的方法,不能通过self调用。

修正方案

方法1:生成逗号分隔的自然文本(推荐)

修改describe_room方法,用字符串的join方法把物品值拼接成易读的描述:

# 先初始化inventory变量,否则会触发NameError
inventory = []

class Room:
    def __init__(self, desc, *doors, **items):
        self.desc = desc
        self.doors = doors
        self.items = items

    def describe_room(self):
        print(f"\ndescription = {self.desc}")
        print(f"\ndoors = {self.doors}")
        # 用逗号连接所有物品值,生成友好的展示文本
        items_display = ', '.join(self.items.values())
        print(f"\nThe room contains: {items_display}")
        for item in self.items.values():
            inventory.append(item)
        print(f"\nInventory: {inventory}")

Living_Room = Room('it stinks in here', 'door to bathroom', 'door to fireplace', item_1='gun', item_2='magazine')
Living_Room.describe_room()

运行后输出:

description = it stinks in here

doors = ('door to bathroom', 'door to fireplace')

The room contains: gun, magazine

Inventory: ['gun', 'magazine']

方法2:转成列表格式(保留括号样式)

如果希望物品显示成['gun', 'magazine']这种列表形式,直接把dict_values转成列表即可:

print(f"\nThe room contains: {list(self.items.values())}")

对应输出:

The room contains: ['gun', 'magazine']

额外注意事项

  • 你之前的代码未初始化inventory变量,调用时会报错,务必在类定义外先声明inventory = []。
  • 若后续物品值可能不是字符串(比如数字、自定义物品对象),使用join前要先把每个元素转成字符串:', '.join(str(item) for item in self.items.values())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:12