見出し画像

高等学校情報のプログラミング教育を考える:Python(4)

ここまでの内容
第1回:「はじめに」「インストールと起動」「書法」
第2回:「算術演算子」「変数」「リテラル」「文字列の扱い」「複合演算子」
    「変数の型」「リスト」
第3回:「繰り返し:for 文」「条件判断 if 文」

ユーザー定義関数

 ユーザー定義関数を定義する書式

def 関数名(引数1=初期値, 引数2=初期値, ・・・) :
 関数定義

・初期値は設定しなくてもよい。
 初期値を設定しておくと,呼びだすときにその引数を省略することができる。
・関数定義の中の変数はローカル変数
・戻り値を設定する場合は,最後に return 値 を書く。

グラフを描く

グラフを描くには,ライブラリ NumPy と matplotlib をインポートして利用するのだが,y=sin x のグラフを描くだけでも,たとえば

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
plt.plot(x, y)
plt.show()

これだけのコードを書く必要がある。

描画部分は

x = np.arange(0, 2*np.pi, 0.01)
t = plt.plot(s)

の2行でもよいが,いずれにしてもタイピング量が多いのと,コードの意味(メソッドの考え方)がわかっていないと応用はできない。

CindyScriptなら

plot(sin(x),start->0,stop->2*pi)

の1行で済むのと大違いである。
キータイピングやメソッドに慣れてくればどうということのないことなのだが,テキストに書いてあるコードを打ち込んでいくだけで精いっぱいで(しかもタイプミスが多い),意味まで考えていない高校生が多いという実情を考えると,かなり困難が伴う。

関数のグラフや曲線を描こうとすると,以下のような知識が必要だが,これらは「みんなのPython第4版」には載っていない。
結局ネットで検索した。
たとえば,matplotlib のマニュアル(documentation)

座標軸を描く

水平線,垂直線を描く axhline , axvline を使う

plt.axhline(lw=0.5,color='k')
plt.axvline(lw=0.5,color='k')

媒介変数表示の曲線

たとえば,円の場合,

plt.axes().set_aspect('equal')
t = np.arange(0, 2*np.pi, 0.01)
x = np.cos(t)
y = np.sin(t)
plt.plot(x, y)
plt.show()

とすればよい。plt.axes().set_aspect('equal') がないと,縦横のアスペクト比が等しくないので見かけが楕円になってしまう。
CindyScriptなら

plot([cos(x),sin(x)])

の1行だ。定義域を明示したいなら,

plot([cos(x),sin(x)],start->0 , stop->2*pi)

とする。start->0 はデフォルトなので書かなくてもよい。

時計の取得とアニメーション

 たとえば,次のようなサイクロイド曲線のアニメーションを描くには,コンピュータの時計を利用する。

CindyScriptではこれが簡単にできるが,Pythonではどうするか。
ネットで検索したところ,次のようにして時計を取得すればよさそうだ。

from datetime import datetime  #日時を取得 
t0 = datetime.now()
s0 = t0.minute*60+t0.second
tm0 = 0
tm = 0
while tm < 10:
   t = datetime.now()
   s = t.minute*60+t.second
   tm = s-s0
   if tm != tm0 :
     print(tm)
     tm0 = tm

分を秒に直して,秒と合計している。ただし,これだと,分が0をまたぐときに正しく動かないので時も含めて秒に直すか,別の方法をさがすことになるだろう。

========================================


 以上,これまでのプログラミング指導経験をもとに,必要なことだけ挙げてみたが,初心者向けでわかりやすくていいと思った「みんなのPython第4版」でも,これを読んだだけでは授業はできないと感じた。また,半分は知らなくても授業ではどうせ使わない内容でもある。
 教科書がどうなるか,まったくわからないが,たとえば,文科省の研修用教材の例にしても,生半可な理解ではエラーが起きたときに対処できない。なにしろ,生徒は,つづりは間違える,コンマとピリオドを間違える,ダブルクォーテーションを全角にするなど,ありえないような間違いをするのだ。

 さらに,学習指導要領解説や,研修用教材をあらためて読んで,「これでほんとにできるのか」という危惧が増している。次回以降は,タイトルを「高等学校「情報」のプログラミングを考察する」と題して,このあたりについて書いていこう。