我正在尝试模拟n场比赛的掷骰子.代码似乎对我有意义,但我从来没有得到正确的结果.例如,如果我输入n = 5即五场比赛,则胜负总和大于5.
这是它应该如何工作:如果初始滚动是2,3或12,则玩家输掉.如果掷骰是7或11,则玩家获胜.任何其他初始滚动都会导致玩家再次滚动.他继续滚动,直到他掷出7或初始掷骰的价值.如果他在滚动7之前重新滚动初始值,那就是胜利.首先滚动7是一个损失.
from random import randrange
def roll():
dice = randrange(1,7) + randrange (1,7)
return dice
def sim_games(n):
wins = losses = 0
for i in range(n):
if game():
wins = wins + 1
if not game():
losses = losses + 1
return wins, losses
#simulate one game
def game():
dice = roll()
if dice == 2 or dice == 3 or dice == 12:
return False
elif dice == 7 or dice == 11:
return True
else:
dice1 = roll()
while dice1 != 7 or dice1 != dice:
if dice1 == 7:
return False
elif dice1 == dice:
return True
else:
dice1 = roll()
def main():
n = eval(input("How many games of craps would you like to play? "))
w, l = sim_games(n)
print("wins:", w,"losses:", l)
Run Code Online (Sandbox Code Playgroud)
问题在于
if game():
wins = wins + 1
if not game():
losses = losses + 1
Run Code Online (Sandbox Code Playgroud)
相反,它应该是
if game():
wins = wins + 1
else:
losses = losses + 1
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您正在模拟两个游戏而不是一个游戏(通过调用game()两次).这给出了四种可能的结果而不是两种(赢/输),给出了不一致的总体结果.
| 归档时间: |
|
| 查看次数: |
10994 次 |
| 最近记录: |