私は楽しいために小さなテキストゲームを作っています。私はfunctionaと呼ばれる関数ファイルにある関数を使いたいと思います。割り当て前に参照されるバインドされていないエラー、ローカル変数
問題になっている機能、attack()
、エラーで動作し、プログラムがクラッシュしていませんが:
Traceback (most recent call last):
File "C:\Users\seanm\Desktop\Programming\The mists of Alandria\Mists_of_alandria.py", line 22, in <module>
functionala2.attack()
File "C:\Users\seanm\Desktop\Programming\The mists of Alandria\functionala2.py", line 27, in attack
variablestamina += 2
UnboundLocalError: local variable 'variablestamina' referenced before assignment
functionalaファイルの新しい改良バージョンが問題を引き起こしているように見えるものです:
variablestamina = 20
variablehealth = 40
variablemonsterhealth = 30
variableattacktype1 = ("Lightattack")
variableattacktype2 = ("Mediumattack")
variableattacktype3 = ("Heavyattack")
def attack():
variableattackquery = input("You can execute three types of attacks. Lightattack does 2 damage and takes no stamina. Mediumattack does 4 damage and takes 2 stamina. Heavyattack does 7 damage and takes 5 stamina. You can only do one per turn: ")
if variableattackquery == variableattacktype1:
variablemonsterhealth -= 2
variablestamina -= 2
if variableattackquery == variableattacktype2:
variablemonsterhealth -= 4
variablestamina -= 4
if variableattackquery == variableattacktype3:
variablemonsterhealth -= 7
variablestamina -= 7
variablestamina += 2
variablestamina = min(20, variablestamina)
print ("The "+monster+" has "+str(variablemonsterhealth)+" health left")
print ("You have "+str(variablestamina)+" stamina left")
monsterattack = random.randrange(4,6)
variablehealth -= monsterattack
print ("The "+monster+" attacks you for "+str(monsterattack))
print ("You have "+str(variablehealth)+" health left")
print()
この質問に示されているインデントは、コードと同じですか?あなたの最初のスニペットは、最初の行のインデントが過度で、1つのprintステートメントではあまりにも少なすぎます。 2番目のスニペットはすべての行を超過しています。インデントはPythonでは重要です! –
2つのファイルがあり、それぞれのファイルが別のファイルをインポートしますか?これはPythonでは厳密に禁止されていませんが、混乱しているエラーメッセージや驚くべき動作につながることがあります。循環インポートが発生しないようにコードを再設計してください。 – Kevin
@Rory Daultonいいえ、私のインデントはこれで間違っていて、ファイル内で同じではありません。申し訳ありませんが、元の形式でコードをインポートする方法を見つけることができませんでした –