Slide 1

Slide 1 text

系統性を意識した プログラミング教育 ~ガチャを実装しよう~ 福島県立いわき総合高等学校 情報科 教諭 古川達規

Slide 2

Slide 2 text

いわき総合高校 について • 単位制総合学科 • 2,3年で音楽、美術、演劇、 情報、商業、福祉、家庭など の専門科目を履修可能 • 学力はあまり高くない (全国偏差値40を切る)

Slide 3

Slide 3 text

Monaca Educationを 導入する理由 • 興味を引きやすい • アプリ制作へ移行しやすい • デバッグがわかりやすい

Slide 4

Slide 4 text

昨年度との比較 • 昨年度はJavaScript • アプリ制作がメイン • JavaScript本を使用した授業 • 今年度はPython • 共通テストを意識 • オリジナルスライドで授業 配当時間:14時間 ① スマホアプリ企画書作成(2時間) ② 企画発表会(1時間) ③ JavaScript本を使用して基礎を学習 第1章~第6章+DOM(7時間) ④ アプリ制作(3時間) ⑤ アプリ発表会(1時間) 配当時間:12時間 ① 表示関数、変数、計算、乱数などの基本事項を学習 ② くじ引きを例に分岐処理を学習 ③ 当たり確率の調整をする中で、不等号を使った分岐処理を学習 ④ 単発ガチャを作成(レアリティ:LR, UR, SSR, SR, R, N) ⑤ 繰返し処理を学習し、100連ガチャを実装 ⑥ 何が何回排出されたかをカウントする処理を実装 ⑦ 配列を学習し、各レアリティに複数の種類を準備する処理を実装

Slide 5

Slide 5 text

スマホアプリ企画書 テーマ:身近な問題を解決するアプリ 昨年度の生徒の作品

Slide 6

Slide 6 text

丸亀千円 昨年度の生徒の作品

Slide 7

Slide 7 text

提案の背景、目的、実現したいこと ・丸亀製麺はうどんからおにぎりメニューが豊富で選びにくい。 ・更に、麺類以外にも天ぷらを乗せるか乗せないか、又何を乗せる かという問題がある。 我々は、その問題を解決するために1000円の予算以内でメニューをランダムに 選んでくれるアプリを提案します。 昨年度の生徒の作品

Slide 8

Slide 8 text

関連するアプリの調査 実際にGoogleで似たようなアプリがないか探したところ、サイ ゼリアのファンが制作した、サイゼリア1000円ガチャというア プリが見つかりました。 そのアプリは数あるメニューの中からランダムでメニューを決め てくれるというものです。また、他にもマクドナルドやすき家な どの多種多様の飲食店の千円ガチャがありました。 しかし、私たちの考案する丸亀製麺のガチャは見つかりませんで した。更に、このアプリは1000円の予算でメニューを選んでく れる上、塩分と脂質の合計をそれぞれ出してくれるため、こちら の方が優れています。 昨年度の生徒の作品

Slide 9

Slide 9 text

丸亀千円 ガチャ ガチャを回す メ ニ ュ ー 合計 ○○円 ○○kcal 塩分 〇g 脂質 〇g 戻る もう一回 メ ニ ュ ー 合計 ○○円 ○○kcal 塩分 〇g 脂質 〇g 戻る メ ニ ュ ー 合計 ○○円 ○○kcal 塩分 〇g 脂質 〇g 戻る もう一回 昨年度の生徒の作品 もう一回 画面遷移図

Slide 10

Slide 10 text

最後に 皆さんもぜひこのアプリを活用して快 適なうどんライフをお楽しみください。 ご清聴ありがとうございました。 昨年度の生徒の作品

Slide 11

Slide 11 text

昨年度の生徒の作品

Slide 12

Slide 12 text

【今年度】 プログラミング 単元について 配当時間:12時間 ① 表示関数、変数、計算、乱数などの基本事項を学習 ② くじ引きを例に分岐処理を学習 ③ 当たり確率の調整をする中で、不等号を使った 分岐処理を学習 ④ 単発ガチャを作成(レアリティ:LR, UR, SSR, SR, R, N) ⑤ 繰返し処理を学習し、100連ガチャを実装 ⑥ 何が何回排出されたかをカウントする処理を実装 ⑦ 配列を学習し、各レアリティに複数の種類を 準備する処理を実装

