Ekskul CSSE · SMAS St. John — BINUSPertemuan 10
10
Logika · Sesi 10 — Nested Loop & Pattern
Nested Loop &
Pattern Programming

Bintang di layar dibikin dari 2 loop — 1 baris 1 loop. Kita bongkar polanya.

TUJUAN 01
Memahami nested loop — luar = baris, dalam = kolom
TUJUAN 02
Mencetak persegi, segitiga siku & piramida dengan print
TUJUAN 03
Menghitung iterasi & pakai "*" * n untuk pola
Tujuan — apa yang kita capai hari ini

Dari loop tunggal ke pola utuh

Target Sesi 10
  1. Memahami nested loop — loop di dalam loop & peran baris vs kolom
  2. Membuat pola persegi, segitiga siku, piramida & pola angka dengan print
  3. Menganalisis jumlah iterasi tiap level & trik "*" * n + spasi
◎

Sesi 09 kamu bisa mengulang 1 baris — sekarang kamu bisa mengulang baris & kolom sekaligus. Dari situ lahir semua pola.

Alur 100 menit
15'Tebak output pola sederhana
25'Paparan nested loop + baris/kolom
30'Praktik: persegi & segitiga siku
20'Challenge: piramida & 1 22 333
10'Rangkuman & Q&A
Prasyaratfor + range() dari Sesi 09 — itu fondasinya.
Sebelum gas — minggu lalu kamu ndapetin apa?

Rekap Sesi 09 · Looping

Yang sudah kamu pegang
  • for + range() — ulang terhitung: range(1, 6) = 1–5
  • while — ulang bersyarat, wajib ada yang mengubah kondisinya
  • break / continue — henti total / skip 1 putaran
  • Anti ∞ — kamu sudah selamat dari infinite loop

Satu loop = kamu bisa mengulang SATU hal. Hari ini: mengulang yang di dalamnya ada pengulangan lagi — dan dari situ lahir semua pola.

Kuis kilat — tebak output!
for i in range(1, 4):
    print("*" * i)

Jalanin di kepala: baris 1 cetak apa? Baris 2? Baris 3?

!

Posisimu: 10 dari 17 — 59% perjalanan. Menuju List & Final Project!

Loop dalam loop — kayak apa sih rasanya?

Luar = baris, dalam = kolom

Code — 1 blok, 2 loop
n = 3
for i in range(n):        # luar → baris
    for j in range(n):    # dalam → kolom
        print("*", end=" ")
    print()               # ganti baris
Cara membacanya
  • Loop luar i — jalan n kali → bikin n baris baru
  • Loop dalam j — tiap baris, cetak n buah * kesamping
  • print() kosong = enter — pindah baris setelah kolom selesai
Output — n = 3 → matriks 3 × 3
*  *  *
*  *  *
*  *  *
TOTAL ITERASI
n × n = 9
KUNCI
end=" " & print()

end=" " tahan agar tetap 1 baris · print() baru pindah baris.

◧

Bayangkan tabel: i pilih baris, j isi kolom. Ganti j in range(n) → range(i+1) = segitiga.

Pola pertama — beda satu angka, beda bentuk

Persegi & segitiga siku

Persegi— tiap baris sama panjang
Code
n = 4
for i in range(n):
    print("*" * n)
OUTPUT
****
****
****
****

"*" * n = trik Python — gandakan string tanpa loop dalam. * 4 kali → "****".

Segitiga siku — baris ke-i punya i+1 bintang
Code
n = 4
for i in range(n):
    print("*" * (i + 1))
OUTPUT
*
**
***
****

Versi nested: for j in range(i+1): print("*", end="") lalu print() — hasil identik.

→

Bedanya cuma satu angka: n tetap → persegi · i+1 tumbuh → segitiga. Ubah i+1 → n-i = segitiga terbalik.

Giliran kamu — layar menunggu jadi kanvas

Tugas 1 · Cetak pola pertamamu

Kerjakan berurutan — 3 level
  1. Persegi 4×4 — pakai trik "*" * n (satu loop aja cukup!)
  2. Persegi versi nested — pakai loop dalam loop + end=" " + print(). Hasilnya sama — tapi inilah mesin di balik semua pola.
  3. Segitiga siku — tinggi 4: * lalu ** lalu *** lalu ****
Petunjuk level 3

Segitiga = persegi yang jumlah bintangnya ikut baris. Persegi: "*" * n. Segitiga: "*" * ? — ganti ? dengan apa biar baris ke-i punya i bintang?

Output yang harus muncul (level 3)
*
**
***
****
⏱

Waktu: 10 menit. Selesai duluan? Coba segitiga terbalik — 4 bintang mengecil ke 1.

Naik level — saatnya spasi & angka

Piramida & pola angka

Piramida— spasi + bintang ganjil
Code
n = 4
for i in range(n):
    spasi = " " * (n - i - 1)
    bintang = "*" * (2 * i + 1)
    print(spasi + bintang)
OUTPUT
···*
··***
·*****
*******

· = spasi. Rumus: n-i-1 spasi, 2*i+1 bintang (1, 3, 5, 7 …).

Pola angka— 1 · 22 · 333
Code
n = 4
for i in range(1, n + 1):
    print(str(i) * i)
OUTPUT
1
22
333
4444

str(i) * i = angka i diulang i kali. Ganti i → n-i+1 buat pola menurun.

