我正在從遊戲中創建一場短暫的戰鬥(爲了好玩)。我有幾個變量需要在整個序列中進行更改,例如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的類,所以我不能完全理解代碼。一旦我這樣做,我會(希望)能夠做出調整並讓它滾動! –