Slide 13

Slide 13 text

シミュレーション の単元への接続

Slide 14

Slide 14 text

「ガチャ」の確率シミュレーション • 当たり1%のガチャを100回引くとき、自分は何回目くらいで 最初に当たるか? • 当たり1%のガチャを、クラスの40人がそれぞれ100回ずつ引 く。1回も当たりが出ない人は何人いるだろう? 14

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

生徒の振り返り分析

Slide 20

Slide 20 text

生徒の振り返り分析

Slide 21

Slide 21 text

令和7年度試験の問題作成の方向性(試作問題)/大学入試センター

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

次年度の活用予定 • 領域複合で実習時間を確保 • プログラミング、シミュレーション、情報デザイン、問題解決など • 言語はPython , HTML + CSS • 系統性を持たせた指導は必要、でも自由制作も必要

Slide 28

Slide 28 text

以下、参考資料

Slide 29

Slide 29 text

福島県立いわき総合高等学校 プログラミングの基本を身につけよう1 情報科

Slide 30

Slide 30 text

福島県立いわき総合高等学校 今日やること ① 期末テストの平均点と偏差値を求めるプログラムの作成 ② アタリ、ハズレのあるくじ引きをシミュレーションする プログラムの作成 ③ 1等、2等、3等などのあるくじ引きをシミュレーションする プログラムの作成 ④ くじの出る確率を調整する

Slide 31

Slide 31 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める ◼ Pythonにおける標準出力 print( ) ()内に数値を入れると画面に数値が出る やってみよう! print(5) 31

Slide 32

Slide 32 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める ◼ Pythonにおける標準出力 print( ) ()内に””で括って文字を入れると 画面に文字が出る やってみよう! print(”こんにちは”) 32

Slide 33

Slide 33 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 33 基本的に変数名は自由に付けられる

Slide 34

Slide 34 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 34 やってみよう! num = 123 print(num)

Slide 35

Slide 35 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 35 ◼ 四則演算

Slide 36

Slide 36 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 36 やってみよう print(1+3) print(3*5) a = 3 b = 5 c = 12 print(a*b-c)

Slide 37

Slide 37 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 37

Slide 38

Slide 38 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 38 やってみよう! print(5) print(”こんにちは”) num = 123 print(num) print(1+3) print(3*5) a = 3 b = 5 c = 12 print(a*b-c) まとめてコメントアウトしてみよう

Slide 39

Slide 39 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 39 クラスの平均点を求めてみよう goukei = ???? heikin = ???? print(????)

Slide 40

Slide 40 text

福島県立いわき総合高等学校 ① 期末テストの平均点と偏差値を求める 40 自分の偏差値を求めてみよう hensachi = ???? print(????) 偏差値は「(個人の得点ー平均点)÷標準偏差 ×10+50」という式で計算できます。 標準偏差は11.42

Slide 41

Slide 41 text

福島県立いわき総合高等学校 ② アタリ、ハズレのあるくじ引き 41 import random ran = random.randint(1,2) if ran == 1: print("アタリ") else: print("ハズレ") 開始 ランダムを使う準備 変数ranに1か2を ランダムに代入 ranの値 は1? アタリと表示する ハズレと表示する Yes No プログラム フローチャート

Slide 42

Slide 42 text

福島県立いわき総合高等学校 ③ 1等、2等、3等などのあるくじ引き 42 import random ran = random.randint(1,3) #print(ran) if ran == 1: print("1等が当たりました") elif ran == 2: print("2等が当たりました") else: print("3等が当たりました") 開始 ランダムを使う準備 変数ranに1から3を ランダムに代入 ranの値 は1? 1等が当たりました と表示する 2等が当たりました と表示する Yes No ranの値 は2? Yes 3等が当たりました と表示する プログラム フローチャート

Slide 43

Slide 43 text

福島県立いわき総合高等学校 課題 43 1等、2等、3等、4等、はずれ がある くじ引きを作りなさい。

