ネストされたループ
複数の
if
やelse
文をネストして条件分岐を作成できるのと同様に、for
やwhile
ループをネストすることもできます。時間、分、秒を繰り返し処理することで、1日の時間を反復処理できます。
for h in range(24):
for m in range(60):
for s in range(60):
print(f'Time: {h}:{m}:{s}')
このプログラムの出力は、右に示すように1日のすべての可能なタイムスタンプになります。
まず
h = 0
からfor
ループが始まり、m = 0
を使って、0から59までのすべての秒を反復処理し、時間を表示します。次に、プログラムは
m = 1
を設定し、再びすべての秒を繰り返します。m = 2
を設定し、このプロセスをm = 59
に達するまで繰り返します。この時点で2番目のループが終了し、h
が1
になります。その後、h = 1
での分と秒の繰り返し処理が再び行われます。h
はその後2
、3
と増加し、h
が23
、m
が59
、s
が59
に達するまでこのサイクルが続きます。これですべての3つのループが終了します。Time: 0:0:0
Time: 0:0:1
Time: 0:0:2
Time: 0:0:3
Time: 0:0:4
Time: 0:0:5
Time: 0:0:6
Time: 0:0:7
...
Time: 0:9:20
Time: 0:9:21
Time: 0:9:22
Time: 0:9:23
Time: 0:9:24
...
Time: 23:59:54
Time: 23:59:55
Time: 23:59:56
Time: 23:59:57
Time: 23:59:58
Time: 23:59:59
ネストされたループを使って、さらに細かいオブジェクトを画面に表示することもできます。
for i in range(10):
for j in range(i + 1):
if j % 2 == 0:
print('*', end='')
else:
print('#', end='')
print()
*
*#
*#*
*#*#
*#*#*
*#*#*#
*#*#*#*
*#*#*#*#
*#*#*#*#*
*#*#*#*#*#
各行
i
について、内側のループj in range(i + 1)
で出力します。シンボルは位置に基づいて決定されます。 チャレンジ
2Dゲームに触発されて、いくつかの形を印刷して実験してみましょう。高さ
n
、幅n
の三角形を印刷したいのですが、各位置について、その行と列の合計が偶数ならシンボルはe
、奇数ならo
を印刷します。行と列は1から数え始めることに注意してください。
入力 | 出力 |
10 | e
oe
eoe
oeoe
eoeoe
oeoeoe
eoeoeoe
oeoeoeoe
eoeoeoeoe
oeoeoeoeoe |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB