一覧へ 情報Ⅰ (3) 第8回 | 発展的なプログラム
情報Ⅰ (3) コンピュータとプログラミング | 第8回

発展的なプログラム

同じプログラムなのに、実行するたびに結果が変わる。長いプログラムは部品に分けて名前を付ける

50分 | キーボードがあるとよい
教師用メモ

準備 教室コードは新しいものにする。「教師」を押す。Python はページの中で動く。

時間配分 前回まとめ・目標 4分 / 節1 毎回変わる 14分 / 節2 部品に分ける 14分 / 節3 作る 12分 / まとめ・自己評価・ふりかえり 6分

教科書: 新編情報Ⅰ 28 発展的なプログラム(p.78)。

この回の評価(指導要領 (3) ア(イ) イ(イ)。内容の取扱い(4)「関数の定義・使用によりプログラムの構造を整理する」。単元設計は 単元設計のページ)

  • 知識・技能 乱数と関数(関数名・引数・戻り値)の書き方と役割を理解している(体験01・02)
  • 思考・判断・表現 乱数とリストを組み合わせておみくじやじゃんけんを作り、関数で構造を整理している(体験03)
  • 態度 作ったプログラムを直して、思ったとおりの動きに近づけようとしている(体験03・ふりかえり)

ふりかえりの枚の自己評価の分布を見て、「まだ」が多い目標を次回冒頭で拾い直す。

前回のまとめ

まとめて持ち、条件で選び、人に聞いた

for の中の ifa=[5,12,7]a[0] が先頭input( )

ここまでのプログラムは、同じものを実行すれば毎回同じ結果だった。ゲームや予測では「毎回違う」が要る。それを作る道具が乱数。もう一つ、長いプログラムを部品に分ける関数を使う

さいころを、プログラムで1 行作れるか

教師用メモ

前回「まだ」が多かった目標を 2 分拾う。リストの添え字が 0 から、はここで再確認しておく(今日の じゃんけん で使う)。

今日の目標

授業の終わりにできるようになること

01
乱数を使って、実行するたびに結果が変わるプログラムを書ける
02
関数を定義して使い、関数名・引数・戻り値がどれかを言える
03
乱数とリストを組み合わせて、自分で考えたものを 1 つ作れる
01 | 14分
毎回変わる

さいころとじゃんけん

02 | 14分
部品に分ける

関数を定義して使う

03 | 12分
作る

おみくじを自分で

SECTION 01

毎回変わる

同じ命令なのに、同じ結果にならない

机の上でさいころを振っている高校生の手元。転がるさいころの目がいくつも重なって見える
体験 01

さいころ、そしてじゃんけん

やること ①実行を 5 回押して、数が変わるのを確かめる ② 1〜6 を 1〜100 に変える ③ 下のじゃんけんを実行する ④ リストに 'guu' 'tyoki' 'paa' 以外を足したら、乱数の範囲も変える(0〜3 に)
実行結果

※ import random は「乱数の機能を使えるようにする」1 行。random.randint(1,6) は 1 以上 6 以下の整数を 1 つ返す。リストと組み合わせると、選択肢からランダムに 1 つ選べる

教師用メモ

進め方(12分) 実行を 5 回。「全員が同じプログラムなのに違う数」。じゃんけんは te[0] が guu、te[2] が paa。乱数の範囲 (0,2) がリストの添え字と合っていることを確認する。

つまずき 選択肢を 4 つにしたのに randint(0,2) のままだと 4 つ目が絶対に出ない。バグだが動いてしまう。「動くけれど間違い」の例として拾う。

乱数は実行のたびに違う値になるので、シミュレーションに使える(第10回)。目標 01。

SECTION 02

部品に分ける

同じ計算を 3 か所に書かない

作業台の上で、ひとつの小さな箱に材料を入れると反対側から仕上がった品が出てくる仕組みを、高校生が何度も使っている
説明

関数 | 入れると、返ってくる

数学の y = f(x) と同じ形。入れる値を引数、名前を関数名、返ってくる値を戻り値という

ひきすう(入れる)
10
→
かんすうめい
circle( r )
r × r × 3.14
→
もどりち(返る)
314.0
def で定義する「この名前で、こういう計算をする部品を作る」と宣言する。書いただけでは動かない
名前で呼び出すcircle(10) と書いたところで初めて中身が動き、return の値がそこに返る
よいところ同じ計算を何度も書かなくてよい。名前を見れば何をするか分かる。長いプログラムを機能ごとに整理できる
教師用メモ

2 分。「関数」は数学で既習。同じ言葉、同じ考え方だと結ぶ。引数・戻り値の読み方(ひきすう・もどりち)を板書。

体験 02

円の面積を返す関数を、定義して使う

やること ①実行して半径に 10 を入れる ② 半径を 3 や 100 で試す ③ 三角形の面積を返す関数 tri(a,b) を足す(引数 2 つ、a*b/2 を返す) ④ 作った関数を print で呼び出す
実行結果

