私はゲームから短いバトルを作ることに取り組んでいます。私は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()
私は行為()を開始した後に問題を取得します。私は、入力()のための「攻撃」を入力した場合、私はこのエラーを取得:私はm_hp戦い()下に置かれているが、行為が()、それに到達することはできませんので、私の理解へ
UnboundLocalError: local variable 'm_hp' referenced before assignment
を、これがあります。私はact()に書き込まずにm_hpを変更できるようにしたい。私はそうすれば、m_hpはact()が開始するたびにリセットされ、m_hpは落とすことができません。私はここで質問を探しましたが、私が見たケースはうまくいかないようです。また、私は認知されていることは明らかですが、私はいくつかの解決策を理解できませんでした。
Tl; dr私は、関数に入れないで別の関数の変数を使用する方法について、簡単な解決策を探しています。
私はエラーを理解し、act()を作成した後でbattle()にact()を追加しました。私はあなたのコードをコピー/ペーストし、main()をタイプしてそれがうまくいったかどうかを調べました。その後、「NameError:name 'Game'が定義されていません」というメッセージが表示されます。私が理解していることから、これはGameが存在しないことを意味します(?)また、Python 3.5.2を使用しているため、問題が発生する可能性があります。 –
Python 3.5(以前はPython 2.7と書かれていました)で動作するようにコードを更新しました。新しいドラフトに試してみる価値はあるのだろうか?エラーから、私はコピーして貼り付けに間違いをしたかのように見えます。私が貼り付けた新しいものはうまくいけば正しかった。 (FYI、Gameは "class Game(object):"と書かれた行に定義され、定義された後には1つの場所でしか使用されません) –
もう一度やってみましたが、今回は2つ。 (例:間違ってATKとしてヒットポイントを印刷しましたが、それでも問題ありません。)助けてくれてありがとう!私は現在Pythonを学ぶためにCodecademyを使っていますが、まだPythonのクラスを学んでいないので、コードを完全に理解することはできません。私がしたら、私は(うまくいけば)調整をして、それを回転させることができるでしょう! –