Pythonでじゃんけんしたときにあいこになる確率を求める

半分備忘録です。Pythonで数学の問題を解きます。パーセントで出してるので、おおよその答えが出ます。

問い

以下の人数でじゃんけんをしたときに、あいこになる確率(%)を求めよ。
(1) 2人でじゃんけんをする場合
(2) 3人でじゃんけんをする場合

これをPythonで解いていきます。

(1)2人の場合

import random
import statistics

a = 0
b = 0
list = []
complete = 0

for k in range(1000): #1000回結果を取得する。
    result = 0 #結果をリセット
    for i in range(1000): #1000回じゃんけん
        a = random.randist(0,2) #aが出す手
        b = random.randist(0,2) #bが出す手
        if a == b:
            result += 1
    complete += 1
    print('{0}%完了'.format(complete/10)) #何%処理が完成したか
    list.append(result/10) #リストに結果を追加する。

print('{0}%です。'.format(statistics.mean(list))) #答えを表示

答えの例…33.4547%

まず2人をaとbとします。
互いの出す手が同じ
であればあいこになるので、あいこを「a == b」と決めました。
「for i in range(1000)」は結果を安定させるために1000回じゃんけんしています。出した手が同じなら、resultに1ずつ追加していきます。最後に10で割ってパーセントで出しています。それをリストに入れています。この作業を1000回繰り返します。

最後の「print('{0}%です。'.format(statistics.mean(list)))」では、リストに入れた値の平均値を出しています。format()は{0}のところに代入するために使っています。statistics.mean(list)はリストの平均を出しています。

(2)3人の場合

import random
import statistics

a = 0
b = 0
© = 0
list = []
complete = 0

for k in range(1000): #1000回結果を取得する。
    result = 0 #結果をリセット
    for i in range(1000): #1000回じゃんけん
        a = random.randist(0,2) #aが出す手
        b = random.randist(0,2) #bが出す手
        c = random.randist(0,2) #cが出す手
        if (a!=b and b!=c and c!=a) or (a==b==c): #ここが大きく変わった
            result += 1
    complete += 1
    print('{0}%完了'.format(complete/10)) #何%処理が完成したか
    list.append(result/10) #リストに結果を追加する。

print('{0}%です。'.format(statistics.mean(list))) #答えを表示

答えの例…33.3094%
3人目を追加するために、「c」という変数を追加しました。
互いの出す手が同じか3人が全員違う手を出せば
あいこになるので、あいこを「(a!=b and b!=c and c!=a) or (a==b==c)」と決めました。

あとがき

Pythonの練習用に書きました。今後もこんな感じの記事を出すかもしれません。


[▶︎]YouTube

🐱Scratch

🐦Twitter

Scratch、Python、Unity、ラズパイなどをいじってます。ソフト系に傾いていってます。 ↓自分のサイト(Googleサイトですみません) https://sites.google.com/view/Oldcoinmania