Slide 44

Slide 44 text

福島県立いわき総合高等学校 ④ くじの出る確率を調整する 44 振り分け:1等(5%),2等(10%),3等(15%),4等(20%),はずれ(50%) import random ran = random.randint(1,100) #print(ran) if ran <= 5: print("1等が当たりました") elif ran <= 15: print("2等が当たりました") elif ran <= 30: print("3等が当たりました") elif ran <= 50: print("4等が当たりました") else: print("はずれ")

Slide 45

Slide 45 text

福島県立いわき総合高等学校 宿題 ガチャを作ろう 45 振り分け LR(1%),UR(5%),SSR(10%),SR(14%),R(20%),N(50%)

Slide 46

Slide 46 text

福島県立いわき総合高等学校 次回予告 46 100連ガチャ 実装 確率の壁を越えろ

Slide 47

Slide 47 text

福島県立いわき総合高等学校 プログラミングの基本を身につけよう2 情報科

Slide 48

Slide 48 text

福島県立いわき総合高等学校 今日やること ① 100連ガチャを作ろう ② 100連ガチャで何が何回出たかカウントしよう ③ 標準入力のやり方を覚えよう

Slide 49

Slide 49 text

福島県立いわき総合高等学校 ① 100連ガチャを作ろう ◼ Pythonにおける繰り返し処理 49 Range関数の書き方によって カウンター変数の増え方が変わるよ

Slide 50

Slide 50 text

福島県立いわき総合高等学校 ① 100連ガチャを作ろう ◼ Pythonにおける繰り返し処理 やってみよう # 1~100までの数字を表示しよう for i in range(1,101): print(i) 50

Slide 51

Slide 51 text

福島県立いわき総合高等学校 ① 100連ガチャを作ろう ◼ Pythonにおける繰り返し処理 やってみよう # 1~100までの偶数を表示しよう for i in range(1,101): if i % 2 == 0: print(i) 51 もし、i を割った余りが0ならば %は、割った余りを計算する算術演算子 詳しくは前回のスライドを 確認しよう!

Slide 52

Slide 52 text

福島県立いわき総合高等学校 ① 100連ガチャを作ろう ◼ Pythonにおける繰り返し処理 課題 # 1~100までの奇数を表示しよう 52

Slide 53

Slide 53 text

福島県立いわき総合高等学校 課題 53 前回のガチャプログラムを利用して 100連ガチャ を作ろう

Slide 54

Slide 54 text

福島県立いわき総合高等学校 ② 100連ガチャで何が何回出たかカウントしよう 54 # 出現した回数をカウントして表示する count1 = 0 count2 = 0 for i in range(1,101): import random ran = random.randint(1,100) print(ran) if ran <= 10: count1 += 1 elif ran >= 90: count2 += 1 print("10以下は" + str(count1) +"回出ました") print("90以上は" + str(count2) +"回出ました") 数値と文字は同時に出力できないため、数値を文字列に変換する必要がある。 → 変数をstr()で囲む カウントするための変数を初期値0にして作成する カウントするための変数「count1」に1を足す処理 カウントするための変数「count2」に1を足す処理

Slide 55

Slide 55 text

福島県立いわき総合高等学校 課題 55 ガチャプログラムを利用して 100連ガチャ で何が何回出たかカウントしよう 出力例

Slide 56

Slide 56 text

福島県立いわき総合高等学校 ③ 標準入力のやり方を覚えよう 56 ◼ キーボードから入力した値を利用する #文字を入力する場合 A = input("文字を入力してください") print(A + "が入力されました") #数値を入力する場合 B = int(input("数値を入力してください")) print(str(B) + "が入力されました") Aに入っているのは文字なので、そのままつなげて出力できる。 Bに入っているのは数値なので、文字に変換して出力する。

Slide 57

Slide 57 text

福島県立いわき総合高等学校 ③ 標準入力のやり方を覚えよう 57 ◼ 計算をする #Print文の中で計算する場合 C = int(input("数値を入力してください")) print(5 * C) #Print文の前で計算する場合 D = int(input("数値を入力してください")) D = 8 * D print(D)

Slide 58

Slide 58 text

