見出し画像

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

高等学校情報のプログラミング教育を考える(1)はこちら 。内容は「はじめに」「インストールと起動」「書法」

算術演算子

 四則計算の + ,- , * / は,各言語共通。
 累乗は ^ が多いが Python は **
 剰余は %  CindyScriptなどでは mod(n,m) という関数で求める。
 計算にはこの他,天井関数や床関数も必要だが,それは「応用」だろう。

変数

 変数の概念を説明するのに,「名前を付けた箱」を使っている本は多い。今,ベースとして使っている「みんなのPython 第4版」でもそうだ。私が始めてプログラミングを学んだ本でも確かそうだった。しかし,これが適切かどうかは疑問が残る。
 授業では,高校生なので,「数学の「変数」のようなもの。具体的な値を代入して使う」と説明している。たとえば「x=3」は「xに3を代入する」という数学のイメージと合致するからだ。
 問題は,プログラミングでは = が代入であって「等しい」ではないこと。いくら注意しても間違える生徒がいる。これは変数の概念の問題ではなく,記法の問題。
 変数名は半角アルファベットが基本で,大文字と小文字は区別する,という方針で進める。数字,アンダースコアは「使える」くらいにしておくのがよいだろう。漢字も使えるがあまりメリットはないので授業では触れないことにする。これはCindyScriptでも同様である。

リテラル

 「リテラル」という言葉を使う入門書は多い。データそのものの表記のことだが,筆者の授業ではこれまでこの言葉を使っていない。CindyScriptのマニュアルでも使っていないからだ。
 これに限らず,Pythonではオブジェクト指向言語で,メソッドやクラスといった用語が出てくる。こういった「用語」が多いのはあまり初心者向けではない。CindyScriptは関数型プログラミング言語で,用語が少ないというのが初心者向けでもあるという理由である。
 キーボード操作もままならないような高校生では,こういった用語はできるだけ少ない方がよい。実際にはできてくる教科書を見てみないと何ともいえないが,基本的な概念(変数,制御構造,ユーザー定義関数)くらいで済ませるのが望ましいだろう。

文字列の扱い

 文字列はダブルクォーテーションでくくる。シングルクォーテーションも使えるが,「みんなのPython 第4版」でも書かれている通り,キーボードに慣れていないとシングルクォーテーションはバッククォート(グレイヴ・アクセント)を誤入力するからだ。したがって,「シングルクォーテーションも使える」としておいて,実際のコード例ではダブルクォーテーションを使っていくのがよいだろう。
ダブルクォーテーションも,文字が漢字だった場合,そのまま漢字入力してしまう生徒がいる。

複合演算子

 += ,-= ,*= , /= の複合演算子は便利だが,プログラミングでは = が代入の意味であることを習慣づけるためにも,始めのうちは a = a + 2 のように記述していくのがよいだろう。

変数の型

 C言語では変数の型については厳格で,事前に宣言する必要もある。PythonとCindyScript では宣言なしに使え,代入された時点で型が決まる。これは,初心者にとっては楽だ。ただし,変数には型があることを意識する必要はある。数値と文字列の区別だけでもよい。型の異なる変数どうしでは(数値と文字列では)演算はできない。
 CindyScript と Python で異なるのは,+ の演算だ。文字列+文字列 は,文字列の結合になり,これは共通。文字列+数値 の場合,CindyScriptでは数値を文字列化して結合するが,Pythonではそうではなく,エラーになる。数値を文字列として扱いたいのであれば,型変換を行う。CindyScript では text() 関数を用い,str() 関数を用いる。逆に,文字列を数値にするには,CindyScriptでは parse() を,Pythonでは,int() または float() を使う。前者は整数の場合。

リスト

 複数の値をまとめて扱うのがリスト。C言語などでは配列に相当する。CindyScriptとPythonではいずれもリストで,記述も同じ。すなわち,角括弧でくくって,コンマで要素を区切って並べていく。

リストの要素へのアクセス

 リストの要素へのアクセスは,リスト名[インデックス]で行う。インデックスは0から始まる。ここはCindyScriptと異なるところだ。CindyScriptでは,リスト名_インデックス で,インデックスは1から始まる。Pythonの記法は,配列と同じだ。インデックスに負の値を使うことに関しては(末尾からカウント)どちらも同じで,この場合は0からではなく−1からカウントする。

リストの要素の削除

 Pythonでは,del文でリストの要素を削除できる。CindyScriptにはこの記法はない。
del リスト名[インデックス] とする。

スライス

 Pythonでは,リストの要素のうち,連続したいくつかの要素を取り出す「スライス」という方法がある。
listb=lista[最初の要素のインデックス:最後の要素のインデックス+1] という書式で,たとえば 

listb=lista[3:6] 

で,iista の4番目から(インデックスは0から始まるので)6番目までの要素をからなるリスト listb を作ることができる。このとき,「どこからどこまでか」が少しややこしい。
CindyScriptでも listb=lista_(4..6) で同様のことができる。CindyScriptではインデックスが1から始まるので数えやすい。

リストのネスティング

PythonもCindyScriptも,リストのネスティングができる。

最大値など
 max():リストの要素の最大値
 min():リストの要素の最小値
 len():リストの要素の個数
 sum():リストの要素の和
これらは,PythonもCindyScriptもまったく同じ。


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

次回は制御構造(繰り返しと条件分岐)