Python 模拟1000次骰子游戏

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

我在Python中使用random来模拟一个垃圾游戏。然后,我对游戏进行n次模拟,以查看玩家击败庄家的频率。我有一个带有种子的测试文件来签入我的代码,但是我的数字稍微有点偏差。我认为错误在结构上,但似乎无法弄清楚到底是什么

掷骰子

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:答案扩展了。