※ def の行の終わりに「:」、中身は字下げ。return が戻り値。circle(r) と呼び出したところに、その値が返ってくる

教師用メモ

進め方(12分) 実行 → hankei? に 10 → 314.0。

③の答え: def tri(a,b): 改行 return a*b/2。引数を 2 つ書くとき、区切りはコンマ。

要点 引数の名前(r)は関数の中だけの名前。呼び出す側の変数名と同じである必要はない。長いプログラムでは、機能ごとに関数に分けると読みやすく、直しやすい。目標 02。

コラム: 外部のプログラムの機能を呼び出す仕組みが API。天気・地図・交通の情報を自分のプログラムから使える。これも「関数を呼ぶ」の延長。

SECTION 03

作る

選択肢は自分で決める

神社のおみくじ箱から出た紙を開いて、うれしそうに見せ合っている高校生2人
体験 03

おみくじを作る | 中身は自分で決める

やること ①実行する ② kuji の中身を自分の言葉に変える(引用符で囲む) ③ 選択肢を増やしたら len( ) が数えるので範囲は直さなくてよい、を確かめる ④ 余裕があれば、名前を input で聞いて「〇〇さんは 大吉」と出す
実行結果

※ len(lst) はリストの個数を返す。個数が 4 なら添え字は 0〜3 なので len(lst)-1 まで。こう書くと、選択肢を増やしても直す場所がない

教師用メモ

進め方(10分) 実行 → 4 つのどれか。中身を変えて再実行。

ここが今日の山場 体験01 では「選択肢を増やすと乱数の範囲も直す」必要があった。関数と len( ) を使うと、直す場所が 1 か所に減る。「同じことを 2 か所に書かない」がプログラムの工夫。

④は name=input('namae?') と print(name+' san : '+hiku(kuji))。文字どうしは + でつなげる。

作ったものを 2 人で見せ合う時間を 2 分。目標 03。

まとめ

乱数と関数 | 変わるものを作り、変わらない部品にまとめる

乱数指定した範囲の数が不規則に出る仕組み。import random と random.randint(値1,値2)。実行のたびに違う結果になるので、ゲームやシミュレーションに使える
関数機能ごとに分けた部品。def 名前(引数): で定義し、return で戻り値を返す。y=f(x) の f が関数名、x が引数、y が戻り値
関数のよさ同じ処理を何度も書かない。名前で何をするか分かる。直す場所が 1 か所で済む。長いプログラムを整理できる
API外部のプログラムの機能を呼び出す仕組み。天気・地図・交通などの情報を、自分のプログラムから使える
教師用メモ

次回からモデル化とシミュレーション。今日の乱数が、次々回のさいころ 1 万回で効いてくる。

道具で作る

自分の関数を変換して、動くか確かめる

今日書いた関数を変換して「実行」し、同じ結果になることを確かめて、作った関数の名前を出す

Python ⇄ 共通テスト用プログラム表記 変換ツール関数を使ったプログラムを、試験の表記に変換する
  1. 「この枚で開く」を押す
  2. 今日書いた def のプログラムを左に貼って「→」
  3. 定義と呼び出しがどう書かれるかを見る
  4. 「実行」で結果が同じか確かめる
この授業のページの中で開く。終わったら「閉じてこの枚に戻る」で戻る
作ったものを、一文で
みんなの作ったもの
教師用メモ

進め方 作れた人から出す。うまくいかない形も価値がある。詰まっている生徒には、手順の何番で止まっているかを聞く。

5分。関数の定義と呼び出し。乱数の関数名も確認する。

道具は外で公開されている Web アプリ。この授業のページの中で開くので、別のページへは移らない。閉じれば、そのままこの枚に戻る。ブラウザの中で動き、入力はこの授業のサーバーには送られない。

今日のまとめ

3つの目標に、自分の書いたプログラムで答える

01
乱数 randint で毎回違う数。リストと組み合わせて じゃんけん。範囲と選択肢の数を合わせる
02
関数 def で定義、return で返す。引数 10 を入れると戻り値 314.0。名前で何度でも呼べる
03
作った おみくじの中身を自分で決めた。len( ) を使うと、増やしても直す場所がない
自己評価

今日の目標、自分はどこまで

3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る

今日の目標、自分はどこまで | 1 つずつ選ぶ
01乱数で、実行するたびに結果が変わるプログラムを書ける
02関数を定義して使い、引数と戻り値がどれか言える
03乱数とリストで、自分で考えたものを 1 つ作れた
できただいたいまだ
教師用メモ

1 分。「まだ」が多い目標は、次回の冒頭で拾い直す。

ふりかえり

作ったものと、直したところ

一文でよい。「〇〇を作った。△△を直したら思ったとおりになった」の形

みんなが作ったもの
教師用メモ

3 分。ここで出たアイデアは、第11回の「身のまわりの手作業を任せる」の候補になる。書き留めておくよう伝える。