我正在用python做一个简单的扑克游戏。当执行投注回合我得到一个最大递归深度错误,我不太确定我该如何修复它。我以前在以前版本的代码中遇到过这个问题,但现在我已经将赌注分成两半(一个用于人类,一个用于人工智能)。我已经尝试了所有我能想到的修复和堆栈溢出,但仍然没有用。你知道吗
代码如下:
def bettingRoundHuman():
print "Human, your cards are: " + str(human.card1) + ", " + str(human.card2)
action = raw_input("What is your move? (r/c/f): ")
if action == 'f':
ai.score = ai.score + 1
Table.winner = "Ai"
bettingRound().won = True
return True
elif action == 'r':
raiseAmount = input("Raise by: ")
if bettingRoundHuman().action == 'r':
human.money = human.money - bettingRoundAi().raiseAmount - raiseAmount
Table.pot = Table.pot + bettingRoundAi().raiseAmount + raiseAmount
bettingRound().won = False
return False
elif bettingRoundHuman().action == 'c':
human.money = human.money - raiseAmount
Table.pot = Table.pot + raiseAmount
bettingRound().won = False
return False
else:
human.money = human.money - raiseAmount
Table.pot = Table.pot + raiseAmount
bettingRound().won = False
return False
elif action == 'c':
if bettingRoundAi().action == 'c':
bettingRound().won = False
return True
elif bettingRoundAi().action == 'r':
human.money = human.money - bettingRoundAi().raiseAmount
Table.pot = Table.pot + bettingRoundAi().raiseAmount
bettingRound().won = False
return False
else:
bettingRound().won = False
return False
def bettingRoundAi():
print "Ai, your cards are: " + str(ai.card1) + ", " + str(ai.card2)
action = raw_input("What is your move? (r/c/f): ")
if action == 'f':
human.score = human.score + 1
Table.winner = 'Human'
bettingRound().won = True
return True
elif action == 'r':
raiseAmount = input("Raise by: ")
if bettingRoundHuman().action == 'r':
ai.money = ai.money - bettingRoundHuman().raiseAmount - raiseAmount
Table.pot = Table.pot + bettingRoundHuman().raiseAmount + raiseAmount
bettingRound().won = False
return False
elif bettingRoundHuman().action == 'c':
ai.money = ai.money - raiseAmount
Table.pot = Table.pot + raiseAmount
bettingRound().won = False
return False
elif action == 'c':
if bettingRoundHuman().action == 'r':
ai.money = ai.money - bettingRoundHuman().raiseAmount
Table.pot = Table.pot + bettingRoundHuman().raiseAmount
bettingRound().won = False
return False
elif bettingRoundHuman().action == 'c':
bettingRound().won = False
return True
else:
bettingRound().won = False
return False
def playGame():
startPlayer = bettingRoundOrder()
human.money = human.money - Table.entrymoney
ai.money = ai.money - Table.entrymoney
Table.pot = (Table.pot + 2*Table.entrymoney)
if bettingRound() == False:
print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3)
if bettingRound() == False:
print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn)
if bettingRound() == False:
print "The table's cards are: " + str(Table.flop1) + ", " + str(Table.flop2) + ", " + str(Table.flop3) + ", " + str(Table.turn) + ", " + str(Table.river)
if bettingRound() == False:
return cardCompare()
else: return Table.winner
def bettingRoundOrder():
if randint(0,100) >= 50:
return 1
else:
return 2
def bettingRound():
won = False
if playGame().startPlayer == 1:
while flag == False:
finishH = bettingRoundHuman()
finishA = bettingRoundAi()
if finishH == True or finishA == True:
flag = True
else: flag = False
elif playGame().startPlayer == 2:
while flag == False:
finishA = bettingRoundAi()
finishH = bettingRoundHuman()
if finishH == True or finishA == True:
flag = True
else: flag = flase
if won == True: return True
else: return False
完整代码:http://pastebin.com/sdfwWjsg
这是最后一个工作版本:http://pastebin.com/35gapWNi你知道吗
下面是我得到的错误代码:
[Keeps repeating and too long to put in question]
File "/home/laurence/Documents/poker (test).py", line 180, in bettingRound
if playGame().startPlayer == 1:
File "/home/laurence/Documents/poker (test).py", line 162, in playGame
if bettingRound() == False:
File "/home/laurence/Documents/poker (test).py", line 180, in bettingRound
if playGame().startPlayer == 1:
File "/home/laurence/Documents/poker (test).py", line 162, in playGame
if bettingRound() == False:
File "/home/laurence/Documents/poker (test).py", line 180, in bettingRound
if playGame().startPlayer == 1:
File "/home/laurence/Documents/poker (test).py", line 157, in playGame
startPlayer = bettingRoundOrder()
File "/home/laurence/Documents/poker (test).py", line 173, in bettingRoundOrder
if randint(0,100) >= 50:
File "/usr/lib/python2.7/random.py", line 242, in randint
return self.randrange(a, b+1)
File "/usr/lib/python2.7/random.py", line 185, in randrange
istart = _int(start)
RuntimeError: maximum recursion depth exceeded while calling a Python object
完整错误代码:http://pastebin.com/52CH0AvL
我想这是因为代码没有在应该的时候跳出一个循环,但是我找不到它不在的地方。你知道吗
查看http://pastebin.com/sdfwWjsg中代码的第156-162行和第178-180行:
这些代码段包含错误消息中反复提到的第180行和第162行。现在让我们看看调用第156行的
playGame()
函数时会发生什么:第157-160行设置一些变量,第162行调用bettingRound()
。现在我们在178行,179行设置一个变量,180行调用playGame()
,所以我们回到156行,这是无限循环。你知道吗我没有调查你的代码的其余部分,所以我无法修复错误。你知道吗
另一句话:如果您想执行类似
playGame().startPlayer
的操作,那么playGame()
函数必须返回一个具有startPlayer
成员的对象。无论是Table.winner
(它是字符串或无)还是cardCompare()
(它是字符串)的结果都不起作用。在playGame
函数的某处有一个startPlayer
变量是不够的。你知道吗相关问题 更多 >
编程相关推荐