Python 模拟1000次骰子游戏
我在Python中使用random来模拟一个垃圾游戏。然后,我对游戏进行n次模拟,以查看玩家击败庄家的频率。我有一个带有种子的测试文件来签入我的代码,但是我的数字稍微有点偏差。我认为错误在结构上,但似乎无法弄清楚到底是什么 掷骰子Python 模拟1000次骰子游戏,python,python-3.x,random,while-loop,Python,Python 3.x,Random,While Loop,我在Python中使用random来模拟一个垃圾游戏。然后,我对游戏进行n次模拟,以查看玩家击败庄家的频率。我有一个带有种子的测试文件来签入我的代码,但是我的数字稍微有点偏差。我认为错误在结构上,但似乎无法弄清楚到底是什么 掷骰子 def quietRoll(): return random.randrange(1,7) + random.randrange(1,7) 垃圾模拟 def quietCraps(): #first roll firstRoll = qu
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
如果newDice
第一次登录到7
或firstRoll
上,则您从函数末尾掉下来,没有点击return
语句,默认情况下函数返回None
由于return
语句结束函数(停止函数可能正在执行的任何循环并跳过函数的任何剩余代码),因此可以通过使循环为而为True
并在循环之前不初始化newDice
来解决此问题:
while True:
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
newDice = quietRoll()
while newDice not in (7, firstRoll):
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
或者,如果检查出循环,您可以将移出循环,这样,一旦模具落在7
或第一卷
上,它们就会发生,无论发生在循环内部还是外部:
while True:
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
newDice = quietRoll()
while newDice not in (7, firstRoll):
newDice = quietRoll()
if newDice == firstRoll:
return 1
if newDice == 7:
return 0
你的问题是。。。什么?@DavidSchwartz什么导致预期输出与实际不同?你是如何得出预期输出的?@DeliousErrors在测试文件中提供给我玩家在掷骰子中获胜的概率更接近于0.493而不是0.497。有什么替代方法来写它以避免这种情况发生,我是一个初学者,所以我为这个愚蠢的问题道歉。@23k:答案扩展了。