Python全局变量不工作

2024-09-30 03:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常长的程序,为一个卡纳斯塔游戏,我正在写,在其中有一个变量,结束了玩家的回合,如果它等于某个值。然而,这个转弯会重复。在

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

我不能给出整个代码,但我不能给出整个代码。我使用的是python2.7.2,无法将文件与要导入的主文件分开。在

程序的第一行是:

endTurn=1

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

^{pr2}$

移动时调用以下函数。变量decideraw_input()变量。在

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)

这里是转弯的终点。turn(thePlayer)重复该函数。debug语句显示正确的值0,但是if仍然读取1。它所在的函数顶部也有global endTurn。在

debug("If ending turn, endTurn of %s should be 0."%str(endTurn))
if endTurn==1:
    turn(thePlayer)

非常感谢任何帮助!在

编辑:代码在http://labs.codecademy.com/CV9z#:workspace上可用。我要求任何查看代码的人都不要修改它,这样其他人就可以看到真正的代码。在


Tags: to函数代码debugifnot语句turn
2条回答

我修好了虫子。我删除了endTurn变量,而是让结束回合的函数只执行下一个玩家的回合。它也简化了我的代码。在

但是我想知道,使用这种方法在函数内部反复运行(而不离开)是否相当混乱或者可能会减慢我的程序?在

编辑:我现在意识到这个答案并不能完全帮助那些陷入全局变量的人。。。在

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

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

while gameWinner==0:
    endTurn=1
    turn(player1)
    if not gameWinner==0:
        endTurn=1
        turn(player2)

在这个循环中,游戏永远无法到达玩家2,直到游戏赢家!=0。 我将整个代码添加到我的沙盒中,并将其更改为:

^{pr2}$

然而,游戏仍然是一辆马车。。。没人能赢!在将gameWinner添加到全局语句中之前,winGame()函数不会全局更改gameWinner。在

^{3}$

相关问题 更多 >

    热门问题