Python跨多嵌套字典匹配用户输入技能键 按规则递增对应条目值
技能模块功能实现方案
现有已完成代码
你目前已经定义了7项属性对应的初始技能字典,组装成嵌套结构的skilldict,同时完成了用户主修技能输入的初步采集流程,已写基础代码如下:
Strength = {"Acrobatics":5, "Crafting":5, "Axe":5, "Blunt Weapon":5, "Long Blade":5} Intelligence = {"Alchemy":5, "Conjuration":5, "Enchant":5, "Thievery":5} Willpower = {"Alteration":5, "Destruction":5, "Mysticism":5, "Restoration":5} Agility = {"Block":5, "Light Armor":5, "Marksman":5, "Sneak":5} Speed = {"Athletics":5, "Hand to Hand":5, "Short Blade":5, "Unarmored":5} Endurance = {"Heavy Armor":5, "Medium Armor":5, "Spear":5} Personality = {"Illusion":5, "Mercantile":5, "Speechcraft":5} # Skill dictionaries, will be printed to a seperate file after all things are done skilldict = {"Strength":Strength, "Intelligence":Intelligence, "Willpower":Willpower, "Agility":Agility, "Speed":Speed, "Endurance":Endurance, "Personality":Personality}
偏好属性加值逻辑优化(次要诉求)
你目前为两个偏好属性分别写了两段重复的双层循环,给对应属性下的所有技能加5,这部分可以简化为单循环遍历偏好属性列表,完全消除重复代码:
# 替代原有两段重复循环的优化版本 for fav_attr in usfavstat: # 直接校验偏好属性是否在技能映射字典中 if fav_attr in skilldict: # 遍历该属性下的所有技能,统一加5 for skill in skilldict[fav_attr]: skilldict[fav_attr][skill] += 5
主修技能匹配加值核心逻辑实现
先修正输入清洗的匹配隐患
当前的输入清洗逻辑存在一个容易导致匹配失败的细节:直接对整段输入执行replace(" ", ""),会把Short Blade这类本身带合法空格的技能名改成无空格的错误格式,和原字典中存储的键完全对不上。正确的清洗逻辑只需要去掉每个技能名前后用户误输的冗余空格,保留技能名本身的合法空格即可:
# 替换原有输入清洗逻辑,避免破坏合法技能名格式 raw_input = input("Enter major skills, seperated by a comma : ") # 按逗号拆分后,对每个条目做首尾去空格、首字母大写格式化 majorskills = [skill.strip().title() for skill in raw_input.split(",")]
跨嵌套字典匹配加值
清洗完成后,直接双层遍历skilldict的嵌套结构,匹配用户输入的主修技能名,匹配成功则给对应技能值加25:
# 遍历所有属性对应的技能子字典 for attr_name, skill_map in skilldict.items(): # 遍历当前属性下的每个技能 for skill_name, base_val in skill_map.items(): # 如果技能在用户输入的主修列表中 if skill_name in majorskills: skill_map[skill_name] = base_val + 25
按照测试场景,当用户输入Acrobatics, Short Blade, Block, Speechcraft, Alteration时,上述逻辑会自动定位这些技能所属的属性字典,将对应技能值从初始的5提升到30,完全符合预期效果。
可选扩展优化:如果后续技能字典规模持续扩大,可以提前构建一个"技能名-所属字典引用"的扁平映射表,跳过双层嵌套遍历的步骤,进一步提升匹配效率。
内容的提问来源于stack exchange,提问作者notguud
相关产品推荐
相关产品推荐

