LESSON 12

乱数でシミュレーションしよう

結果が毎回変わる実験を、コンピューターで何度も試します。

40分
必須
必須・これまでの復習

これまでの内容から、3問を復習しよう

前回までの内容から、毎回ランダムに3問が選ばれます。同じ復習用ファイルの中身を書き換え、1問ずつ予想・実行します。

今回のファイル名lesson12_review.py

レッスン番号と使う場面が分かる名前にして、あとで探しやすくします。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson12_review.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson12_review.pyと表示されたら準備完了です。

復習 1・第1回

表示

print(3 + 4)

表示される数は?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「表示される数は?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「3と4を足して7です。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習 2・第2回

変数

x = 5
x = x + 2
print(x)

最後のxは?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「最後のxは?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「5に2を足して7です。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習 3・第3回

条件分岐

n = 8
if n > 5:
    print("大")

表示される文字は?

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「表示される文字は?」の答えとして何を確かめるのか決めます。
  2. 次にコードを上から読みます。変数へ入る値、繰返し、条件分岐が出てきたら、その行で何が変わるかを一つずつ紙に書きます。
  3. 最後に表示される値や残った値を選択肢と比べます。この問題では「8は5より大きいからです。」という流れに注目します。
ヒントを見る

コードを自分で考えて作る問題ではありません。上にある見本コードを、復習用ファイルへ一文字ずつそのまま入力します。入力したら保存し、VS Code右上の▶を押します。画面下のターミナルに出た結果と選択肢を比べてください。記号や字下げが分からないときは、見本と同じ位置・同じ数にそろえれば大丈夫です。

復習を終えたことを確認

実際に自分のパソコンで行ってから、チェックを入れてください。

◎
今日のゴール

乱数を使った実験を繰り返し、回数や割合を求められる。

  • ✓乱数の意味を説明できる
  • ✓試行回数をforで増やせる
  • ✓結果が毎回変わる理由が分かる
STEP 1

シミュレーションは何のため?

今からやること
  1. くじ引きの例で乱数を知る
  2. 1回だけ乱数を作る
  3. 100回の実験を自動で行う
  4. 回数と割合を求める
  5. 必須問題で自分で確かめる

コインを1000回投げるのは大変です。コンピューターなら、結果をランダムに決める「乱数」と繰返しを使い、短い時間で何度も実験できます。このようなまねをした実験をシミュレーションと呼びます。

第12回:データを作る→第13回:特徴を数にする→第14回:区間別に見る

注意:乱数は毎回同じとは限りません。正解は一つの回数ではなく、「指定範囲の値が出る」「割合が0から1の間になる」といった成功条件で確かめます。

STEP 2

1から6の乱数を作ろう

今回のファイル名lesson12_step02.py

レッスン番号と使う場面が分かる名前にして、あとで探しやすくします。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson12_step02.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson12_step02.pyと表示されたら準備完了です。

この順番で実践します
  1. lesson12_step02.pyへ、見本コードを一文字ずつ入力する
  2. まだ実行せず、結果を予想する
  3. 保存して、VS Code右上の▶を押す
  4. 下のターミナルと教材の結果を比べる
import random

dice = random.randint(1, 6)
print(dice)

random.randint(1, 6)は、1から6までのどれか一つを作ります。さいころを1回振る動きと同じです。

表示される可能性がある数は?

先に自分のパソコンで実行しましょう。画面に出た結果を見てから、下のボタンを押します。

STEP 3

100回の実験を自動で行おう

import random

six_count = 0
for i in range(100):
    dice = random.randint(1, 6)
    if dice == 6:
        six_count = six_count + 1

print(six_count)
print(six_count / 100)

さいころを100回振り、6が出た回数を数えます。最後の行では、その回数を100で割って割合にします。

six_countが数えているものは?

STEP 4

ここまで分かったか確認しよう

今回のファイル名lesson12_step04.py

この回の必須問題で使うファイルです。問題ごとに中身を書き換えます。

  1. VS Code上部の「ファイル」をクリック
  2. 「新しいテキスト ファイル」をクリック
  3. Ctrl+S(Macは⌘+S)を押す
  4. lesson12_step04.pyと入力して「保存」を押す

