In [1]:
def simulate(N, p):
    import random
    """
    降水確率を p とする。
    乱数シミュレーションして、置き傘が N 本になるまでの回数を返す。
    """
    a, b = 0, 0
    t = 0 # 移動回数
    while True:
        t += 1
        r = random.random()
        if r < p:
            # 雨が降った
            if a == 0:
                # 購入
                a += 1
            a, b = b + 1, a - 1
        else:
            # 雨が降らない
            a, b = b, a
        if a == N:
            return t
In [2]:
N, p = 10, 0.3
result = [simulate(N, p) for _ in range(10 ** 5)]
print(sum(result) / len(result))
247.47878