如何在Python中比较字典属性值并求和,选择最优配件?
武器与配件属性优化代码修正
原代码存在的问题
你的代码有多处错误,具体如下:
- 函数名为
damage,但内部又用damage作为变量名,导致命名冲突;且if damage = "Damage"使用赋值符号=,应该用比较符号==,但这行逻辑本身毫无意义,直接返回会让函数无法执行后续代码。 - 声明了大量未使用的全局变量(如
a1、br1等),完全没必要,还会增加代码冗余。 - 字典访问错误:Python字典是键值对结构,不能用下标(如
mle[2])访问,必须通过键名(如mle["Damage"])获取对应值。 - 打印语句错误:Python的打印函数是小写的
print(),不是大写的Print()。 - 无意义的
while循环:循环条件0==0永久为真,但内部直接break,完全可以删除这个循环结构。 - 字符串拼接错误:数字无法直接与字符串相加,需要先转为字符串类型,否则会触发类型错误。
- 逻辑局限性:只硬编码判断
mle["Damage"] == 73的情况,且仅打印结果,没有真正修改武器字典的属性,也未处理其他需要优化的属性。
正确实现思路与代码
核心思路:
- 定义需要优化的属性列表,区分不同属性的优劣判断逻辑(比如
Damage/Accuracy/Mobility是数值越高越好,Recoil是数值越低越好)。 - 对每个属性,比较两个配件的对应值,选择更优的数值加到武器字典的对应属性上。
- 避免使用不必要的全局变量,直接将字典作为参数传入函数更规范。
修正后的代码:
# 定义武器与配件字典 mle = {"Weapon": "fist", "Damage": 73, "Fire Rate": 80, "Range": 59, "Accuracy": 72, "Recoil": 79, "Mobility": 54, "Handling": 51} brassKnucles = {"Attachment": "brass", "Damage": 3, "Fire Rate": 0, "Range": 0, "Accuracy": 3, "Recoil": -2, "Mobility": 5, "Handling": 0} rings = {"Attachment": "rings", "Damage": 1, "Fire Rate": 0, "Range": 0, "Accuracy": 5, "Recoil": -6, "Mobility": 7, "Handling": 0} def optimize_weapon(weapon, attachment1, attachment2): # 定义需要优化的属性及优劣判断规则:键为属性名,值为判断函数(返回更优的配件属性值) stat_rules = { "Damage": lambda a, b: a if a > b else b, "Fire Rate": lambda a, b: a if a > b else b, "Range": lambda a, b: a if a > b else b, "Accuracy": lambda a, b: a if a > b else b, "Recoil": lambda a, b: a if a < b else b, # 后坐力越低越好 "Mobility": lambda a, b: a if a > b else b, "Handling": lambda a, b: a if a > b else b } # 遍历每个属性,选择最优配件数值加到武器上 for stat in stat_rules: # 获取两个配件的当前属性值 att1_val = attachment1[stat] att2_val = attachment2[stat] # 选择更优的属性值 best_val = stat_rules[stat](att1_val, att2_val) # 更新武器属性 weapon[stat] += best_val print(f"优化{stat}后:{weapon[stat]}(选择了{attachment1['Attachment'] if best_val == att1_val else attachment2['Attachment']}的属性)") return weapon # 执行优化 optimized_mle = optimize_weapon(mle, brassKnucles, rings) print("\n最终优化后的武器属性:") print(optimized_mle)
代码说明
- 使用
lambda函数定义每个属性的优劣判断逻辑,灵活适配不同属性的优化需求。 - 遍历所有属性,自动选择对应属性更优的配件数值,加到武器属性上。
- 打印每一步的优化结果,清晰展示选择的配件及属性变化。
- 函数参数传递字典,避免使用全局变量,代码更模块化、易维护。
内容的提问来源于stack exchange,提问作者idkwhatimdoing
相关产品推荐
相关产品推荐