ここを確認:画面上のタブ、または左側のファイル一覧にlesson12_step04.pyと表示されたら準備完了です。

必須問題の進め方
  1. lesson12_step04.pyを作る
  2. 問題のコードを入力して保存・実行する
  3. 同じファイルを書き換えて次の問題へ進む
必須 1

表が出た回数

0を裏、1を表として、コインを50回投げ、表の回数を数えます。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 1が出た回だけcountを増やし、最後に0〜50の数が出ることを確認します。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

random.randint(0, 1)を50回作り、1ならcountを増やします。

答えを見る
import random
count=0
for i in range(50):
    coin=random.randint(0,1)
    if coin==1:
        count=count+1
print(count)
# 0から50のどれかが表示されたら成功
必須 2

当たりの回数

1から10の乱数で、1が出たら当たりとします。100回の当たり数を求めます。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 1から10のうち1だけを当たりとし、当たった回数をwinへ記録します。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

乱数が1と等しいときだけwinを増やします。

答えを見る
import random
win=0
for i in range(100):
    n=random.randint(1,10)
    if n==1:
        win=win+1
print(win)
# 0から100のどれかが表示されたら成功
必須 3

試す回数を変える

さいころの実験を100回と1000回で行い、6の割合を比べます。

考え方を見る

最初から全部を理解しなくて大丈夫です。問題を小さな処理に分け、上から順番に見ていきます。

  1. 最初に問題文を読み、「何を作るか」「最後に何を表示するか」を確認します。
  2. 同じ実験を100回と1000回行い、6が出た回数ではなく割合を比べます。

  3. 次にコードを上から一行ずつ読みます。値が変わるたびに紙へ書き、最後の結果が問題の条件に合うか確かめます。
ヒントを見る

次の関数へ100と1000を渡します。表示は毎回変わって構いません。

答えを見る
import random
def six_ratio(trials):
    count=0
    for i in range(trials):
        if random.randint(1,6)==6:
            count+=1
    return count/trials
print("100回", six_ratio(100))
print("1000回", six_ratio(1000))
# どちらも0から1の値なら成功。多くの場合1000回の方が約0.167に近づく
実践したことを確認

実際に自分のパソコンで行ってから、チェックを入れてください。

時間が余ったら

できるだけ解いてみよう

全10問

全部終わらなくても大丈夫です。上から順番に挑戦しましょう。

  1. 1. 1から10の乱数を1個表示
    ヒントを見る

    randintの両端を1と10にします。

    答えを見る
    print(random.randint(1,10))
  2. 2. コインを10回表示
    ヒントを見る

    0か1をforで10回作ります。

    答えを見る
    for i in range(10):
        print(random.randint(0,1))
  3. 3. 偶数が出た回数を数える
    ヒントを見る

    2で割った余りが0なら数えます。

    答えを見る
    if n % 2 == 0:
        count = count + 1
  4. 4. 1から100の乱数
    ヒントを見る

    最小値1、最大値100です。

    答えを見る
    n = random.randint(1,100)
  5. 5. 当たりを1・2の二つにする
    ヒントを見る

    inを使って二つを調べられます。

    答えを見る
    if n in [1,2]:
        win=win+1
  6. 6. 試行回数を500回にする
    ヒントを見る

    rangeの数を変えます。

    答えを見る
    for i in range(500):
  7. 7. 割合を求める
    ヒントを見る

    当たり回数を試行回数で割ります。

    答えを見る
    rate = win / 500
  8. 8. 結果が毎回違う理由
    ヒントを見る

    乱数は実行のたびに選び直されます。

    答えを見る
    毎回、新しい乱数を作るため。
  9. 9. 回数を増やすメリット
    ヒントを見る

    偶然のかたよりが小さくなります。

    答えを見る
    全体の傾向に近い割合を得やすくなる。
  10. 10. じゃんけんの手を乱数で決める
    ヒントを見る

    0、1、2をグー・チョキ・パーにします。

    答えを見る
    hands=["グー","チョキ","パー"]
    print(hands[random.randint(0,2)])