同じプログラムなのに、実行するたびに結果が変わる。長いプログラムは部品に分けて名前を付ける
50分 | キーボードがあるとよい準備 教室コードは新しいものにする。「教師」を押す。Python はページの中で動く。
時間配分 前回まとめ・目標 4分 / 節1 毎回変わる 14分 / 節2 部品に分ける 14分 / 節3 作る 12分 / まとめ・自己評価・ふりかえり 6分
教科書: 新編情報Ⅰ 28 発展的なプログラム(p.78)。
この回の評価(指導要領 (3) ア(イ) イ(イ)。内容の取扱い(4)「関数の定義・使用によりプログラムの構造を整理する」。単元設計は 単元設計のページ)
ふりかえりの枚の自己評価の分布を見て、「まだ」が多い目標を次回冒頭で拾い直す。
ここまでのプログラムは、同じものを実行すれば毎回同じ結果だった。ゲームや予測では「毎回違う」が要る。それを作る道具が乱数。もう一つ、長いプログラムを部品に分ける関数を使う
さいころを、プログラムで1 行作れるか
前回「まだ」が多かった目標を 2 分拾う。リストの添え字が 0 から、はここで再確認しておく(今日の じゃんけん で使う)。
さいころとじゃんけん
関数を定義して使う
おみくじを自分で
同じ命令なのに、同じ結果にならない

※ 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。
同じ計算を 3 か所に書かない

数学の y = f(x) と同じ形。入れる値を引数、名前を関数名、返ってくる値を戻り値という
| def で定義する | 「この名前で、こういう計算をする部品を作る」と宣言する。書いただけでは動かない |
| 名前で呼び出す | circle(10) と書いたところで初めて中身が動き、return の値がそこに返る |
| よいところ | 同じ計算を何度も書かなくてよい。名前を見れば何をするか分かる。長いプログラムを機能ごとに整理できる |
2 分。「関数」は数学で既習。同じ言葉、同じ考え方だと結ぶ。引数・戻り値の読み方(ひきすう・もどりち)を板書。
※ def の行の終わりに「:」、中身は字下げ。return が戻り値。circle(r) と呼び出したところに、その値が返ってくる
進め方(12分) 実行 → hankei? に 10 → 314.0。
③の答え: def tri(a,b): 改行 return a*b/2。引数を 2 つ書くとき、区切りはコンマ。
要点 引数の名前(r)は関数の中だけの名前。呼び出す側の変数名と同じである必要はない。長いプログラムでは、機能ごとに関数に分けると読みやすく、直しやすい。目標 02。
コラム: 外部のプログラムの機能を呼び出す仕組みが API。天気・地図・交通の情報を自分のプログラムから使える。これも「関数を呼ぶ」の延長。
選択肢は自分で決める

※ 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 万回で効いてくる。
今日書いた関数を変換して「実行」し、同じ結果になることを確かめて、作った関数の名前を出す
進め方 作れた人から出す。うまくいかない形も価値がある。詰まっている生徒には、手順の何番で止まっているかを聞く。
5分。関数の定義と呼び出し。乱数の関数名も確認する。
道具は外で公開されている Web アプリ。この授業のページの中で開くので、別のページへは移らない。閉じれば、そのままこの枚に戻る。ブラウザの中で動き、入力はこの授業のサーバーには送られない。
3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る
1 分。「まだ」が多い目標は、次回の冒頭で拾い直す。
一文でよい。「〇〇を作った。△△を直したら思ったとおりになった」の形
3 分。ここで出たアイデアは、第11回の「身のまわりの手作業を任せる」の候補になる。書き留めておくよう伝える。