如何根据用户输入选择对应列表存储值并优化多模型参数逻辑?
如何根据用户输入的模型名称获取对应参数值?
你当前的问题在于,把用户输入的字符串变量model当成了列表来索引,导致取出的是输入字符串的第N个字符(比如输入"Warrior"时,model[0]取到的是字符'W'),而非对应模型的参数列表。解决这个问题的最佳方式是用字典建立模型名称与参数集合的映射,既能避免冗余,又能快速匹配参数。
方案1:用字典映射模型名到参数列表
这种方式适合参数顺序固定的场景,代码简洁:
model = input("Attacking Model:") unit = float(input(f"How many {model}'s:")) # 定义模型参数字典,键为模型名称,值为对应参数列表 model_params = { "Warrior": [3, 4/6, 5, 2, 1], "Ravener": [5, 4/6, 5, 2, 1] } # 校验输入的模型是否存在 if model in model_params: params = model_params[model] bal_Shot = unit * params[0] bal_Skill = params[1] bal_Str = params[2] bal_AP = params[3] bal_Dam = params[4] print(f"计算后的射击值:{bal_Shot}") else: print(f"未找到模型 {model} 的参数!")
方案2:用字典映射模型名到参数字典(可读性更强)
如果参数较多,用字典存储参数可以避免索引混淆,代码可读性更高:
model = input("Attacking Model:") unit = float(input(f"How many {model}'s:")) model_params = { "Warrior": { "shot_multiplier": 3, "skill": 4/6, "strength": 5, "ap": 2, "damage": 1 }, "Ravener": { "shot_multiplier": 5, "skill": 4/6, "strength": 5, "ap": 2, "damage": 1 } } if model in model_params: params = model_params[model] bal_Shot = unit * params["shot_multiplier"] bal_Skill = params["skill"] bal_Str = params["strength"] bal_AP = params["ap"] bal_Dam = params["damage"] print(f"计算后的射击值:{bal_Shot}") else: print(f"未找到模型 {model} 的参数!")
额外优化:处理输入大小写问题
如果希望忽略用户输入的大小写(比如输入"warrior"也能匹配到"Warrior"),可以将输入和字典键统一转为小写:
model_input = input("Attacking Model:").strip().lower() unit = float(input(f"How many {model_input}'s:")) model_params = { "warrior": [3, 4/6, 5, 2, 1], "ravener": [5, 4/6, 5, 2, 1] } if model_input in model_params: params = model_params[model_input] # 后续参数赋值逻辑不变
这种字典方案的优势在于,新增模型时只需在字典中添加一组键值对,无需修改大量分支判断代码,从根本上解决了冗余问题。
内容的提问来源于stack exchange,提问作者Embie
相关产品推荐
相关产品推荐

