Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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全局变量不工作_Python_Global - Fatal编程技术网

Python全局变量不工作

Python全局变量不工作,python,global,Python,Global,我正在编写一个非常长的Canasta游戏程序,其中有一个变量,如果它等于某个值,则结束玩家的回合。然而,这一转变会重演 我在类似这样的论坛上读过很多不同的文章和帖子,但这些似乎都不起作用。我甚至有一个调试系统在if语句之前打印变量的值,并且变量是正确的值,但是if语句没有看到相同的值 我不能给出完整的代码,因为它非常长,但是我可以给出使用这个变量的部分。我使用的是Python 2.7.2,无法将文件与要导入的主文件分开 程序的第一行是: endTurn=1 当满足赢得游戏的条件时,将调用以下函

我正在编写一个非常长的Canasta游戏程序,其中有一个变量,如果它等于某个值,则结束玩家的回合。然而,这一转变会重演

我在类似这样的论坛上读过很多不同的文章和帖子,但这些似乎都不起作用。我甚至有一个调试系统在if语句之前打印变量的值,并且变量是正确的值,但是if语句没有看到相同的值

我不能给出完整的代码,因为它非常长,但是我可以给出使用这个变量的部分。我使用的是Python 2.7.2,无法将文件与要导入的主文件分开

程序的第一行是:

endTurn=1
当满足赢得游戏的条件时,将调用以下函数,但由于该错误,我无法测试该函数是否有效

def winGame(player):
    global endTurn
    gameWinner=player
    gameWinner["score"]+=100
    endTurn=0
移动时调用以下函数。变量decise是一个原始输入变量

def move(player,decide):
    global endTurn
    theMove=decide.lower()
    #if player says to end turn
    if theMove=="end":
        #until player discards something
        discarded=0
        while not discarded:
            displayHand(player)
            #ask player for discard
            discard=int(raw_input(" Enter the list number of the card you wish to discard:"))-1
            #if discard ID is in player's hand length
            if not discard<0 and not discard>len(player["hand"])-1:
                #add card to discard pile and remove from hand
                discardPile.append(player["hand"][discard])
                del(player["hand"][discard])
                discarded=1
        debug("Before changing, endTurn is %s"%str(endTurn))
        endTurn = 0
        debug("After changing, endTurn is %s"%str(endTurn))
    if theMove=="new book":
        newBook(player)
    if theMove=="add to book":
        addBook(player)
非常感谢您的帮助


编辑:代码可在以下位置获得。我要求任何查看代码的人不要修改代码,这样其他人就可以看到真实的代码。

我之前发布的答案是错误的,因为它是基于对命名空间文档的误解,因为我读过这些文档,感谢他们的主席指出了我的错误,所以这是一个经过严格编辑的答案:

问题是在while循环中,当我在前面给出错误答案后发布了指向整个代码的链接时,我能够读取到该循环

while gameWinner==0:
    endTurn=1
    turn(player1)
    if not gameWinner==0:
        endTurn=1
        turn(player2)
在游戏赢家之前,游戏永远无法到达该循环中的玩家2=0 我将整个代码添加到沙盒中,并将其更改为:

while gameWinner==0:
    endTurn=1
    turn(player1)
    if gameWinner==0: #if player1 did not win yet
        endTurn=1
        turn(player2)
然而,游戏仍然是有缺陷的。。。没有人能赢!gameWinner不会被winGame函数全局更改,除非您将其添加到全局语句中,如我在这里所示

def winGame(player):
    global endTurn, gameWinner
    gameWinner=player
    gameWinner["score"]+=100
    debug("gameWinner == " + str(gameWinner))
    endTurn=0

我修正了错误。我删除了endTurn变量,取而代之的是使结束回合的函数只执行下一个玩家的回合。它还简化了我的代码

我想知道的是,是否在使用这种方法,一次又一次地在函数内部运行函数,而不会留下相当混乱或可能会减慢程序的速度


编辑:我现在意识到,这个答案对其他被全局变量困扰的人没有什么帮助…

作为初学者,请密切关注!缩进中的任何错误都是由于复制机制造成的。我之前删除了你的评论,因为让别人通过电子邮件向你索取代码是不可接受的。在这里添加一个链接,或者让你的问题变得足够详细!另外,如果你通过复制粘贴来破坏东西,你需要修复它!请阅读和/或介绍如何提供最简单的工作示例;我们不需要或不想要完整的代码,但是可以运行并显示问题有用的东西。一般来说,为什么要使用全局变量呢?您的函数似乎没有返回东西,为什么不让它们返回是否继续运行呢?我重新阅读了上面的代码,缩进是正确的。一开始我没有添加代码链接的原因是因为任何人都可以进入并更改代码。我已经把代码放在了另一页上,我要求没有人修改代码,这样人们就可以看到真正的代码。为什么会投反对票?根据所提出的问题,这将解决问题。使用全局变量可能不完全是“pythonic”,但它们是存在的,问题是为什么未声明的全局变量在全局范围内不可用。如果要写入它们,只需将变量声明为全局内部函数foo=。。。。你永远不需要在函数之外做这件事。你能提供一个参考吗?我以前遇到过这个问题,在程序开始时声明全局变量是有效的。好的,我一直在阅读名称空间并复习我的笔记。你是对的!好像你不知道!LOL如果您想写入变量,只需要在函数中声明为全局变量。现在我的问题是,在程序开始时声明一个全局变量是如何解决的?也许我刚刚埋了一只虫子。。。我要找出那个程序,再看一眼。非常感谢。我相信我从错误中学到了一些东西@老师,我已将我的答案更正为真实答案,而不是基于对文档的误解。再次感谢你帮我纠正我的误解。
def winGame(player):
    global endTurn, gameWinner
    gameWinner=player
    gameWinner["score"]+=100
    debug("gameWinner == " + str(gameWinner))
    endTurn=0