見出し画像

#14高校情報科の授業で初めてPython(パイソン)というプログラミング言語に取り組む 第14回(最終回)

 2020年度、初めて授業でPython(パイソン)というプログラミング言語に挑戦している。
 第14回の最終回は日本文教出版の『情報の科学』の教科書に沿って選択整列法のアルゴリズムを紙上で確認してから、教科書のフローチャートにしたがって、Pythonでプログラムを組んだ。
 そして後期期末考査に出題した。春休みに入って、ようやく後期期末考査の分析ができたので、合わせて振り返りたい。
 これからPython(パイソン)を学ぶ方の参考になれば幸いです。

学習内容

 教科書には、選択整列法で長さ50の配列の要素を昇順に整列するアルゴリズムが載っているが、初心者にはハードルが高く感じる。

 まずは長さ5の配列の要素を昇順に整列するアルゴリズムを説明した。なお、配列の添え字をiであらわし、添え字が0から4の5つの要素を持つ配列を考えることにする。

選択整列法

手順1 最大値を確定する
①b[0]とb[4]を比較し、大きい値がb[4]に入るよう入れ替える。
②同じように、b[1]とb[4]、b[2]とb[4]、b[3]とb[4]を比較し
最大値がb[4]となるよう値を入れ替える。

手順2 2番目に大きい値を確定する。
①b[0]とb[3]を比較し、大きい値がb[3]に入るよう入れ替える。
②同じように、b[1]とb[3]、b[2]とb[3] を比較し
2番目に大きい値がb[3]となるよう値を入れ替える。

手順3 3番目に大きい値を確定する
①b[0]とb[2]を比較し、大きい値がb[2]に入るよう入れ替える。
②同じように、b[1]とb[2]を比較し
3番目に大きい値がb[2]となるよう値を入れ替える。

手順4 4番目に大きい値を確定する
b[0]とb[1]を比較し、大きい値がb[1]に入るよう入れ替える。
4番目に大きい値がb[1]となる。必然的に最小値も確定する。

日本文教出版の教科書のフローチャートは次のようになっている。アルゴリズム2の中に、アルゴリズム1が入れ子になっていて二重の繰り返し文になっているところが、ちょっと難しい。


画像3

アルゴリズム1のフローチャート(日本文教出版『情報の科学』)

画像3

アルゴリズム2のフローチャート(日本文教出版『情報の科学』)

これを、GoogleColaboratoryを使って、Pythonのプログラムを組んだ。はじめはfor文の引数を空欄にして、生徒たちに考えさせた。

選択整列法 空欄付き


なお、rangeの引数が3つの場合、次の通りとなる。

for i in range(開始値,終了値,増分)
増分が正の値なら、開始値から終了値以上にならない範囲で増分刻みで増える。
増分が負の値なら、開始値から終了値以下にならない範囲で増分刻みで減る。

最終的に、このようになる。

 #選択整列法 
b = [6,3,1,5,8,2,4,7]
s = 0
for e in range(len(b)-1,0,-1):
   for a in range(s,e,1):
     if b[a] > b[e]:
         tmp = b[a]
         b[a] = b[e]
         b[e] = tmp
         print(b)               # 確認のため

生徒たちの様子

紙上で選択整列法の説明をした際、すぐに分かって「おもしろいなぁ」と言ってくれる生徒もいれば、「もう一回説明して!」と言う生徒もいた。生徒同士で教え合う時間をとったところ、ほとんどの生徒が理解できたようだった。

教科書のフローチャートは二重の繰り返し文になっている。紙上で確認したのと同じだと説明しても、ちょっと分かりにくかったようだ。

Pythonで穴埋めをさせてみると、各クラス5名くらいが何とか実行できたようだった。

後期期末考査

後期期末考査に同じ問題を出題した。選択肢で答える形式にした。

選択整列法 選択肢

採点したところ、空欄アの正解率が44%、空欄イの正解率が31%だった。
for文でrangeの引数が3つの場合にそれぞれの引数が何をあらわすか、二重の繰り返し文はどうやって動作するか、まだまだ説明が不足していたと反省している。

授業の終わりに

最終授業を終えた際、「プログラミング、楽しかったです。もっと情報の勉強をしたいんですけど、どこの大学がおすすめですか?」と生徒に聞かれた。

「もっと勉強したい」と思ってもらえて、嬉しかった。


この記事が気に入ったらサポートをしてみませんか?