确定!基本上,我在一个函数中声明了一个变量,我想在另一个函数中使用该变量。我不想传递参数,因为我觉得有一种更简单的方法可以做到这一点。这是我的代码:
#!/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()
我想在PLAY函数中使用在LON函数中声明的hp,lvl,atk和defn变量。我确信有一种更简单的方法然后传递参数。
答案 0 :(得分:1)
在LON()
内,您可以使用global
声明:
def LON():
global hp, lvl, atk, defn
然后,LON()
内的那些变量的赋值将创建全局变量。创建全局变量后,您可以在其他地方使用它们(无需global
语句)。请注意,在您想要为全局变量分配新值的任何地方,您需要在该函数内部使用相应的global
语句。
答案 1 :(得分:1)
在全局范围内声明变量将无法正常工作。 global关键字是要求解释器在为其赋值时不要将某些东西视为本地(覆盖具有相同名称的全局变量)。您需要做的是在应该共享它的函数之上的范围内定义变量。请注意,您无需在函数中声明变量global for read-only access。当解释器在本地范围内找不到变量时,它会自动在外部范围内查找它。但是在赋值语句的情况下,它会创建一个新的局部变量。
所以你想要做的是:
hp = None
lvl = None
atk = None
defn = None
def LON():
global hp, lvl, atk, defn
# rest of LON
# rest of the functions
但是我应该警告你,全局变量是糟糕的编程习惯,传递参数是正确的方法。
答案 2 :(得分: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()