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.