python - def 结束时变量重置

标签 python

我几天前才开始学习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/

相关文章:

python - 每次函数调用时导入 Redshift Python UDF

python - 如何通过描述性名称查找 unicode 字符?

python - 发布 Pelican 博客时,CNAME 文件未复制到根输出

python - 绘制表示边权重的连续宽度图例

python - 像Audacity一样绘制波谱

python - 使用 wxpython 闪烁显示网络摄像头视频

python - 日期时间 x 轴 matplotlib 标签导致不受控制的重叠

java - 如何在 Jython 模块中加载数据文件?

python - fastapi - 从 main.py 导入配置

python - 我怎样才能使用冒号(:) in variable