福島県立いわき総合高等学校 課題 58 ◼ 太郎君の所持金はA円である(Aは入力する) 1本5円の鉛筆を何本買えるか計算する プログラムを作ろう 入力例 100 出力例 20

Slide 59

Slide 59 text

福島県立いわき総合高等学校 発展課題 59 次郎君は、一直線の道路上で散歩をしている。 次郎君は以下の行動を、行動 A → 行動 B → 行動 A → … のように 交互に繰り返す。 行動 A : 3 m 前に進む。 行動 B : 2 m 後ろに戻る。 行動 A と行動 B を合わせて X 回行ったとき、 はじめの位置から何 m 前に移動したことになるかを計算する プログラムを作ろう 入力例 3、出力例 4 入力例 6、出力例 3 ヒント(if を上手に使いましょう)

Slide 60

Slide 60 text

福島県立いわき総合高等学校 プログラミングの基本を身につけよう3 情報科

Slide 61

Slide 61 text

福島県立いわき総合高等学校 今日やること ① 配列を使ってガチャをよりリアルにする ② 練習問題を解く ③ 二重ループ(for文)について理解する ④ 二重ループ(for文)についての練習問題を解く

Slide 62

Slide 62 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする ◼ Pythonにおける配列(リスト) 配列(リスト)名 = [ ] で表現される sample_list = ["A", "B", "C", "D", "E"] ◼ 変数と配列(リスト)の違い 62

Slide 63

Slide 63 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする ◼ Pythonにおける配列(リスト) 63

Slide 64

Slide 64 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする ◼ Pythonにおける配列(リスト) 64

Slide 65

Slide 65 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする ◼ Pythonにおける配列(リスト) やってみよう sample_list = ["A", "B", "C", "D", "E"] print(sample_list[0]) print(sample_list[1]) print(sample_list[2]) print(sample_list[3]) print(sample_list[4]) 65

Slide 66

Slide 66 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする やってみよう import random ran1 = random.randint(1,100) ←レア度の抽選用 ran2 = random.randint(0,9) ←各レア度における種類の抽選用 #print(ran1) #print(ran2) LR = ["LR①","LR②","LR③","LR④","LR⑤"] UR = ["UR①","UR②","UR③","UR④","UR⑤"] SSR = ["SSR①","SSR②","SSR③","SSR④","SSR⑤"] SR = ["SR①","SR②","SR③","SR④","SR⑤","SR⑥","SR⑦","SR⑧","SR⑨","SR⑩"] R = ["R①","R②","R③","R④","R⑤","R⑥","R⑦","R⑧","R⑨","R⑩"] N = ["N①","N②","N③","N④","N⑤","N⑥","N⑦","N⑧","N⑨","N⑩"] 各レア度における種類を配列で準備する 次ページに続く 66

Slide 67

Slide 67 text

福島県立いわき総合高等学校 ① 配列を使ってガチャをよりリアルにする if ran1 <= 1: ← レア度がLRだった場合(1%) if ran2 <= 1: print(LR[0] + "が当たりました") elif ran2 <=3: print(LR[1] + "が当たりました") elif ran2 <=5: print(LR[2] + "が当たりました") elif ran2 <=7: print(LR[3] + "が当たりました") else: print(LR[4] + "が当たりました") elif ran1 <= 6: ← レア度がURだった場合(5%) UR,SSR,SR,R,Nの場合も続けて作ってみよう UR,SSRは5種類、SR,R,Nは10種類ある 67 レア度LRの種類を抽選して 表示する処理を追加

Slide 68

Slide 68 text

福島県立いわき総合高等学校 課題 各レア度における種類を追加した 100連ガチャ(カウント付き)を作ろう! 68 LR①は1回出ました LR②は0回出ました LR③は0回出ました LR④は1回出ました LR⑤は0回出ました UR①は0回出ました … N⑩は3回出ました 出力例

Slide 69

Slide 69 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q1. 変数の練習 xという変数に2を代入し、それを3倍した数を出力してください。 期待する出力:6 69

Slide 70

Slide 70 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q2. 四則演算の練習 変数aに10を代入、変数bに2を代入し、aとbの和、差、積、商を出力 してください。 期待する出力: 12 8 20 5.0 70

