次に、繰り返しと分岐について説明します。
コンピュータプログラムは、「繰り返しと分岐によってデータを処理する」ものといっても過言ではありません。
繰り返し構文
次のプログラムは、団子のように丸を 3 つ並べて表示します。
size(300,300) for n in range(0,3): ellipse(width/2, 100+50*n, 50, 50)
少し説明します。
- for 文
プログラムの基本は繰り返しと分岐です。for 文は代表的な繰り返し構文です。
for n in range(0,3):
for文は
for 変数 in リスト:
という形になっており、リストから値をひとつづつ取り出して、それを変数に入れ、リストにある数字の数だけ処理を繰り返します。 - range(0,3)
range 文はリストを作り出します。
リストとは、データを並べたもので、角かっこで囲い、数値を並べます。
range文はrange(start, stop, step)となっており、startから始まり、stepづつ増やして(stepを省略するとstep=1)となる)、endの一つ手前までの数値の並びを生成します。
range(0,3)は
[0,1,2]と同じ意味となります。
- width, height
ウインドウの幅と高さを示す予約語です。
数値を使う代わりに width/2 とすることで、size の値を変えても画面の中心に円をかきます。 - 繰り返される範囲
for 文で繰り返される処理は、for n in rang(0,3): のコロンの後、
インデント(字下げ)されている行になります。size(300,300) for n in range(0,3): fill(255,0,0) ellipse(width/2, 100+50*n, 50, 50)
のように書けば、fill文とellipse分が繰り返されます。
size(300,300) for n in range(0,3): fill(255,0,0) ellipse(width/2, 100+50*n, 50, 50) ellipse(width/2+50, 100, 50, 50)
とすると、最後のellipse分は繰り返されません(1回だけ実行される)。
練習問題
- 時計の文字盤のように、丸を 12 個、円形に並べて表示してください。
分岐と比較演算子
次の例は、色を 2 色に交互に塗り分けながら、6 個の丸を書いています。
size(300,300) background(0) smooth() for n in range(0,6): if(n%2==0): fill(255, 0, 0, 125) else: fill(0, 0, 255, 125) ellipse(50+40*n, 50+40*n, 80, 80)
- if 文
プログラムの基本構造のもう一つ、分岐構造です。
if に続くカッコ () の中が真のときのみ、if 文に続くブロック(インデントされている行)が実行されます。
== (イコール2つ)は両辺が等しいかどうかを調べる比較演算子です。
代入文(= イコール1つ)とは異なりますので注意してください。
比較に関係する演算子には次のようなものがあります。
== | 等しい |
> | より大きい |
>= | 以上 |
!= | 等しくない |
< | より小さい |
<= | 以下 |
and | かつ(AND) if( (x>0) and (y>0) )とすることで、xもyも0より大きい時にブロックが実行される。 |
or | または(OR) if( (x>0) or (y>0) )とすることで、xかyのいずれかが0より大きい時にブロックが実行される。 |
if 文に引き続いてelse 文を使うことで、()の中が成り立たなかったときに実行する命令を書くことができます。
if(x>0):
(xが0より大きかった時に実行される部分)
else:
(xが0以下だった時に実行される部分)
- % 剰余演算子
5 行目で使っている % は整数型の演算子で、割り算の「あまり」を出す演算子です。例えば
a = 8%2
では a に 0 が、(8を2で割った余り 0)
a = 8%3
では a に 2 が代入されます。 (8を3で割った余り 2)
これを使って
n を 2 で割って、余りが 0 のとき(偶数)とそれ以外の時(奇数)で
色を変えています。
比較演算子は、左辺が計算式になっていても OK です。((x+1)==(3+1)など)
(代入演算子の場合は、左辺が単独の変数になっている必要がある。x=3+1など)
(代入演算子の場合は、左辺が単独の変数になっている必要がある。x=3+1など)
例題
- 前の問題で作った例題で、3 時、6 時、9 時、12 時方向の丸だけ色を変えてください。