蒙特卡罗模拟Python

时间:2015-01-07 17:46:19

标签: python-2.7

问题:  你有一个带3个红球和3个绿球的水桶。  假设一旦你从水桶中抽出一个球,你就不能更换它。  绘制3个相同颜色的球的概率是多少?

问题:我的代码总是给出0.0

import random
def noReplacementSimulation(numTrials):
    '''
    Runs numTrials trials of a Monte Carlo simulation
    of drawing 3 balls out of a bucket containing
    3 red and 3 green balls. Balls are not replaced once
    drawn. Returns the a decimal - the fraction of times 3 
    balls of the same color were drawn.
    '''

    for i in range(numTrials):
        hola=0
        b=['r','r','r','g','g','g']
        for a in range(3):
          ball=random.choice(b)
          b.remove(ball)
        if b[0]==b[1] and b[1]==b[2] and b[2]==b[0]:
            hola=hola+1
    return float(hola)/numTrials    

1 个答案:

答案 0 :(得分:4)

您的代码 始终只返回0.0,大部分时间都是如此。你重置了

hola=0
循环中的

,因此您只能以hola == 0hola == 1结尾。你想要

hola=0
for i in range(numTrials):
    # stuff here

代替。

PS:问题是“绘制3个相同颜色的球的概率是多少?”但是你要检查的三个球是否具有相同的颜色。那些一般不会是一样的。