
高等学校情報のプログラミング教育を考える: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型のオブジェクトという」としておくくらいか。
実際に,次のような実験をしてみるとわかる。
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 の値を表示するプログラム」が例として載っているが,コードは次のようになっている。
しかし,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 が使える。珍しい。
================
次回はユーザー定義関数