我必须模拟一个积分游戏,第一个达到11分并以2分获胜的人赢得游戏
我使用了一个函数来决定谁赢得一个点
def simulatePoint(winProbabilityA, winProbabilityB):
rNumber = random.random()
if rNumber - winProbabilityA <= 0:
# A wins the game
return 0
elif rNumber - winProbabilityA > 0:
# B wins the game
return 1
另一个模拟游戏
def simulateGame (playerA_winProb, playerB_winProb):
gameWon = False
pointsA = 0
pointsB = 0
while gameWon == False:
# Simulate point
point = simulatePoint(playerA_winProb, playerB_winProb)
if point == 0:
pointsA += 1
elif point == 1:
pointsB += 1
# Checks for points to be equal to 11
if (pointsA == 11) and (pointsA - pointsB >= 2):
# A wins the game
gameWon = True
return 0
elif (pointsB == 11) and (pointsB - pointsA >= 2):
# B wins the game
gameWon = True
return 1
这是我认为我出错的地方,我认为while循环导致代码运行缓慢
非常接受任何帮助
答案 0 :(得分:3)
在他们赢得超过11场比赛之后,如果差异大于或等于2,该怎么办?所以,逻辑应该是这样的
if (pointsA >= 11) and (pointsA - pointsB >= 2):
...
elif (pointsB >= 11) and (pointsB - pointsA >= 2):
...
答案 1 :(得分:1)
我认为您的代码无限运行。
考虑:pointsA
和pointsB
分别到达10
和10
。现在,无论哪个玩家获得下一个点,都不会达到任何终止条件,因为pointsA
和pointsB
都不会11
同时增加2。这会产生无限循环。
您可能想要检查pointsA >= 11
和pointsB >= 11
而不是A == 11
和B == 11
。
看起来他们有点打败了我 - 他得到了我的投票。