Python字典实现游戏背包功能代码求评审:写法是否合理有优化空间?
代码评审&优化建议
你的代码已经完整实现了背包管理的核心功能,逻辑是通顺的,以下是可以优化的点和Python通用最佳实践:
1. displayInventory 函数优化
- 总物品数不需要手动循环累加,可以直接用
sum()内置函数对字典的值求和,代码更简洁:item_total = sum(inventory.values()) - 字符串输出推荐用f-string替代拼接和旧式
%格式化,可读性更高,也不需要手动转类型:
原来的print(str(k) + ': ' + str(v))可以改成print(f"{k}: {v}"),总计数的打印可以改成print(f"Total number of items: {item_total}") - 可以给参数加类型提示,方便后续维护和类型检查,函数定义可以写成
def displayInventory(inventory: dict[str, int]) -> None:
2. addToInventory 函数优化
- 你当前代码里的
if x in inventory判断是完全冗余的:inventory.setdefault(x, 0)已经保证了键x一定存在于字典中,直接加1即可,可以删掉这个判断 - 功能函数尽量不要内置打印逻辑,建议把修改后的背包字典返回,调用方按需打印,提升函数复用性:比如后续你要把背包数据存到文件、传给其他接口的时候,不需要修改这个函数的代码
- 如果允许用标准库的话,用
collections.Counter可以更简洁地实现批量新增战利品的逻辑,不需要手动循环处理每个元素
3. 通用编码规范优化
- 所有函数定义尽量放在业务执行代码的前面,不要把
items、dragonLoot这类变量插在两个函数定义中间,代码结构更清晰 - 命名遵循Python社区通用的PEP8规范:函数名、普通变量用下划线分隔的小写形式,比如
display_inventory、add_to_inventory、dragon_loot,方便其他开发者阅读
优化后代码示例
from collections import Counter from typing import Dict, List, None def display_inventory(inventory: Dict[str, int]) -> None: print('Inventory: ') item_total = sum(inventory.values()) for item_name, count in inventory.items(): print(f"{item_name}: {count}") print(f"Total number of items: {item_total}") def add_to_inventory(inventory: Dict[str, int], added_items: List[str]) -> Dict[str, int]: # 统计战利品数量,合并到原有背包 loot_counter = Counter(added_items) for item_name, add_count in loot_counter.items(): inventory[item_name] = inventory.get(item_name, 0) + add_count return inventory if __name__ == "__main__": items = { 'arrow': 12, 'gold coin': 42, 'rope': 1, 'torch': 6, 'dagger': 1 } display_inventory(items) dragon_loot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'] items = add_to_inventory(items, dragon_loot) print(items)
内容的提问来源于stack exchange,提问作者pevers
相关产品推荐
相关产品推荐