Pola pikir Tiap pola = spasi? + apa yang diulang? + berapa kali? — jawab 3 itu, kodenya ketemu. Debug pakai print(f"i={i} bintang={2*i+1}").
Loop yang bekerja — bukan cuma cantik

Tugas 2 · Tabel perkalian bertingkat

Kerjakan berurutan — 2 level
  1. Tabel perkalian 3 — cetak 3 x 1 = 3 sampai 3 x 10 = 30 pakai f-string di dalam for
  2. Tabel 1–3 bertingkat — nested loop: loop luar = tabel mana (1, 2, 3), loop dalam = dikali berapa (1–5). Antar tabel, beri baris kosong.
Kerangka mulai
for tabel in range(1, 4):
    for kali in range(1, 6):
        print(f"{tabel} x {kali} = {tabel*kali}")
    print() # baris kosong antar tabel
Output yang harus muncul (level 2)
1 x 1 = 1
1 x 2 = 2
...

2 x 1 = 2
2 x 2 = 4
...

3 x 1 = 3
...
⏱

Waktu: 10 menit. Ini pola baris × kolom yang asli dipakai: jadwal kelas, meja kafe, data Excel.

Pola nggak jalan? Mungkin kamu kena salah satu ini

Kotak masalah — 3 jebakan nested loop

Jebakan 01
Tertukar: luar vs dalam
for j in range(3):   # ini malah kolom
    for i in range(3):
        print(f"{i},{j}")

Gejala: pola nyamping/transpose — yang seharusnya ke bawah jadi ke samping. Ingat: luar = baris.

Jebakan 02
Lupa print() kosong
for i in range(3):
    for j in range(3):
        print("*", end=" ")
# lupa print() setelah loop dalam!

Gejala: semua bintang menumpuk 1 baris panjang. print() kosong = tombol ENTER.

Jebakan 03
Dalam pakai range salah
for i in range(1, 5):
    for j in range(4):   # ← salah!
        print("*", end=" ")
    print()

Gejala: mau segitiga tapi hasilnya persegi. Segitiga butuh loop dalam yang ikut baris: range(i + 1).

Senjata debug: print pemeriksa — sisipkan print(f"i={i} j={j}") sesaat untuk melihat loop sedang jalan ke mana. Setelah paham, hapus lagi.

Tantangan pamungkas — pola legendaris

Challenge · Piramida & 1 22 333

Misi A — piramida rapi (tinggi 4)
···*
··***
·*****
*******

Bahan: " " * ? + "*" * ?. Tanya dua hal: spasi mengecil atau membesar? Bintang ganjil naik berapa?

Misi B — pola angka 1 · 22 · 333 · 4444
1
22
333
4444

Petunjuk: angka harus jadi teks dulu sebelum bisa dikali — str(i) * i. Kenapa i * i salah? Coba pikir!

Waktu 15 menit · dua-duanya sekali jalan. Baru belajar piramida minggu lalu? Bagus — sekarang kamu harus menjelaskan kenapa rumusnya begitu.
Gimana cara menyelesaikannya?

Pembahasan Challenge — kode lengkap

Solusi A — piramida
n = 4
for i in range(n):
    spasi   = " " * (n - i - 1)   # 3,2,1,0
    bintang = "*" * (2 * i + 1)   # 1,3,5,7
    print(spasi + bintang)

Kenapa 2*i + 1? Bintang harus ganjil (1, 3, 5…) biar piramidanya simetris. Kenapa n - i - 1? Spasi mengecil tiap baris.

Solusi B — 1 22 333 4444
n = 4
for i in range(1, n + 1):
    print(str(i) * i)

Mulai range(1, …) karena baris pertama = angka 1, bukan 0. str(i) dulu — kalau i * i itu perkalian matematika (hasil 1, 4, 9…), bukan pengulangan teks!

!

Metode yang sama dipakai semua pola: spasi? + apa yang diulang? + berapa kali? — jawab 3 pertanyaan itu, kode pola apa pun ketemu. Kamu bukan menghafal pola — kamu punya pabrik pola.

Rangkuman — yang kita bawa pulang

5 poin hari ini — pabrik pola milikmu

01
Nested loop = loop di dalam loop — luar = baris, dalam = kolom · print() kosong = pindah baris
02
Persegi "*" * n & segitiga siku "*" * (i+1) — beda 1 angka, beda bentuk
03
Piramida = " "*(n-i-1) + "*"*(2*i+1) — spasi mengecil, bintang ganjil membesar
04
Pola angka str(i)*i → 1 / 22 / 333 — sama triknya, ganti karakter yang diulang
05
Iterasi persegi = n×n, segitiga = n(n+1)/2 — debug dengan print(f"i={i} j={j}") bertahap
Pola adalah loop yang terlihat Next → List / Array
Next & Referensi — langkah selanjutnya

Minggu depan:
List / Array

Sesi 11 — List / Array

Pola hari ini 1 variabel n —
minggu depan nilai = [85, 90, 78] banyak nilai sekaligus

Dari cetak bentuk → kelola kumpulan data — daftar nilai, nama teman, stok barang.

daftar belanja[ ] · indeks 0append · len
PR iseng (opsional)
  • Bikin pola.py — ubah n dari 3 ke 6, lihat semua pola membesar
  • Tantangan: piramida terbalik pakai " " * i + "*" * (2*(n-i)-1)
  • Foto output piramida paling rapi buat grup — adu estetik!
Sampai jumpa di Sesi 11! ingat: luar = baris · dalam = kolom