19. Nested loop
Sebuah loop mengulang sebuah blok. Bagaimana jika blok itu menyimpan loop lain? Itulah nested loop: yang dalam berjalan sepenuhnya di setiap giliran yang luar. Keduanya membangun grid, tabel, apa pun yang memiliki baris dan kolom.
Sebuah loop di dalam loop
Letakkan satu for di dalam yang lain. Loop dalam selesai
sebelum yang luar bergerak:
for outer in range(1, 4):
for inner in range(1, 3):
print(outer, inner)Output:
1 1
1 2
2 1
2 2
3 1
3 2
Ikuti urutannya. Selagi outer adalah 1,
loop dalam berjalan (1, 2). Kemudian
outer menjadi 2 dan berjalan lagi. Itu
3 × 2 = 6 kali jalan.
Berikan dua variable loop nama yang berbeda. Jika
keduanya bernama i, loop dalam akan menimpa counter yang
luar. row/col atau
i/j adalah pasangan yang umum.
Membangun satu baris sekaligus
Satu nilai per baris jarang cocok untuk grid. Trik yang biasa: loop luar menangani baris; loop dalam membangun satu string, dicetak ketika baris selesai:
for row in range(1, 4):
line = ""
for col in range(1, 4):
line = line + str(row * col) + "\t"
print(line)Output (grid perkalian 3×3):
1 2 3
2 4 6
3 6 9
Perhatikan line = "" berada di dalam loop luar
tapi di luar loop dalam. Ia mereset setiap baris, terisi di
loop dalam, lalu dicetak.
Buka exercises/19/01-grid.py. Program ini mencetak grid
3×3. Ubah hanya dua range untuk membuatnya 5×5.
Segitiga dengan range dalam yang berubah
Range dalam bisa bergantung pada variable luar. Jalankan dari
1 ke row dan kamu mendapatkan segitiga:
for row in range(1, 5):
line = ""
for star in range(1, row + 1):
line = line + "*"
print(line)Output:
*
**
***
****
Baris 1 menjalankan range(1, 2) — sekali; baris 4
menjalankan range(1, 5) — empat kali. Bentuknya muncul dari
matematikanya.
Berapa kali isi loop berjalan?
Kalikan hitungannya. Loop luar 10 di sekitar loop dalam 10
menjalankan isi loop 10 × 10 = 100 kali. Pertumbuhannya
cepat: tiga loop masing-masing 100 adalah satu juta kali jalan. Kuat,
jadi perhatikan angkanya.
Pekerjaan Rumah
File pekerjaan rumah ada di exercises/19/homework/.
Soal 1 — Persegi panjang tanda pagar
Buka exercises/19/homework/01-rectangle.py. Dengan
nested loop, cetak sebuah persegi panjang # lebar 5 dan
tinggi 3:
#####
#####
#####
Soal 2 — Pasangan koordinat
Buka exercises/19/homework/02-coords.py. Cetak setiap
pasangan (x, y) untuk x dan y
dari 1 sampai 3, satu per baris: (1, 1),
(1, 2), dan seterusnya. Sembilan baris.
Soal 3 — Tabel perkalian
Buka exercises/19/homework/03-times-table.py. Cetak grid
perkalian penuh dari 1×1 sampai 5×5: lima
baris berisi lima angka yang dipisahkan tab masing-masing.
Tantangan — Segitiga siku-siku
Buka exercises/19/homework/04-triangle.py. Cetak
segitiga siku-siku dari * setinggi 6 baris, di mana baris
n memiliki n bintang. Sebagai tantangan
tambahan, balik terbalik (6 bintang di baris pertama, 1 di yang
terakhir).
Buntu atau sudah selesai? Buka halaman solusi pekerjaan rumah.