Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python def结束时重置变量_Python - Fatal编程技术网

Python def结束时重置变量

Python def结束时重置变量,python,Python,我几天前才开始学习Python,但我决定通过制作一个简单的Xo游戏来测试我的技能,下面是我迄今为止编写的代码。 希望它不需要解释。但基本上,在一个函数结束并转到另一个函数后,数字会重置,因此,当玩家一输入“1”,X被置于位置1,然后玩家二输入“2”,O被置于位置2时,玩家一输入的X会回到“1”。 我该如何解决这个问题 grid=" %s | %s | %s \n --+---+--\n %s | %s | %s\n --+---+--\n %s | %s | %s" one = "1" t

我几天前才开始学习Python,但我决定通过制作一个简单的Xo游戏来测试我的技能,下面是我迄今为止编写的代码。 希望它不需要解释。但基本上,在一个函数结束并转到另一个函数后,数字会重置,因此,当玩家一输入“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和PLETOW函数外部的“1”与函数内部的“1”不同

外部的“一”具有全局作用域,而函数内部的“一”具有局部作用域,这意味着它们仅在函数内部有效

您需要将函数中的变量声明为全局变量才能对其进行更改

以下示例显示了如何修复此问题:

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

我尝试在“one”变量前面添加global,但它只显示以下错误:global one=“X”^SyntaxError:invalid syntaxe您需要这样做:global one=“X”(每一个都在新行上)