繰り返し構造
繰り返し構造とは、判定条件が満たされている間、一連の処理を繰り返す構造である。
繰り返し構造1 for文
code:繰り返し構造の例
for a in range(10):
print(a)
code:実行結果
0
1
2
3
4
5
6
7
8
9
for文のページでも触れたが、このプログラムは、変数aの内容を0にし、10回繰り返す。数を増やす仕組みにはrangeを使っている。 その中で変数aの内容を1ずつ増やしながら、変数aの中身をprintする。これは「カウンタ技法」と言い、繰り返しの中に値が変化する変数があり、それを使うことで、今が何回目の繰り返しかを把握することができるのである。 ただし、この変数aの中身を0にすることを忘れてしまうと、プログラムを実行する際に、前の実行時の値が変数aに残っていることがある。特に繰り返しを行う場合は、カウンタに使う変数は、最初に初期化(0を代入すること)をしておくと良い。
カウンタ技法を理解するためには、何回目の繰り返しで、変数xの中身がどうなるのかをイメージすることだ。 試しに書き出してみると、このようになる。
1回目:a=0
2回目:a=1
3回目:a=2
4回目:a=3
5回目:a=4
6回目:a=5
7回目:a=6
8回目:a=7
9回目:a=8
10回目:a=9
では次に、こちらのプログラムを実行してみよう。
code:繰り返し構造の例2
a = 0
b = 0
for a in range(10):
b = b + 1
print(b)
code:実行結果
1
2
3
4
5
6
7
8
9
10
変数aは0〜9だったのに対して、変数bは1〜10に変化した。
変数bが1から始まる理由は、繰り返しの前に変数bが0の状態で、
繰り返す度に1が足されていくからである。
このコードの中の「b = b + 1」というのは、
「変数bの中身を、今の変数bの値に+1したもので入れ替える」という意味で、繰り返す度に、変数bに1をどんどん足していく役割をしている。
本来のプログラミング言語では、よくこの表現をしている。
これを応用すれば、変数bの値を2ずつ増やしたり、かけ算した値などを代入できそうだ。
繰り返し構造2 While
code:繰り返し構造2の例
a = 0
while a < 10:
print(a)
a = a + 1
code:実行結果
0
1
2
3
4
5
6
7
8
9
こちらは、While文を使って、繰り返しをしている。 こっちでも同じことが起こる。
これは、繰り返すための条件を決めて、その条件を満たす間ずっと繰り返すというプログラムである。
繰り返す回数が決まっていない場合はこちらを使う。
これを使う際は、繰り返しの中身が、何度か繰り返したら必ず終わる内容でないと、一生終わらない
試しにこちらも実行してみよう。
code:繰り返し構造2の例2
a = 0
while True:
print(a)
a += 1
code:実行結果
0
1
2
3
4
...と永遠に続く
ね?終わらないでしょ?プログラムを強制的に終わらせたいのなら、「Ctrl + c」を押して停止させよう。
このWhile文のTureというのは、「条件を満たしている」という意味。つまり、Trueと書いてあるなら条件を満たし続けるので、終わらない止まらないプログラムが出来22上がる。
先ほどのプログラムを改良してみると、こうなる。
code:breakの例
a = 0
while True:
if a > 3:
break
print(a)
a += 1
code:実行結果
0
1
2
3
これも同じような考えで実行する繰り返し構造である。
これは繰り返しが終わる条件を設定し、その条件を満たしたら繰り返しを終える。というプログラムである。さっきの内容と似ているが、繰り返しを続ける条件なのか終わる条件なのかで違ってくる。
こうした繰り返し構造で使える命令は、breakの他にcontinueがある。
code:continueの例
a = 0
while a < 10:
print(a)
a += 1
if a % 2 == 0:
continue
print("===")
code:実行結果
0
===
1
2
===
3
4
===
5
6
===
7
8
===
9
このプログラムでは、変数aの値が1ずつ増えていき、もし変数aの中身を2で割った時の余りが0なら、それより下の部分を飛ばして上に戻るように動く。つまり、変数aの中身が偶数なら、「===」がprintされない。 必須のテクニックではないが、使えるタイミングがあれば活用してほしい。
課題 kadai5
繰り返しごとに変数の内容を10ずつ増やしていき、100まで増えたら終わるプログラムを作成せよ
code:kadai4の実行結果
10
20
30
40
50
60
70
80
90
100
課題 kadai6
リストの中身を順番に出力するプログラムを作成せよ。また、リストについて理解したいのなら、リスト(配列)を読むこと。 code:kadai6のヒント
for i in range(7):
課題 kadai7
何か数を入力すると、1からその数までの総和(合計のこと)を求めるプログラムを作成せよ
kadai7に苦しむ人が増えている。kadai7がどう動くのかについては、下に実行結果をすでに追記した。
これに加えて、kadai7完成に少しでも近づけるように、次の順番にプログラムを作ってみることをおすすめする。
何か数を入力すると、1からその数まで続けて出力するプログラム
code:実行結果
5 ←5と入力すると、1〜5までの数が表示される
1
2
3
4
5
これができたら、kadai7に取り組むと良い
code:kadai7のアルゴリズムのヒント
キーボードからの入力を整数値で受け付けて、変数に代入する
1からキーボード入力した数まで繰り返す
●●●●●●●●●●●●●●●●
結果を出力する
code:kadai7の実行結果
=========== RESTART: C:User/jun/hhkbsaiko.py ==========
10 ←10と入力してEnterキーを押したら
55 ←1+2+3+4+5+6+7+8+9+10の答えが出力される
code:kadai7の実行結果2
=========== RESTART: C:User/jun/hhkbsaiko.py ==========
6 ←6と入力してEnterキーを押したら
21 ←1+2+3+4+5+6の答えが出力される
課題 kadai8
kadai7を改良して、1から入力した数までの偶数のみの総和を求めるプログラムを作成せよ
code:kadai8の実行結果
=========== RESTART: C:User/jun/hhkbsaiko.py ==========
10 ←10と入力してEnterキーを押したら
30 ←2+4+6+8+10の答えが出力される