😃

[ChatGPT]サイコロの出る目の確率を求めるプログラム(Python)

2023/02/21に公開

はじめに

ChatGPTに、サイコロを複数個振って出た目の合計がどれくらいの確率で発生するか、Pythonで書いてもらうことにしました。

サイコロ2個の場合

質問
サイコロ2個振って出た目を合計を求める。それを100000回行って、それぞれの出た目の
合計となる確率を求めるプログラムを、pythonで書いて。
ChatGPT
以下は、Pythonでサイコロを2個振って出た目を合計を求め、それを100000回行って、
それぞれの出た目の合計となる確率を求めるプログラムです。
2dice.py
import random

# サイコロを2個振って出た目の合計を求める関数
def roll_dice():
    roll1 = random.randint(1, 6)
    roll2 = random.randint(1, 6)
    return roll1 + roll2

# サイコロを2個振って出た目の合計の確率を求める関数
def dice_probability():
    counts = [0] * 11 # 2から12の合計の数をカウントするリストを作成
    trials = 100000 # 試行回数
    for i in range(trials):
        total = roll_dice() # 2個のサイコロを振って合計を求める
        counts[total-2] += 1 # 合計をカウント
    for i in range(11):
        probability = counts[i] / trials # 確率を計算
        print("合計が{}の確率: {}".format(i+2, probability))

# 関数を実行
dice_probability()

ChatGPT
このプログラムでは、roll_dice()関数を使って、2個のサイコロを振って出た目の
合計を求めています。dice_probability()関数では、countsという長さ11のリストを作成して、
2から12までの合計の出現回数をカウントしています。その後、trials回数だけサイコロを振り、
合計が2から12までのそれぞれの場合について、その確率を計算して表示しています。

注意点としては、countsのインデックスは2から始まっているため、確率を計算する際には、
countsのインデックスに2を足して、合計を求める必要があることです。また、試行回数を
大きくすることで、より正確な確率を求めることができます。

上のPythonプログラムを実行したところ、正しく出力されるようです。

サイコロ3個の場合

今度はサイコロ3個の質問をしてみました。3個でも正しくプログラムを出力されるようです。

質問
サイコロ3個振って出た目を合計を求める。それを100000回行って、それぞれの出た目の
合計となる確率を求めるプログラムを、pythonで書いて。
ChatGPT
以下は、Pythonでサイコロを3個振って出た目を合計を求め、それを100000回行って、
それぞれの出た目の合計となる確率を求めるプログラムです。
3dice.py
import random

# サイコロを3個振って出た目の合計を求める関数
def roll_dice():
    roll1 = random.randint(1, 6)
    roll2 = random.randint(1, 6)
    roll3 = random.randint(1, 6)
    return roll1 + roll2 + roll3

# サイコロを3個振って出た目の合計の確率を求める関数
def dice_probability():
    counts = [0] * 16 # 3から18の合計の数をカウントするリストを作成
    trials = 100000 # 試行回数
    for i in range(trials):
        total = roll_dice() # 3個のサイコロを振って合計を求める
        counts[total-3] += 1 # 合計をカウント
    for i in range(16):
        probability = counts[i] / trials # 確率を計算
        print("合計が{}の確率: {}".format(i+3, probability))

# 関数を実行
dice_probability()

ChatGPT
このプログラムでは、roll_dice()関数を使って、3個のサイコロを振って出た目の
合計を求めています。dice_probability()関数では、countsという長さ16のリストを作成して、
3から18までの合計の出現回数をカウントしています。その後、trials回数だけサイコロを振り、
合計が3から18までのそれぞれの場合について、その確率を計算して表示しています。

注意点としては、countsのインデックスは3から始まっているため、確率を計算する際には、
countsのインデックスに3を足して、合計を求める必要があることです。また、試行回数を
大きくすることで、より正確な確率を求めることができます。

Discussion