我在Python中使用随机模拟掷骰子游戏。然后,我将模拟游戏的次数,以查看玩家击败经销商的频率。我有一个带种子的测试文件来检查我的代码,但我的数字只是略微偏离。我认为错误在于结构,但似乎无法弄清楚究竟是什么。
掷骰子
def quietRoll():
return random.randrange(1,7) + random.randrange(1,7)
掷骰子模拟
def quietCraps():
#first roll
firstRoll = quietRoll()
if firstRoll in (7,11):
return 1
elif firstRoll in (2,3,12):
return 0
#every other roll
newDice = quietRoll()
while newDice not in (7, firstRoll):
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
运行掷骰子n次
def testCraps(n):
count = 0
playerWin = 0
while count <= n:
if quietCraps() == 1:
playerWin += 1
count += 1
else:
count += 1
return playerWin/n
预期输出
Failed example:
random.seed(5)
testCraps(1000)
Expected:
0.497
Got:
0.414
答案 0 :(得分:2)
newDice = quietRoll()
while newDice not in (7, firstRoll):
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
如果newDice
第一次登陆7
或firstRoll
,则会在不遇到return
语句的情况下从函数末尾删除,函数返回{{ 1}}默认情况下。
由于None
语句结束了该函数(停止了函数可能正在执行的任何循环并跳过函数的剩余代码),你可以通过使循环为return
而不是初始化来解决这个问题。循环前while True
:
newDice
或者,你可以将while True:
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
个检查移出循环,这样一旦骰子落在if
或7
上就会发生,无论是在内部还是外部发生循环:
firstRoll