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

如何在Python中比较字典属性值并求和,选择最优配件?

武器与配件属性优化代码修正

原代码存在的问题

你的代码有多处错误,具体如下:

  • 函数名为damage,但内部又用damage作为变量名,导致命名冲突;且if damage = "Damage"使用赋值符号=,应该用比较符号==,但这行逻辑本身毫无意义,直接返回会让函数无法执行后续代码。
  • 声明了大量未使用的全局变量(如a1、br1等),完全没必要,还会增加代码冗余。
  • 字典访问错误:Python字典是键值对结构,不能用下标(如mle[2])访问,必须通过键名(如mle["Damage"])获取对应值。
  • 打印语句错误:Python的打印函数是小写的print(),不是大写的Print()。
  • 无意义的while循环:循环条件0==0永久为真,但内部直接break,完全可以删除这个循环结构。
  • 字符串拼接错误:数字无法直接与字符串相加,需要先转为字符串类型,否则会触发类型错误。
  • 逻辑局限性:只硬编码判断mle["Damage"] == 73的情况,且仅打印结果,没有真正修改武器字典的属性,也未处理其他需要优化的属性。

正确实现思路与代码

核心思路:

  1. 定义需要优化的属性列表,区分不同属性的优劣判断逻辑(比如Damage/Accuracy/Mobility是数值越高越好,Recoil是数值越低越好)。
  2. 对每个属性,比较两个配件的对应值,选择更优的数值加到武器字典的对应属性上。
  3. 避免使用不必要的全局变量,直接将字典作为参数传入函数更规范。

修正后的代码:

# 定义武器与配件字典
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:22