[はじめに、わかりやすく私のコードについては申し訳なく思っています。私は昨年Pythonを勉強し始めましたが、教師はほとんど理解できませんでした。]Python 3.5の複数のスクリプト間でPythonで 'global'を使用する
私はPython 3.5.1でテキストベースのゲームを作成しようとしています。メインゲーム、1は在庫システム、もう1つは他の機能、最後はキャラクター作成です。
グローバル変数と関数をどのように使用するのかと疑問に思っていましたが、グローバル変数は問題を解決するための悪い方法と見なされていましたが、私の検索に適した代替手段は見つかりませんでした。 How to make a save/load game for a text based python rpg?では、globalを使ってgame_stateを定義していますが、他には何もありませんが、同じコードを再利用しやすくするために関数で定義された数十の変数があります。例:
def expadd(amount):
global level, totalxp, exp, expbound, p1, p2, p3, p4, p5
print("\nYou gained",str(amount),"exp!")
exp = exp + amount
totalxp = exp
while exp >= expbound:
addpoints()
charchange()
thingymjig()
expbound = int(p4/p5 + 20)
exp = exp - expbound
level += 1
time.sleep(1)
print("\nLevel up! You are now level",str(level)+"!")
time.sleep(1)
expbound = int(p4/p5 + 20)
nextlevel = expbound - exp
print("\nYou are",str(nextlevel),"exp away from the next level!")
これは機能についての良い方法ですか?私がここで持っているように、誰も実際には非常に多くのグローバルを使用していない他の場所から見たものから、プレイヤーがレベルアップしても、いつでもこのコードをすべて入力しなければならないとは思っていませんでした。 (これらはプレイヤーレベルとして再定義することができますので、P1-5の変数があまりにも彼らは、この関数にする必要があり、別の関数から来たの?)このセクションでは
def addpoints():
global charpoints
charpoints = charpoints + int(level * 2)- int(level/2) - 1
の後に追加され、charpoints(文字ポイント)プレーヤーレベルが上がり、必要なときにすべてのコードを入力するのではなく、使いやすさが求められます。私はコードの中で何度もこの種の関数を使用していますが、これは間違っていますか?さらに、複数のスクリプトにまたがって多くの関数やグローバル変数を使用するよりも、読みやすいコードを作成する簡単な方法がありますか?それは別のスクリプト内の関数からであるとして、それはグローバル化と私は考えてどのようにメインファイルにインポートですが、私は現在、プレイヤーの入力性別NameErrorを与えられています
が適切である:
from GAMEFUNCS import gender, charname, charpoints, charstrength, chardefence, charspeed
私はそれをメインファイルにインポートする必要がありますので、保存するように設定することができます。また、次のコード(およびインポートされた関数)でグローバル化されていても、エラーは発生します。
def savewrite():
global qr, check, gender, charname, title, money, exp, totalxp, level
global health, hp, lives, charpoints, charstrength, chardefence
global charspeed, charintel
with open("save.csv",'w',newline='')as s:
csv_s = csv.writer(s)
csv_s.writerow(["Quickrun"]+[qr])
csv_s.writerow(["Checkpoint"]+[check])
csv_s.writerow(["Gender"]+[gender])
完全なスタックトレースを追加できますか? – syntonym