私は単純なポーカーゲームをパイソンで作っています。賭けのラウンドを行うとき、私は最大再帰深さのエラーを取得し、私はそれを修正する方法についてあまりにも確信していません。以前のバージョンのコードでこの問題が発生しましたが、私は今ベットラウンドを2つの半分に分割しました(1つは人間用、もう1つはAI用)。私は考えることができるすべての修正を試して、スタックオーバーフローとまだ使用していません。最大再帰エラー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:http://pastebin.com/sdfwWjsg
はここで最後の作業バージョンです// 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
私はループの中でループを壊さないようにコードと関係があると思っていますが、どこにあるのかわかりません。
完全な例外出力を共有してください – nuriselcuk
私たちがあなたを助けるのは難しいことではありません。あなたのコードで最初に受け取るエラーは 'NameError:global name 'randint' not defined'です。ランダムなインポートrandint'を追加した後、コードは実行されますが、何も起こりません。最後に 'playGame()'を追加すると、 'NameError:global name 'human'が定義されていません。 'というエラーが出ます。コピーして貼り付けることができる[mcve](https://stackoverflow.com/help/mcve)を提供できますか?エラーを表示してください。 – maij
@maij完全コードとエラー出力にpastebinを追加しました。 – Snowsnooks