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

Python编写RPG角色卡加点系统时技能点数耗尽无法结束循环求助

问题根因
  • 主循环判断条件仅校验end == 0,未关联剩余技能点数lvlpts,就算点数耗尽也会进入下一轮循环
  • 所有技能分支的点数充足判断写了无用恒真条件or(amountpt == amountpt),导致点数不足时也会执行扣点逻辑,甚至把lvlpts扣为负数
  • 编号5对应耐力技能的逻辑顺序和其他分支不一致,先做点数校验再做扣点,其他分支先扣点再校验,逻辑混乱
  • 各个分支中lvlpts == 0时触发的break只能跳出当前层级代码块,部分场景下无法终止最外层的主循环
修复方案
  1. 修改主循环条件,直接关联剩余点数,点数耗尽自动终止循环,无需额外判断
  2. 删除所有分支中的无用恒真判断,保留有效的点数充足校验
  3. 统一所有技能分支的逻辑顺序:先校验输入点数是否充足,不足则循环让用户重新输入,确认充足后再执行加技能、扣点数操作
  4. 优化退出判断逻辑,和主循环的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:09