﻿import numpy as np  # モジュールNumpyをnpという名前でインポート
n = 100000  # 試行回数
X = np.zeros(n)  # 表が出る1円硬貨の合計金額を格納する配列
Y = np.zeros(n)  # 表が出る5円硬貨の合計金額を格納する配列
np.random.seed(1)  # 乱数のシード値を固定
for i in range(n):
    # 1円硬貨10枚を同時に投げた結果
    coin_1 = np.random.choice([0,1], size = 10, replace = True)
    X[i] = sum(coin_1) * 1  # 表が出た1円硬貨の合計金額
    # 5円硬貨3枚を同時に投げた結果
    coin_5 = np.random.choice([0,1], size = 3, replace = True)
    Y[i] = sum(coin_5) * 5  # 表が出た5円硬貨の合計金額

Z = X + Y  # 表が出た硬貨の合計金額
# 分散V(Z)を表示
print(np.var(Z))  # モンテカルロ法
print(85/4)  # 参考：理論値
# 期待値E(XY^2)を表示
print(np.mean(X * Y * Y))  # モンテカルロ法
print(375)  # 参考：理論値