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
相关产品推荐
相关产品推荐