Slide 71

Slide 71 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q3. 余りを計算する練習 変数aに5を代入、変数bに3を代入し、aをbで割った時の余りを求め てください。 期待する出力:2 71

Slide 72

Slide 72 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q4. べき乗を計算する練習 変数aに5を代入、変数bに10を代入し、aのb乗、 つまりabを出力してください。 期待する出力:9765625 72

Slide 73

Slide 73 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q5. if,比較演算子の練習 変数aに5を代入し、aが偶数ならTrue、そうでなければFalseを出力 してください。 期待する出力:False 73

Slide 74

Slide 74 text

福島県立いわき総合高等学校 ② 練習問題を解く ◼ Q6. forの練習 1以上50以下の整数を小さい順に、1行ずつ改行して出力してくださ い。 期待する出力: 1 2 3 … 50 74

Slide 75

Slide 75 text

福島県立いわき総合高等学校 ③ 二重ループ(for文)について理解する やってみよう for i in range(1, 10): for j in range(1, 10): print(i * j, end=" ") print() 75 外側のループが縦(1の段、2の段) 内側のループが横 を表している 改行せずに 続ける方法 改行だけ出力

Slide 76

Slide 76 text

福島県立いわき総合高等学校 ④ 二重ループ(for文)についての練習問題を解く ◼ Q7.二重ループの練習 以下の図形を出力してください。 期待する出力: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 76

Slide 77

Slide 77 text

福島県立いわき総合高等学校 ④ 二重ループ(for文)についての練習問題を解く ◼ Q8.二重ループの練習 以下の図形を出力してください。 期待する出力: * * * * * * * * * * * * * * * 77 ヒント:range(a,b)には変数も指定できるよ

Slide 78

Slide 78 text

福島県立いわき総合高等学校 モデル化とシミュレーション 情報科

Slide 79

Slide 79 text

福島県立いわき総合高等学校

Slide 80

Slide 80 text

福島県立いわき総合高等学校

Slide 81

Slide 81 text

福島県立いわき総合高等学校

Slide 82

Slide 82 text

福島県立いわき総合高等学校

Slide 83

Slide 83 text

福島県立いわき総合高等学校 実習1 83 ガチャプログラムで 確率シミュレーションを 行ってみよう

Slide 84

Slide 84 text

福島県立いわき総合高等学校 「ガチャ」の確率シミュレーション • 当たり1%のガチャを100回引くとき、自分は何回目くらいで 最初に当たるか? • 当たり1%のガチャを、クラスの40人がそれぞれ100回ずつ 引く。1回も当たりが出ない人は何人いるだろう? 84

Slide 85

Slide 85 text

福島県立いわき総合高等学校 ファイル名入力 (なんでもOK) デスクトップの 「Project」を選択 「ガチャ」の確率シミュレーション

Slide 86

Slide 86 text

福島県立いわき総合高等学校 9回目と77回目で LRが2回当たった場合 「ガチャ」の確率シミュレーション

Slide 87

Slide 87 text

福島県立いわき総合高等学校 87 シミュレータを作り、理論確率を調べよう

Slide 88

Slide 88 text

福島県立いわき総合高等学校 88 シミュレーションの結果は? ①100回引いたときに、すべて外れている人の確率はいくつ だろう。 ②クラスのほぼ全員(95%)が当たりを引くためには何回 ガチャを引けばいいだろうか。 ③レア度を1%から10%にすると当たる確率はどうなるか。 (「確率」シートから考えてみよう)

Slide 89

Slide 89 text

福島県立いわき総合高等学校 実習2 アイテムをコンプリートするには 何回ガチャを引けばいいのか? 89

Slide 90

Slide 90 text

福島県立いわき総合高等学校 全てのアイテムをコンプリートするためには?

Slide 91

Slide 91 text

福島県立いわき総合高等学校 金額を変えてシミュレーション

Slide 92

Slide 92 text

福島県立いわき総合高等学校 アイテムの数が増えると・・・?

Slide 93

Slide 93 text

福島県立いわき総合高等学校 まとめ