1

Ok!基本的に、ある関数で宣言されている変数があり、その変数を別の関数で使用したいと思います。パラメータを渡したくないのは、これを行うためのより簡単な方法があると思うからです。これは私のコードです:

#!/usr/bin/python

#import os
import time
print ("Hello and welcome to Pygame!")
time.sleep(1)
print ("Would you like to load? (\"Y/N\")")

def LON():
    loadOrNew = raw_input()

    if loadOrNew == "N":
        hp = 100
        strhp = str(hp)
        lvl = 1
        strlvl = str(lvl)
        atk = 5
        stratk = str(atk)
        defn = 2
        strdefn = str(defn)
        fout = open("pygame.dat", "w")
        fout.write (strhp) 
        fout.write("\n")
        fout.write(strlvl)
        fout.write("\n")
        fout.write(stratk)
        fout.write("\n")
        fout.write(strdefn)
        fout.close()
        FIRSTPLAY()
        return

    if loadOrNew == "Y":
        fin = open("pygame.dat", "r")
        hpstr = fin.readline()
        lvlstr = fin.readline()
        atkstr = fin.readline()
        defstr = fin.readline()
        hp = int(float(hpstr))
        lvl = int(float(lvlstr))
        atk = int(float(atkstr))
        defn = int(float(defnstr))
        fin.close()
        return

    if loadOrNew != "Y" and loadOrNew != "N":
        print("Im sorry, what?")
        LON()
        return

    return

def SAVE():
    fout = open("pygame.dat", "w")
    fout.write(hp)
    fout.write(lvl)
    fout.write(atk)
    fout.close(defn)
    return


def FIRSTPLAY():
    print("man/woman?")
    gender = raw_input()
    if gender != "man" and gender != "woman":
        print("Not valid gender.")
        FIRSTPLAY()

    print("KING - ")    
    print(" Young " + gender + ", you are herby my knight!")
    time.sleep(1)
    print(" My daughter, princess PYTHON, has been captured!")
    time.sleep(1)
    print(" You are to find her, and relieve this world of her captor!")
    time.sleep(1)
    print(" Some say this evil man's name is GAMEMAKER, but we really don't know.")
    time.sleep(1)
    print(" What do you think it is?")
    captor = raw_input()
    time.sleep(1)
    print(" So you think it is " + captor + "?")
    time.sleep(1)
    print("     Very well, find " + captor + " ASAP!")
    PLAY()
    return

def PLAY():
    print hp
    print lvl
    print atk
    print defn
    greenSlime(hp, lvl, atk, defn)
    return

def greenSlime(php, plvl, patk, pdefn):
    MHP = 10
    MLVL = 1
    MATK = 2
    MDEF = 2
    print "Green Slime - "
    print " HP: 10"
    print " LVL: 1"
    print " ATK: 2"
    print " DEF: 2"
    print "ATK OR DEF?"

LON()

LON関数で宣言されたhp、lvl、atk、およびdefn変数をPLAY関数で使用したいと思います。パラメータを渡すよりも簡単な方法があると確信しています。

4

3 に答える 3

1

内部では、次のステートメントLON()を使用できます。global

def LON():
    global hp, lvl, atk, defn

次に、内部のこれらの変数に割り当てると、LON()グローバル変数が作成されます。グローバル変数が作成されると、他の場所でそれらを使用できます(globalステートメントは必要ありません)。グローバル変数に新しい値を割り当てたい場合は、globalその関数内に対応するステートメントが必要になることに注意してください。

于 2012-04-21T03:43:10.147 に答える
1

グローバル内で変数を宣言するだけでは機能しません。globalキーワードは、値を割り当てるときに、何かをローカルとして扱わないように(同じ名前のグローバル変数をオーバーライドするように)インタプリタに要求することです。あなたがする必要があるのは、それを共有することになっている関数の上のスコープで変数を定義することです。読み取り専用アクセスの場合、関数内で変数グローバルを宣言する必要はないことに注意してください。インタプリタがローカルスコープで変数を見つけられない場合、インタプリタは自動的に外部スコープで変数を探します。ただし、代入ステートメントの場合は、新しいローカル変数が作成されます。

だからあなたがしたいのは:

hp = None
lvl = None
atk = None
defn = None

def LON():
    global hp, lvl, atk, defn
    # rest of LON

# rest of the functions

ただし、グローバルはプログラミングの慣例としては不適切であり、パラメーターを渡すことが正しい方法であることを警告する必要があります。

于 2012-04-21T04:21:29.323 に答える
0

あなたがする必要があるのは、関数をpythonクラスに移動することです。そうすれば、クラス内のすべての関数が、変数をグローバルにする必要なしに変数にアクセスできます。

おそらく、次のようなコードを構成します。

#!/usr/bin/python

#import os
import time
print ("Hello and welcome to Pygame!")
time.sleep(1)
print ("Would you like to load? (\"Y/N\")")

class Game:

  def InitialiseNewPlayer(self):
    self.hp = 100
    self.lvl = 1
    self.atk = 5
    self.defn = 2

  def SavePlayer(self):
    fout = open("pygame.dat", "w")
    fout.write ( str(self.hp) ) 
    fout.write("\n")
    fout.write(str(self.lvl) )
    fout.write("\n")
    fout.write(str(self.atk) )
    fout.write("\n")
    fout.write(str(self.defn) )
    fout.close()

  def LoadPlayer(self):
     fin = open("pygame.dat", "r")
     self.hp = int(float(fin.readline()))
     self.lvl = int(float(fin.readline()))
     self.atk = int(float(fin.readline()))
     self.defn = int(float(fin.readline()))
     fin.close()

  def LON(self):
    while true:
      loadOrNew = raw_input()

      if loadOrNew == "N":
        self.InitialiseNewPlayer()
        self.SavePlayer();
        self.FIRSTPLAY()
        return

      if loadOrNew == "Y":
        self.LoadPlayer()
        return

      print("Im sorry, what?")

  # Watch out as this is using a different format to the SavePlayer above!
  def SAVE(self):
    fout = open("pygame.dat", "w")
    fout.write(self.hp)
    fout.write(self.lvl)
    fout.write(self.atk)
    fout.close(self.defn)


  def FIRSTPLAY(self):
    print("man/woman?")
    gender = raw_input()
    if gender != "man" and gender != "woman":
        print("Not valid gender.")
        FIRSTPLAY()

    print("KING - ")    
    print(" Young " + gender + ", you are herby my knight!")
    time.sleep(1)
    print(" My daughter, princess PYTHON, has been captured!")
    time.sleep(1)
    print(" You are to find her, and relieve this world of her captor!")
    time.sleep(1)
    print(" Some say this evil man's name is GAMEMAKER, but we really don't know.")
    time.sleep(1)
    print(" What do you think it is?")
    captor = raw_input()
    time.sleep(1)
    print(" So you think it is " + captor + "?")
    time.sleep(1)
    print("     Very well, find " + captor + " ASAP!")
    self.PLAY()
    return

  def PLAY(self):
      print self.hp
      print self.lvl
      print self.atk
      print self.defn
      self.greenSlime()

  def greenSlime(self):
    MHP = 10
    MLVL = 1
    MATK = 2
    MDEF = 2
    print "Green Slime - "
    print " HP: 10"
    print " LVL: 1"
    print " ATK: 2"
    print " DEF: 2"
    print "ATK OR DEF?"

game = Game()
game.LON()
于 2012-05-16T03:37:37.563 に答える