見出し画像

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

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

繰り返し:for 文

 Pythonの for 文は,C言語などとは少し異なる。
書式は

for 繰り返し変数 in シーケンス:

である。「シーケンス」のところは,「みんなのPython 第4版」では,「シーケンス(リストなど)」となっている。高校生の教材としては新しい用語を避けて,「リスト」とする方がよいかもしれない。
文法上の注意点は末尾にコロンを忘れないことと,処理内容は次の行以降にインデントして書くということだろう。
動作は,

シーケンスの要素をひとつずつ繰り返し変数に代入しながら繰り返す。

となるが,ここで,シーケンスは数のリストでなくてもよいというのが,C言語などの for と異なる概念である。つまり,指定するのは回数ではなく,整数列とも限らないのである。文字列のリストでもよいし,データのリストでもよい。それらを「順に代入しながら」繰り返すのだ。
 シーケンスとして range() 関数を使うことが多いが,range() 関数については for 文で使うシーケンスというだけでなく,関数として正しく理解しておく必要があるだろう。
 range()関数は,range 型のオブジェクトを返す。リストにするには list(range()) とするのだが,「みんなのPython 第4版」では range型のオブジェクトとは書かれておらず「リスト」となっている。
 オブジェクトの概念は初心者には難しいので,高校生向けの教材ではとりあえず「リスト」としておいて,注釈に「正確にはrange型のオブジェクトという」としておくくらいか。

実際に,次のような実験をしてみるとわかる。

画像1

range() の引数の書きかたは次の3通り。
range(stop) : 0から stop-1までの整数列を作る。ここで stop-1 までということが要注意
range(start,stop):start から stop-1までの整数列を作る。
range(start,stop,step):start から stop-1まで,step間隔で整数列を作る。

この点,「高等学校情報科「情報Ⅰ」教員研修用教材」では,制御構造の「反復」の例として
for 変数 in range(値1,値2,増減値):処理
を示し,
「変数の値を値 1 から値 2 の1つ前まで増減値の幅で変化させ ながら処理を繰り返す。」
と説明しているのだが,これだと for 文の正しい理解にはつながらないと思われる。
そればかりではない。
「変数 x に対して 10 を 5 回加算をしながらその都度 x の値を表示するプログラム」が例として載っているが,コードは次のようになっている。

画像2

しかし,for の行は 

for i in range(1,6):

でよいわけだ。step 値は 1 がデフォルトなので書く必要はない。
さらに,「5回繰り返す」のだから

for i in range(5):

の方が直感的だろう。
この研修用教材を,Pythonの知識がある程度ある前提で使うなら range(5) だし,そうでなければ,range() 関数の機能について
「i in range(1,6,1)を示す値は 1 ≦ i < 6 となることに留意する必要がある。」などといった説明ではなく,きちんと説明すべきだろう。

繰り返しの途中で抜ける

break を 使って,繰り返しの途中で抜けることができる。処理ブロックの中で
if 条件式:
 処理ブロック
 break

と記述する。

条件分岐 if 文

書式は

if 条件式:
 処理ブロック
else:
 処理ブロック

else if はなくてもよい。if 文はネストできる。このあたりはCindyScriptでも同じ。
Python には,複数の条件式を使うための elif もある。

if 条件式1:
 処理ブロック
elif 条件式2:
 処理ブロック
elif 条件式3:
 処理ブロック
・・・・

if文の条件式について

 条件式は,== (等しい) , != (等しくない) ,> , < , >= , <= などの比較の他に, in 演算子がある。a in seq  は,「a が シーケンス seq の中にあれば」という条件だ。CindyScriptでは contains(list,a)がこれに該当する。

論理演算子 and と or

「みんなのPython 第4版」では,if 文について,chapter 02 の「Pythonでプログラミングを始めよう」に書いてあるが,条件の and と or については 次の chapter03 「Pythonの基礎をマスターする」に書かれている。
書式は

 if A and B :
  処理ブロック

ここで,不等号を用いた比較で

a >= m and a < n  は m <= a < n  と記述できる。ちょっと便利。

真偽値 True , False についてもここで書かれている。

while文

「みんなのPython 第4版」では,chapter 03 の内容になる。「ループの応用」という位置づけだ。
書式は

 while 条件式 :
  処理ブロック

以降はCindyScriptにはない文法。

break と continue

break : ループから抜ける
continue : ループ内のそれ以降の処理をしないでループ先頭に戻る

ループでの else

for , while ループで else が使える。珍しい。

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

次回はユーザー定義関数