1 もくじ
2 繰り返し文とは
今まで学んだプログラムでは、前から順番にコードが実行され、最後まで処理が終わると終了していました。 しかし、実際のゲームではどうでしょうか?多くの場合、プレイヤーが「終了」を選択するまでゲームは動き続けます。 for文を用いることで、同じ処理を繰り返し行うことができます。
3 for文の構造
実行結果
1
2
3
4
繰り返し複数の処理を行う場合は、それらすべてをインデントする必要があります。
iは繰り返しに使う変数です。慣例的にi,j,kといった文字がよく用いられます。
range()の部分が変数の範囲です。ただし、初めの数は含まれるが、終わりの数は含まれないことに注意してください。
上のコードではiが1から4の範囲で処理が繰り返されます。
変数の範囲ではなく、繰り返し回数を指定することもできます。この場合も、5ではなく4で終わることに注意してください。
実行結果
0
1
2
3
4
変数の増加する幅を3つめの引数で指定することもできます。
実行結果
2
4
6
8
10
3.0.1 Challenge9
6の段の九九を出力するプログラムを作成してください。
3.0.2 解答
4 二重ループ
for文を入れ子構造にすることで、より複雑な処理を行うことができます。 以下のプログラムを実行してください。
どのように動作するのか、理解するのが難しいかもしれませんが、順を追って考えましょう。
- 外側の繰り返し文に入ります。
iは1です。 - 内側の繰り返し文に入ります。
jも1です。 - 内側が繰り返されて
jが1,2,3,…と増えていきます。つまり、1x1,1x2,1x3と出力されていきます。 jが9までいくと内側の繰り返しから抜けます。- 外側が繰り返され、
iが1つ増えて2になります。 - 再び内側の繰り返し文に入ります。
jは1から繰り返されて1,2,3,…と増えていきます。つまり、2x1,2x2,2x3と出力されていきます。 - 以上が繰り返され、9の段までいくと終わります。
5 マップを表示してみよう
今までに学んだことを組み合わせると、簡単なマップ表示ができます。
map_data = [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 0, 1, 0, 1],
[1, 0, 1, 0, 0],
[1, 0, 1, 1, 1],
]
# 配列の数字を記号に変換する関数
def drawmap(n):
if n == 0:
return "□"
elif n == 1:
return "■"
else:
return " "
# 地図を表示する
for i in range(5):
line = "" # 各行の文字列を作成
for j in range(5):
line += drawmap(map_data[i][j]) # 配列の上からi番目、左からj番目を文字列に加える
print(line) # 行ごとに出力コードを読んで仕組みを理解してみてください。配列、関数、if文、for文と今まで学んだ要素が詰まっています。分からないところがあれば、その解説ページに戻って確認してください。
1行目のmap_dataはマップのデータを持つ2次元リストです。1は壁や障害物を表し、0は空のスペースを表しています。
10行目のdrawmap(n)はn が 0
なら「□」、1
なら「■」を返す関数です。0と1以外の値が入った場合はスペースを返すようにしています。
19行目からが今回学習したfor文です。変数lineを使って、各行を作成しています。