我正在从游戏中创建一场短暂的战斗(为了好玩)。我有几个变量需要在整个序列中进行更改,例如m_hp(怪物健康)。下面是代码我(请原谅我,如果我格式不正确,这是使用本网站的我的第一次):Python:使用不同函数的变量而不重命名
def battle(p_lvl):
print("A goblin engages you in battle!")
p_hp = p_lvl * 25 + 25
p_dmg = p_lvl * 7 + 5
print("Player Stats (Level: " + str(p_lvl) + " Health: " + str(p_hp) + " ATK: " + str(p_dmg) + ")")
m_lvl = p_lvl - 1
m_hp = m_lvl * 20 + 15
m_dmg = m_lvl * 6 + 3
scr_dmg = m_hp/4
dus_eft = p_hp/5
print("Goblin Stats (Level: " + str(m_lvl) + " Health: " + str(m_hp) + " ATK: " + str(m_dmg) + ")")
act()
def act():
menu = 'Attack','Block','Use Item'
print("What will you do?")
print(menu)
action = input()
if action == ‘Attack':
m_hp = m_hp - p_dmg
print("You dealt " + str(p_dmg) + "damage to the goblin!")
p_hp = p_hp - m_dmg
print("The goblin struck back with " + str(m_dmg) + " damage!”)
act()
我得到的行为出现问题后()启动。如果我输入的输入()“攻击”,我得到这个错误:
UnboundLocalError: local variable 'm_hp' referenced before assignment
据我了解,这是因为我已经m_hp划归战(),但行为()不能达到它。我希望能够改变m_hp而不用在act()中写入它。我相信如果我这样做,那么每次执行act()时m_hp都会重置,并且m_hp不会丢失。我已经通过这里的问题进行了搜索,但我所看到的案例似乎并不奏效。另外,我承认编程是新手,所以我无法理解一些解决方案。
Tl; dr我正在寻找一个简单的解决方案,以便如何使用不同函数的变量而不必将它们放入函数中。
我了解错误,并且在创建act()后将act()添加到battle()中。我复制/粘贴你的代码,然后在main()中输入以查看它是否工作。这样做后,我收到一条消息,说“NameError:name'游戏'未定义”。据我所知,这意味着游戏不存在(?)另外,我使用的是Python 3.5.2,因此可能会导致问题。 –
我刚刚更新了代码,以便它可以用于python 3.5(我之前曾经写过它,前面是/ python 2.7)。也许值得尝试一下新的草案?从错误,它看起来像我或你在复制和粘贴时发生错误。我粘贴的新的希望是正确的。 (仅供参考,游戏是在读取“class Game(object):”的行上定义的,并且仅在定义它之后才在一个地方使用。) –
我再次尝试它,并且此代码运行时带有一个或两个错误。 (例如,你不小心打印了生命值,但没关系。)感谢您的帮助!我目前使用Codecademy来学习Python,但我还没有学习Python的类,所以我不能完全理解代码。一旦我这样做,我会(希望)能够做出调整并让它滚动! –