我有一个非常长的程序,为一个卡纳斯塔游戏,我正在写,在其中有一个变量,结束了玩家的回合,如果它等于某个值。然而,这个转弯会重复。在
我在类似这样的论坛上读过很多不同的文章和帖子,但这些似乎都不管用。我甚至有一个调试系统在if语句之前打印变量的值,变量是正确的值,但是if语句没有看到相同的值。在
我不能给出整个代码,但我不能给出整个代码。我使用的是python2.7.2,无法将文件与要导入的主文件分开。在
程序的第一行是:
endTurn=1
当满足赢得游戏的条件时,将调用以下函数,但由于错误,我无法测试此函数是否有效。在
^{pr2}$移动时调用以下函数。变量decide
是raw_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上可用。我要求任何查看代码的人都不要修改它,这样其他人就可以看到真正的代码。在
我修好了虫子。我删除了
endTurn
变量,而是让结束回合的函数只执行下一个玩家的回合。它也简化了我的代码。在但是我想知道,使用这种方法在函数内部反复运行(而不离开)是否相当混乱或者可能会减慢我的程序?在
编辑:我现在意识到这个答案并不能完全帮助那些陷入全局变量的人。。。在
我之前发布的答案是错误的,因为它是基于对名称空间文档的误解(感谢他们指出了我的错误),所以这是一个经过严格编辑的答案:
问题出在while循环中,当我在前面给出错误答案后发布了指向整个代码的链接时,我能够读取该循环。在
在这个循环中,游戏永远无法到达玩家2,直到游戏赢家!=0。 我将整个代码添加到我的沙盒中,并将其更改为:
^{pr2}$然而,游戏仍然是一辆马车。。。没人能赢!在将gameWinner添加到全局语句中之前,winGame()函数不会全局更改gameWinner。在
^{3}$相关问题 更多 >
编程相关推荐