Python编写RPG角色卡加点系统时技能点数耗尽无法结束循环求助
问题根因
- 主循环判断条件仅校验
end == 0,未关联剩余技能点数lvlpts,就算点数耗尽也会进入下一轮循环 - 所有技能分支的点数充足判断写了无用恒真条件
or(amountpt == amountpt),导致点数不足时也会执行扣点逻辑,甚至把lvlpts扣为负数 - 编号5对应耐力技能的逻辑顺序和其他分支不一致,先做点数校验再做扣点,其他分支先扣点再校验,逻辑混乱
- 各个分支中
lvlpts == 0时触发的break只能跳出当前层级代码块,部分场景下无法终止最外层的主循环
修复方案
- 修改主循环条件,直接关联剩余点数,点数耗尽自动终止循环,无需额外判断
- 删除所有分支中的无用恒真判断,保留有效的点数充足校验
- 统一所有技能分支的逻辑顺序:先校验输入点数是否充足,不足则循环让用户重新输入,确认充足后再执行加技能、扣点数操作
- 优化退出判断逻辑,和主循环的
end变量关联,逻辑更统一
修正后完整代码
# rpg system to sort out character sheets # 初始技能点数 lvlpts = 10 # 技能初始等级 skills = { "ranged weapons handling" : 0, "meele weapons handling": 0, "speed": 0, "strength": 0, "endurance": 0, } print("升级模拟器,当前暂无额外功能") print(" ") end = 0 print("以下是你可升级的技能,当前剩余技能点:", lvlpts) # 主升级循环,剩余点数为0时自动终止 while end == 0 and lvlpts > 0: print(" ") print("你想升级哪个技能?") print(skills) print(" ") print("升级远程武器掌握输入1,升级近战武器掌握输入2,以此类推共5个分类,输入end终止程序") print("") tolvl = input("请选择要升级的技能:") if tolvl == "1": amountpt = int(input("请输入要分配的点数:")) # 校验点数是否足够,不足则重新输入 while lvlpts < amountpt: print("剩余点数不足,请重新输入") amountpt = int(input("请输入要分配的点数:")) # 点数足够时执行升级操作 skills["ranged weapons handling"] += amountpt lvlpts -= amountpt print(" ") print("远程武器掌握等级:", skills["ranged weapons handling"]) print("剩余技能点:", lvlpts) elif tolvl == "2": amountpt = int(input("请输入要分配的点数:")) while lvlpts < amountpt: print("剩余点数不足,请重新输入") amountpt = int(input("请输入要分配的点数:")) skills["meele weapons handling"] += amountpt lvlpts -= amountpt print(" ") print("近战武器掌握等级:", skills["meele weapons handling"]) print("剩余技能点:", lvlpts) elif tolvl == "3": amountpt = int(input("请输入要分配的点数:")) while lvlpts < amountpt: print("剩余点数不足,请重新输入") amountpt = int(input("请输入要分配的点数:")) skills["speed"] += amountpt lvlpts -= amountpt print(" ") print("速度等级:", skills["speed"]) print("剩余技能点:", lvlpts) elif tolvl == "4": amountpt = int(input("请输入要分配的点数:")) while lvlpts < amountpt: print("剩余点数不足,请重新输入") amountpt = int(input("请输入要分配的点数:")) skills["strength"] += amountpt lvlpts -= amountpt print(" ") print("力量等级:", skills["strength"]) print("剩余技能点:", lvlpts) elif tolvl == "5": amountpt = int(input("请输入要分配的点数:")) while lvlpts < amountpt: print("剩余点数不足,请重新输入") amountpt = int(input("请输入要分配的点数:")) skills["endurance"] += amountpt lvlpts -= amountpt print(" ") print("耐力等级:", skills["endurance"]) print("剩余技能点:", lvlpts) elif tolvl.lower() == "end": end = 1 print("程序已正常结束")
内容的提问来源于stack exchange,提问作者Oliauf
相关产品推荐
相关产品推荐

