【Python】場合の数(和の法則):2つのサイコロの目の和が、4の倍数になるパターンを調べる

■場合の数

場合の数とは、ある事象について、起こりうるすべてのパターン数を表す。

例えば、サイコロの出る目について、すべてのパターンは、以下の6通りである。
「1」、「2」、「3」、「4」、「5」、「6」

▼和の法則

同時に起こらない「X」、「Y」という2つの事象について、
「X」の起こりうる場合の数を「x」、
「Y」の起こりうる場合の数を「y」とし、
「X」または「Y」が起こりうる場合の数は「x + y」通りとなる。

■例題

2つのサイコロ「A」、「B」を振った時、サイコロ「A」、「B」の目の和が4の倍数となる場合は、何通りあるか、Pythonで実装する。

▼机上計算

2つのサイコロ「A」、「B」が出る目の和を以下の表に示す。
なお、4の倍数である値については、「赤字」とする。

サイコロA→
サイコロB↓
123456
1234567
2345678
3456789
45678910
567891011
6789101112

上表より、4の倍数の値は「4」、「8」、「12」であり、それぞれの場合の数は以下の通り。
「4」:3通り
「8」:5通り
「12」:1通り

すなわち、2つのサイコロ「A」、「B」を振った時、サイコロ「A」、「B」の目の和が4の倍数となる場合は、9通りである。(= 3 + 5 + 1)

■Pythonによる実装

▼フローチャート

▼プログラム仕様

入力処理内容出力
定数として、2つのサイコロA、Bを定義する。
サイコロA:1、2、3、4、5、6
サイコロB:1、2、3、4、5、6
合計値の初期値「0」をセットする。
処理結果格納用の配列をセットする。
■ループ処理:サイコロAの目の数だけ繰り返し
|■ループ処理:サイコロBの目の数だけ繰り返し
||サイコロA、Bの和を算出
||▼条件分岐:サイコロの目の和
|||【4の倍数の場合】
|||サイコロA、Bの値を出力する。
|||2つのサイコロの和を出力する。
|||配列にサイコロA、Bの和を格納する。
||▲
|■
【コンソール】
サイコロABの値
サイコロABの和
合計で何通りあるか出力する。【コンソール】
N通り
※Nは任意の数

▼サンプルコード

# サイコロA、Bの和を求め、
# 和が4の倍数である場合が何通りか算出する処理
def sum_number_of_caces():

    # 定数:2つのサイコロA、Bを定義
    DICE_A = [1, 2, 3, 4, 5, 6]
    DICE_B = [1, 2, 3, 4, 5, 6]

    # 合計値の初期値をセット
    sum = 0

    # 処理結果格納用の配列をセット
    result_data = []

    # サイコロAの目の数だけ繰り返し
    for i in DICE_A:
        # サイコロBの目の数だけ繰り返し
        for j in DICE_B:
            # サイコロA、Bの和を算出
            sum = i + j

            # サイコロの目の和が4の倍数の場合
            if sum % 4 == 0:
                # サイコロA、Bの値を出力
                print('サイコロA:', i, 'サイコロB:', j)
                # 2つのサイコロの和を出力
                print('サイコロA、Bの和:', sum)
                # 出力結果の区切りとして「*」を出力
                print('**********')

                # 配列にサイコロA、Bの和を格納
                result_data.append(sum)

    # 合計で何通りあるか出力
    print('答え:', len(result_data), '通り')


# メイン処理
if __name__ == '__main__':
    sum_number_of_caces()

▼実行結果

サイコロA: 1 サイコロB: 3
サイコロA、Bの和: 4
**********
サイコロA: 2 サイコロB: 2
サイコロA、Bの和: 4
**********
サイコロA: 2 サイコロB: 6
サイコロA、Bの和: 8
**********
サイコロA: 3 サイコロB: 1
サイコロA、Bの和: 4
**********
サイコロA: 3 サイコロB: 5
サイコロA、Bの和: 8
**********
サイコロA: 4 サイコロB: 4
サイコロA、Bの和: 8
**********
サイコロA: 5 サイコロB: 3
サイコロA、Bの和: 8
**********
サイコロA: 6 サイコロB: 2
サイコロA、Bの和: 8
**********
サイコロA: 6 サイコロB: 6
サイコロA、Bの和: 12
**********
答え: 9 通り

コメント