我几天前才开始学习Python,但我决定通过制作一个简单的 X O 游戏来测试我的技能,下面是我到目前为止编写的代码。 希望这不需要解释。但基本上发生的情况是在其中一个功能结束并继续到另一个功能之后,数字会重置,因此当玩家一输入“1”并且 X 被放置在位置 1 时,然后玩家二输入“2”并且 O 被放置在位置2、玩家一输入的X恢复为“1”。 我该如何解决这个问题?
grid=" %s | %s | %s \n --+---+--\n %s | %s | %s\n --+---+--\n %s | %s | %s"
one = "1"
two = "2"
three = "3"
four = "4"
five = "5"
six = "6"
seven = "7"
eight = "8"
nine = "9"
error = "\n error"
print grid % (one, two, three, four, five, six, seven, eight, nine)
def pleone(m, one, two, three, four, five, six, seven, eight, nine):
if m == "1":
one = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "2":
two = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "3":
three = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "4":
four = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "5":
five = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "6":
six = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "7":
seven = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "8":
eight = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
elif m == "9":
nine = "X"
print grid % (one, two, three, four, five, six, seven, eight, nine)
pltwo()
else:
print error
def pletwo(k, one, two, three, four, five, six, seven, eight, nine):
if k == "1":
one = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "2":
two = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "3":
three = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "4":
four = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "5":
five = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "6":
six = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "7":
seven = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif K == "8":
eight = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
elif k == "9":
nine = "O"
print grid % (one, two, three, four, five, six, seven, eight, nine)
plone()
else:
print error
def plone():
m = raw_input("\n player one (X), what position? ")
pleone(m, one, two, three, four, five, six, seven, eight, nine)
def pltwo():
k = raw_input("\n player two (O), what position? ")
pletwo(k, one, two, three, four, five, six, seven, eight, nine)
plone()
最佳答案
我保留了你的代码,但你可以美化它。
改回“1”的原因是 pleone 和 pletwo 函数外部的“一”与函数内部的“一”不同。
外部的“一”具有全局作用域,而函数内部的“一”具有局部作用域,这意味着它们仅在函数内部有效。
您需要将函数内的变量声明为全局变量才能更改它。
以下示例展示了如何解决此问题:
g_var = '1'
l_var = '1'
print g_var, l_var # prints 1, 1, the values of the global variables
def my_func():
global g_var # the keyword global tells that we want to change the global variable g_var
g_var = '2'
l_var = '2'
print g_var, l_var # prints 2, 2, the first being the value of the global variable, the second being the local declared variable l_var.
my_func()
print g_var, l_var # prints 2, 1, again the values of both global declared variables
关于python - def 结束时变量重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46179815/