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

Z = X + Y  # 表が出た硬貨の合計金額
variance = np.var(Z)
std_dev = math.sqrt((n - 1) / n * variance)
# 期待値E(Z)を表示
print(np.mean(Z))  # モンテカルロ法
print(200)  # 参考：理論値
# 標準偏差σ(Z)を表示
print(std_dev)  # モンテカルロ法 
print(25 * math.sqrt(14))  # 参考：理論値 