如何从**kwargs中打印值?Python文本游戏开发疑问
解决文本游戏中物品打印格式问题
先梳理你遇到的两个核心问题:
- 直接打印
self.items.values()会输出dict_values(['gun', 'magazine'])这类带类型标识的内容——这是因为values()返回的是dict_values迭代对象,并非友好的展示格式。 - 用
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
相关产品推荐
相关产品推荐

