大学入試共通テストサンプル問題の問題2を教材化する
3月24日に大学入試センターで公表された,情報Ⅰのサンプル問題から,プログラミングの問題2は,平易でよい問題だ。外部ライブラリのインポートも不要で,基本的な知識だけでプログラムが書ける。
授業でPythonを扱っている牛田みほさんが,さっそく取り組んでおられる。
題材は,選挙におけるドント方式。現行教科書でも,第一学習社の「社会と情報」には載っている。
ただし,「発展」のモデル化とシミュレーションだから,やっていない学校は多いだろう。筆者はやらなかったが,その理由は,この図では,2,3,・・・ で割った値を計算式で各セルの値とし,目視で当選者を決めているようだからだ。その時点で考えるのやめた。よく見ると,G2セルで当選得票数を計算しているから,セルの色を変えているのはマクロでやっているのだろう。しかし,Excelのマクロは教えていない。
今回のサンプル問題は,これとは異なるアルゴリズムでプログラミングしている。説明が会話形式になっていて冗長な感はあるが,これは共通テストの他の科目でも共通な傾向だ。問題文を読んで,必要な情報だけを的確に拾っていく読解力が求められる。
アルゴリズムは「手順」として示され,実際にそれを追ったものが問題として出されている。
これができれば,アルゴリズムがわかったことになる。
そのあと,コーディングしていくことになるのだが,教材化するなら,この図8は問題として,正解も示し,コードについては正解を示さずに(選択肢はそのまま提示),コーディングさせる,というのがよさそうだ。正しい選択肢を選んで書くことができれば正しい結果が得られる。
コーディングにあたって,生徒が間違えそうなのは,繰り返しの回数だろう。
JavaScript なら,アはそのまま3でよい。(添え字は0スタート)
ここを,Pythonだと for m in range(3) とやってしまいそうだ。あるいは,range(0, 3) 。いずれにしても,これだと 0, 1, 2 の3回しか繰り返されない。
以前,授業報告でも書いたが,「まで繰り返す」と「回繰り返す」の換算ができない,というおそろしい実態がある。乱数の発生で,0以上1未満の「未満」がわからないという実態もある。このことは,正解を渡しておくと,かえって間違えそうだ。
他には特に問題はない。正解を与えなくても,考えながらやって,違う結果が出れば修正する(デバッグ),という学習活動でよいだろう。
なお,図8の途中経過も表示させるとなおよい。Python の print 文だと,改行されてしまうので,
for i in range(4):
print(Hikaku[i], end = " ")
for i in range(4):
print(Tosen[i], end = " ")
print("")
とする必要があるが,普段から使っていれば問題ないだろう。 Jupyter Notebookだと次のようになる。
候補者が足りなくなったときの修正を加えても25行程度だから,授業1コマの内容としてちょうどよいのではないだろうか。