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

Python文字类RPG经验值获取与升级系统实现及报错解决

问题修复说明

你代码的核心问题点如下:

  • 全局作用域下写global关键字无效,global仅用于函数内部声明要修改的全局变量。你在lvlup函数里修改playerlvl、xpnext时没有提前声明为全局变量,会触发赋值异常
  • 递归调用lvlup()时没有传入必填的xpgained参数,这是你报「缺少位置参数」错误的直接原因
  • 升级逻辑里playerlvl + 1没有赋值给变量,等级不会实际增长,正确写法是playerlvl += 1
  • 升级后没有重新计算下一级所需的经验值xpnext,升级后经验阈值不会更新
  • 连续升级的递归逻辑有冗余,用循环处理更简洁不容易出错

修复后可运行代码

# 全局玩家属性,开头不需要加global
playername = "Name Jeff 21 Bruh"
playerlvl = 0
xpcurrent = 0
xpnext = int(((playerlvl * 4) / 3) + 4)

def show_stats():
    print("*" * 20, "\n")
    print(playername, "the Adventurer")
    print("Lvl", playerlvl)
    print("EXP =", xpcurrent, '/', xpnext)
    print("-_" * 16 + '\n')

def add_exp(xpgained):
    # 声明要修改的全局变量
    global xpcurrent, playerlvl, xpnext
    print("~ ~", playername, "gained", xpgained, "Exp! ~ ~")
    xpcurrent += xpgained
    # 循环处理连续升级
    while xpcurrent >= xpnext:
        playerlvl += 1
        xpcurrent -= xpnext
        # 重新计算下一级经验阈值
        xpnext = int(((playerlvl * 4) / 3) + 4)
        print("~ ~", playername, "is Lvl", playerlvl, "! ~ ~")
    show_stats()

def game_main():
    print("*" * 50)
    print("This is where the game begins.")
    print("The player after lines of text can enter commands.\n"
          "use this to enter commands to test them.")
    print("*" * 50, "\n")

    def testexp():
        addexp = int(input("type the integer for how much exp "
                           "that you would like to add\n"))
        add_exp(addexp)
    # 测试8次加经验
    for _ in range(8):
        testexp()

game_main()

额外优化建议

后续游戏功能变多后,建议用类封装玩家的所有属性和方法,比全局变量更容易维护,修改属性不需要反复声明global,也不容易出现变量污染问题。

内容的提问来源于stack exchange,提问作者Σamuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:00:04