DEV Community

ahmadasroni38
ahmadasroni38

Posted on

🔄 Loop Master: Menguasai Seni Algoritma Perulangan

Prolog: Ketika Copy-Paste Bukan Solusi

📖 Cerita Pembuka: Si Pelupa dan 1000 Undangan

Ada seorang mahasiswa bernama Andi yang ditugaskan panitia acara kampus untuk mengirim email undangan ke 1000 peserta seminar. Andi mulai mengetik:

Kirim email ke peserta1@gmail.com
Kirim email ke peserta2@gmail.com
Kirim email ke peserta3@gmail.com
... (997 email lagi)
Enter fullscreen mode Exit fullscreen mode

Setelah 3 jam dan baru selesai 50 email, Andi menyadari: "Pasti ada cara lebih baik!"

Ngeri, kan? 😱 Nah, di sinilah algoritma perulangan hadir sebagai penyelamat!

Bab 1: Apa Itu Algoritma Perulangan?

🎯 Konsep Dasar

Algoritma perulangan (looping) adalah struktur kontrol yang memungkinkan kita mengeksekusi blok kode berulang kali tanpa harus menulis ulang kode yang sama.

🌍 Analogi Kehidupan Nyata

Perulangan ada di mana-mana dalam kehidupan kita:

  1. Rutinitas Pagi 🌅
   SELAMA belum_sampai_kampus:
       - Bangun tidur
       - Mandi
       - Sarapan
       - Berangkat
Enter fullscreen mode Exit fullscreen mode
  1. Mesin Cuci 🌀
   UNTUK setiap_siklus dari 1 hingga 3:
       - Isi air
       - Putar drum (cuci)
       - Buang air
       - Putar drum (bilas)
       - Peras
Enter fullscreen mode Exit fullscreen mode
  1. Antrian Bank 🏦
   SELAMA masih_ada_antrian:
       - Panggil nomor berikutnya
       - Layani nasabah
       - Selesai transaksi
Enter fullscreen mode Exit fullscreen mode

📊 Ilustrasi Visual: Perulangan vs Non-Perulangan

TANPA PERULANGAN:           DENGAN PERULANGAN:
│                           │
├─> Tugas 1                 ├─> UNTUK i dari 1 hingga 5:
├─> Tugas 2                 │     └─> Lakukan Tugas i
├─> Tugas 3                 │
├─> Tugas 4                 │ (3 baris kode!)
├─> Tugas 5                 │
│                           │
(5+ baris kode!)            
Enter fullscreen mode Exit fullscreen mode

💡 Mengapa Perulangan Itu Penting?

1. Efisiensi Kode 📉

Ilustrasi: Bayangkan menulis resep mie instan

TANPA Loop:                  DENGAN Loop:
- Masak mie porsi 1          - UNTUK setiap porsi dari 1-30:
- Masak mie porsi 2              Masak mie
- Masak mie porsi 3          
... (27 instruksi lagi)     (Cuma 2 baris!)
- Masak mie porsi 30         
Enter fullscreen mode Exit fullscreen mode

2. Mengurangi Human Error 🛡️

Semakin banyak mengetik manual = semakin besar peluang typo!

print("Student 1")    ✓
print("Studnet 2")    ✗ (typo!)
print("Student 3")    ✓
Enter fullscreen mode Exit fullscreen mode

3. Maintenance Mudah 🔧

Misal kita ingin mengubah format output. Tanpa loop, harus edit 1000 baris. Dengan loop? Cukup edit 1 tempat!

4. Performa Optimal

Komputer dirancang untuk melakukan repetisi dengan sangat cepat. Processor modern bisa melakukan miliaran operasi per detik!

Bab 2: Tiga Musketeer Perulangan

Sebelum masuk ke kode, mari pahami karakteristik masing-masing jenis perulangan dengan analogi sederhana:

🎭 Perkenalan Karakter

  1. FOR Loop - Si Terencana 📅

    • "Aku tahu persis berapa kali harus mengulang"
    • Seperti: Jadwal kuliah (16 pertemuan per semester)
  2. WHILE Loop - Si Kondisional ⏰

    • "Aku akan terus mengulang selama kondisi terpenuhi"
    • Seperti: Belajar sampai paham (tidak tahu berapa lama)
  3. DO-WHILE Loop - Si Optimis 🎯

    • "Aku pasti coba dulu minimal sekali, baru cek kondisi"
    • Seperti: Mencicipi makanan baru (coba dulu, baru putuskan)

1. FOR Loop - Si Terstruktur 📅

📚 Penjelasan Mendalam

FOR loop adalah perulangan yang jumlah iterasinya sudah diketahui sejak awal. Ibarat naik tangga, kita tahu ada berapa anak tangga yang harus dilalui.

🏠 Analogi Rumah Tangga

Bayangkan kamu menyiram 10 pot tanaman di teras:

Ilustrasi:
🪴 🪴 🪴 🪴 🪴 🪴 🪴 🪴 🪴 🪴
 1  2  3  4  5  6  7  8  9  10

Proses:
UNTUK setiap pot dari 1 hingga 10:
    - Ambil air
    - Siram pot tersebut
    - Lanjut ke pot berikutnya
Enter fullscreen mode Exit fullscreen mode

🎯 Kapan Menggunakan FOR Loop?

✅ Gunakan FOR ketika:

  • Tahu persis berapa kali pengulangan
  • Perlu mengakses index/urutan
  • Iterasi melalui koleksi (list, array)

❌ Hindari FOR ketika:

  • Jumlah iterasi tidak pasti
  • Bergantung pada input user yang dinamis

💻 Anatomi FOR Loop

Mari kita bedah struktur FOR loop seperti membedah mesin:

Ilustrasi Komponen:
┌─────────────────────────────────────────┐
│  for  i  in  range(start, stop, step):  │
│   ↑   ↑      ↑       ↑     ↑     ↑      │
│   │   │      │       │     │     │      │
│   │   │      │       │     │     └─ Lompatan
│   │   │      │       │     └─ Batas akhir (eksklusif)
│   │   │      │       └─ Nilai awal
│   │   │      └─ Fungsi pembuat urutan
│   │   └─ Variabel penghitung
│   └─ Kata kunci
└─────────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

🎨 Visualisasi Cara Kerja FOR Loop

range(1, 5, 1) menghasilkan: 1, 2, 3, 4

Iterasi 1: i = 1  →  Jalankan kode
    ↓
Iterasi 2: i = 2  →  Jalankan kode
    ↓
Iterasi 3: i = 3  →  Jalankan kode
    ↓
Iterasi 4: i = 4  →  Jalankan kode
    ↓
SELESAI (5 tidak termasuk)
Enter fullscreen mode Exit fullscreen mode

📝 Implementasi Bertahap

Step 1: Mulai dari yang sederhana

Penjelasan: Kita ingin mencetak angka 1 sampai 5. Seperti menghitung jari tangan.

# Kode paling dasar
for i in range(1, 6):  # 6 karena batas atas eksklusif
    print(i)

# Output:
# 1
# 2
# 3
# 4
# 5
Enter fullscreen mode Exit fullscreen mode

Step 2: Contoh Real World - Sistem Absensi

Penjelasan: Bayangkan dosen memanggil nama mahasiswa satu per satu dari daftar hadir.

# Data mahasiswa
mahasiswa = ["Andi", "Budi", "Citra", "Dian", "Eka"]

print("📋 ABSENSI HARI INI:")
print("-" * 30)

# enumerate() memberikan index dan nilai sekaligus
for nomor, nama in enumerate(mahasiswa, 1):  # mulai dari 1, bukan 0
    status = "✓ Hadir"  # Anggap semua hadir
    print(f"{nomor:2d}. {nama:10s} {status}")

print("-" * 30)
print(f"Total: {len(mahasiswa)} mahasiswa")
Enter fullscreen mode Exit fullscreen mode

Step 3: Nested Loop - Membuat Pola Bintang

Penjelasan: Nested loop seperti jam yang memiliki jarum jam dan jarum menit. Jarum menit (loop dalam) berputar penuh sebelum jarum jam (loop luar) bergerak satu langkah.

# Visualisasi proses nested loop
print("Membuat segitiga bintang:")
print("Loop Luar | Loop Dalam | Output")
print("-" * 40)

for i in range(5):  # Loop luar: mengatur baris
    print(f"Baris {i+1}   | ", end="")

    for j in range(i + 1):  # Loop dalam: mengatur kolom
        print(f"Col{j+1} ", end="")

    print("| ", end="")

    # Cetak bintang aktual
    for j in range(i + 1):
        print("", end=" ")
    print()  # Pindah baris
Enter fullscreen mode Exit fullscreen mode

2. WHILE Loop - Si Fleksibel ⏰

📚 Penjelasan Mendalam

WHILE loop adalah perulangan yang terus berjalan selama kondisi bernilai TRUE. Seperti bermain game - terus main selama HP masih ada.

🎮 Analogi Game

Ilustrasi HP dalam Game:
♥️♥️♥️♥️♥️ (HP = 5)

SELAMA HP > 0:
    - Main level
    - Hadapi musuh
    - HP berkurang

Ketika HP = 0:
    - GAME OVER
    - Keluar dari loop
Enter fullscreen mode Exit fullscreen mode

🔍 Perbedaan dengan FOR Loop

FOR LOOP:                    WHILE LOOP:
"Lari 10 putaran"           "Lari sampai capek"
(Pasti 10x)                 (Bisa 5x, 10x, atau 100x)

📊 Fixed iteration          📈 Dynamic iteration
🎯 Predictable             ❓ Unpredictable
Enter fullscreen mode Exit fullscreen mode

💻 Anatomi WHILE Loop

Struktur Dasar:
┌────────────────────────┐
│  while kondisi:        │ ← Cek kondisi dulu
│      # kode            │ ← Jika TRUE, jalankan
│      # update kondisi  │ ← PENTING: Update kondisi
└────────────────────────┘
         ↓
   Kembali cek kondisi
Enter fullscreen mode Exit fullscreen mode

📝 Implementasi Bertahap WHILE Loop

Step 1: Konsep Dasar dengan Counter

Penjelasan: Seperti menghitung domba sebelum tidur - terus hitung sampai mengantuk.

# Simulasi menghitung domba
domba = 0
batas_kantuk = 5

print("🐑 Mulai menghitung domba...")
while domba < batas_kantuk:
    domba += 1
    print(f"Domba ke-{domba}... ", end="")

    if domba < batas_kantuk:
        print("Masih terjaga 👀")
    else:
        print("Zzz... Tidur 😴")
Enter fullscreen mode Exit fullscreen mode

Step 2: Contoh Real World - Sistem Login

Penjelasan: Sistem login seperti penjaga gerbang. Terus meminta password sampai benar atau kesempatan habis.

# Ilustrasi Sistem:
# ┌─────────────┐
# │   LOGIN     │
# ├─────────────┤
# │ Password: _ │ ← Input user
# └─────────────┘
#       ↓
# [Cek password]
#   ↓        ↓
# Benar    Salah → Coba lagi (max 3x)

print("🔐 SISTEM LOGIN BANK")
print("=" * 30)

password_benar = "rahasia123"
percobaan = 0
max_percobaan = 3
berhasil_login = False

while percobaan < max_percobaan and not berhasil_login:
    print(f"\nPercobaan {percobaan + 1} dari {max_percobaan}")
    password = input("Masukkan password: ")
    percobaan += 1

    if password == password_benar:
        print("✅ Login berhasil! Selamat datang.")
        berhasil_login = True
    else:
        sisa = max_percobaan - percobaan
        if sisa > 0:
            print(f"❌ Password salah! Sisa percobaan: {sisa}")
            print("   Hint: password dimulai dengan 'r'")
        else:
            print("🚫 Akun terkunci! Hubungi customer service.")
Enter fullscreen mode Exit fullscreen mode

Step 3: Input Validation dengan WHILE

Penjelasan: Seperti mesin ATM yang terus meminta input sampai valid.

# Validasi input umur
print("📝 FORM REGISTRASI")
print("-" * 30)

umur = -1  # Nilai awal yang pasti salah

while umur < 17 or umur > 100:
    try:
        umur = int(input("Masukkan umur (17-100): "))

        if umur < 17:
            print("⚠️ Maaf, minimal umur 17 tahun")
        elif umur > 100:
            print("⚠️ Umur tidak valid")
        else:
            print(f"✅ Umur {umur} tahun diterima")
    except ValueError:
        print("❌ Masukkan angka yang valid!")
        umur = -1  # Reset ke nilai invalid
Enter fullscreen mode Exit fullscreen mode

3. DO-WHILE Loop - Si Optimis 🎯

📚 Penjelasan Mendalam

DO-WHILE memastikan kode dijalankan minimal sekali sebelum mengecek kondisi. Seperti mencoba makanan baru - coba dulu baru nilai enak atau tidak.

🍜 Analogi Warung Makan

Ilustrasi:
┌──────────────────────┐
│  WARUNG RASA BARU    │
└──────────────────────┘
        ↓
   [Coba makanan]  ← Pasti dilakukan
        ↓
   "Enak tidak?"
    ↓        ↓
   Ya       Tidak
    ↓        ↓
  Pesan    Keluar
   lagi
Enter fullscreen mode Exit fullscreen mode

⚠️ Catatan Penting

Python tidak memiliki DO-WHILE bawaan, tapi kita bisa mensimulasikannya. Ini menunjukkan fleksibilitas Python!

💻 Implementasi DO-WHILE di Python

Cara 1: Menggunakan While True + Break

print("🎰 MESIN SLOT SEDERHANA")
print("=" * 30)
print("Minimal main 1x, baru bisa berhenti\n")

import random

# Simulasi DO-WHILE
total_main = 0
total_menang = 0

while True:  # Loop tak terbatas
    # BAGIAN DO: Pasti dijalankan minimal sekali
    total_main += 1
    print(f"\n🎲 Putaran ke-{total_main}")

    # Generate 3 angka random
    slot1 = random.randint(1, 3)
    slot2 = random.randint(1, 3)
    slot3 = random.randint(1, 3)

    print(f"Hasil: [{slot1}] [{slot2}] [{slot3}]")

    if slot1 == slot2 == slot3:
        print("🎉 JACKPOT! Kamu menang!")
        total_menang += 1
    else:
        print("💔 Belum beruntung...")

    # BAGIAN WHILE: Cek kondisi
    lanjut = input("\nMain lagi? (y/n): ").lower()
    if lanjut != 'y':
        break  # Keluar dari loop

print(f"\n📊 STATISTIK:")
print(f"Total main: {total_main}x")
print(f"Total menang: {total_menang}x")
print(f"Win rate: {(total_menang/total_main)*100:.1f}%")
Enter fullscreen mode Exit fullscreen mode

Cara 2: Membuat Fungsi DO-WHILE

def do_while(action, condition):
    """
    Fungsi helper untuk mensimulasikan DO-WHILE
    action: fungsi yang dijalankan
    condition: fungsi yang return boolean
    """
    while True:
        action()  # Lakukan dulu
        if not condition():  # Baru cek kondisi
            break

# Contoh penggunaan
print("📱 APLIKASI KALKULATOR")
print("=" * 30)

def kalkulator():
    """Fungsi kalkulator sederhana"""
    print("\nPilih operasi:")
    print("1. Tambah (+)")
    print("2. Kurang (-)")
    print("3. Kali (×)")
    print("4. Bagi (÷)")

    pilihan = input("Pilih (1-4): ")

    if pilihan in ['1', '2', '3', '4']:
        num1 = float(input("Angka pertama: "))
        num2 = float(input("Angka kedua: "))

        if pilihan == '1':
            print(f"Hasil: {num1} + {num2} = {num1 + num2}")
        elif pilihan == '2':
            print(f"Hasil: {num1} - {num2} = {num1 - num2}")
        elif pilihan == '3':
            print(f"Hasil: {num1} × {num2} = {num1 * num2}")
        elif pilihan == '4':
            if num2 != 0:
                print(f"Hasil: {num1} ÷ {num2} = {num1 / num2}")
            else:
                print("❌ Error: Tidak bisa bagi dengan 0!")
    else:
        print("❌ Pilihan tidak valid!")

def mau_lanjut():
    """Fungsi untuk cek apakah user mau lanjut"""
    jawab = input("\nHitung lagi? (y/n): ").lower()
    return jawab == 'y'

# Jalankan dengan pola DO-WHILE
# do_while(kalkulator, mau_lanjut)
Enter fullscreen mode Exit fullscreen mode

📊 Perbandingan Ketiga Jenis Loop

┌──────────────┬─────────────────┬─────────────────┬──────────────────┐
│   Aspek      │    FOR Loop     │   WHILE Loop    │  DO-WHILE Loop   │
├──────────────┼─────────────────┼─────────────────┼──────────────────┤
│ Kapan pakai? │ Iterasi tetap   │ Kondisi dinamis │ Min 1x eksekusi  │
│ Contoh       │ Cetak 1-100     │ Login system    │ Menu aplikasi    │
│ Kondisi cek  │ Di awal (range) │ Di awal         │ Di akhir         │
│ Min eksekusi │ Bisa 0x         │ Bisa 0x         │ Pasti min 1x     │
│ Kompleksitas │ Sederhana       │ Menengah        │ Menengah         │
└──────────────┴─────────────────┴─────────────────┴──────────────────┘
Enter fullscreen mode Exit fullscreen mode

Bab 3: Control Statement - Remote Control Perulangan 🎮

📚 Pengantar: Mengendalikan Alur Loop

Control statements adalah perintah khusus untuk mengendalikan jalannya perulangan. Bayangkan kamu sedang menonton TV dengan remote control:

Remote TV:                    Control Statement:
├─ POWER (matikan TV)    →    break (keluar dari loop)
├─ SKIP (lewati iklan)   →    continue (lewati iterasi)
├─ MUTE (diam saja)      →    pass (tidak melakukan apa-apa)
Enter fullscreen mode Exit fullscreen mode

1. BREAK - Emergency Exit 🚪

📖 Penjelasan Konsep

BREAK adalah tombol darurat untuk keluar dari loop seketika, tidak peduli kondisi loop masih TRUE atau masih ada iterasi tersisa.

🏃 Analogi: Lari Marathon

Ilustrasi:
START → KM5 → KM10 → KM15 → [CEDERA] → BREAK! → DNF
                         ↑
                    Keluar di sini
                (Tidak lanjut ke KM20, KM25, dst)
Enter fullscreen mode Exit fullscreen mode

🎯 Kapan Menggunakan BREAK?

✅ Gunakan BREAK untuk:

  • Pencarian (sudah ketemu, tidak perlu lanjut)
  • Error handling (ada masalah, hentikan proses)
  • User request (user minta berhenti)
  • Optimasi (tidak perlu proses yang tidak perlu)

💻 Implementasi dengan Penjelasan

Contoh 1: Sistem Pencarian Barang

print("🔍 SISTEM PENCARIAN INVENTORY GAME")
print("=" * 35)

# Inventory player
inventory = ["potion", "sword", "shield", "key", "armor", "bow", "arrow"]
item_dicari = "key"

print(f"Mencari: {item_dicari}")
print(f"Inventory: {inventory}\n")

# Tanpa BREAK (tidak efisien)
print("❌ Cara tidak efisien (tanpa break):")
for i, item in enumerate(inventory):
    print(f"  Cek slot {i+1}: {item}", end="")
    if item == item_dicari:
        print(f" → ✨ FOUND!")
    else:
        print(f" → not match")
print()

# Dengan BREAK (efisien)
print("✅ Cara efisien (dengan break):")
for i, item in enumerate(inventory):
    print(f"  Cek slot {i+1}: {item}", end="")
    if item == item_dicari:
        print(f" → ✨ FOUND!")
        print(f"  🛑 Stop searching! Hemat {len(inventory)-i-1} pengecekan")
        break  # Langsung keluar
    else:
        print(f" → not match")
Enter fullscreen mode Exit fullscreen mode

Contoh 2: Deteksi Anomali

print("\n🌡️ MONITORING SUHU SERVER")
print("=" * 35)

# Simulasi data suhu per menit
suhu_server = [35, 36, 38, 40, 42, 85, 45, 40]  # 85 adalah anomali
batas_aman = 70

print("Monitoring dimulai...")
print(f"Batas aman: {batas_aman}°C\n")

for menit, suhu in enumerate(suhu_server, 1):
    print(f"Menit {menit}: {suhu}°C", end="")

    if suhu <= batas_aman:
        print(" → ✅ Aman")
    else:
        print(f" → 🚨 OVERHEAT! Emergency shutdown!")
        print(f"     System stopped at minute {menit}")
        # Trigger cooling system, alert admin, etc.
        break

if suhu <= batas_aman:
    print("\n✅ Monitoring selesai. Semua normal.")
Enter fullscreen mode Exit fullscreen mode

2. CONTINUE - Skip Saja! ⏭️

📖 Penjelasan Konsep

CONTINUE adalah perintah untuk melewati sisa kode dalam iterasi saat ini dan langsung lanjut ke iterasi berikutnya.

🎬 Analogi: Skip Iklan YouTube

Video Timeline:
[Intro] → [Iklan] → [Content] → [Iklan] → [Content] → [Outro]
           ↑ SKIP              ↑ SKIP
           (continue)          (continue)
Enter fullscreen mode Exit fullscreen mode

🎯 Kapan Menggunakan CONTINUE?

✅ Gunakan CONTINUE untuk:

  • Filter data (skip yang tidak memenuhi kriteria)
  • Validasi (skip data invalid)
  • Kondisi khusus (skip kasus tertentu)
  • Performance (skip operasi berat yang tidak perlu)

💻 Implementasi dengan Penjelasan

Contoh 1: Filter Data Ganjil/Genap

print("🔢 ANALISIS BILANGAN")
print("=" * 35)

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f"Data: {numbers}\n")

# Hitung total bilangan genap saja
print("📊 Menghitung total bilangan GENAP:")
total_genap = 0

for num in numbers:
    print(f"  Proses {num}: ", end="")

    if num % 2 != 0:  # Jika ganjil
        print("ganjil → ⏭️ SKIP")
        continue  # Skip ke angka berikutnya

    # Kode di bawah ini hanya dijalankan untuk bilangan genap
    print(f"genap → tambahkan")
    total_genap += num

print(f"\n✅ Total bilangan genap: {total_genap}")
Enter fullscreen mode Exit fullscreen mode

Contoh 2: Validasi Input Data

print("\n📝 SISTEM INPUT NILAI MAHASISWA")
print("=" * 35)

# Data nilai mahasiswa (ada yang invalid)
nilai_input = [85, -5, 90, 120, 78, 95, -10, 88, 200, 92]
nilai_valid = []

print("Memproses nilai...")
print(f"Input: {nilai_input}\n")

for i, nilai in enumerate(nilai_input):
    print(f"Data {i+1}: {nilai:3d}", end="")

    # Validasi nilai (0-100)
    if nilai < 0:
        print("❌ Negatif, SKIP!")
        continue

    if nilai > 100:
        print("❌ Lebih dari 100, SKIP!")
        continue

    # Hanya nilai valid yang sampai ke sini
    print("✅ Valid, simpan")
    nilai_valid.append(nilai)

print(f"\nHasil validasi:")
print(f"  Data valid: {nilai_valid}")
print(f"  Jumlah valid: {len(nilai_valid)}/{len(nilai_input)}")
print(f"  Rata-rata: {sum(nilai_valid)/len(nilai_valid):.2f}")
Enter fullscreen mode Exit fullscreen mode

3. PASS - Placeholder 📌

📖 Penjelasan Konsep

PASS adalah statement yang tidak melakukan apa-apa. Digunakan sebagai placeholder ketika sintaks Python membutuhkan statement tapi kita belum siap implementasinya.

🏗️ Analogi: Konstruksi Bangunan

Rencana Bangunan:
Lantai 1: ✅ Selesai
Lantai 2: ✅ Selesai  
Lantai 3: 🚧 Under Construction (pass)
Lantai 4: 📋 Planned (pass)
Enter fullscreen mode Exit fullscreen mode

🎯 Kapan Menggunakan PASS?

✅ Gunakan PASS untuk:

  • Stub code (kerangka fungsi/class yang belum diisi)
  • Placeholder dalam development
  • Kasus yang sengaja diabaikan
  • Struktur kontrol yang membutuhkan body tapi tidak ada aksi

💻 Implementasi dengan Penjelasan

Contoh 1: Development Bertahap

print("🎮 GAME STATE MACHINE")
print("=" * 35)

# Simulasi state dalam game
game_states = ["menu", "play", "pause", "inventory", "settings", "quit"]

print("Implementasi Game States:\n")

for state in game_states:
    print(f"State: {state:10s}", end="")

    if state == "menu":
        print("✅ Implemented: Show main menu")

    elif state == "play":
        print("✅ Implemented: Start gameplay")

    elif state == "pause":
        print("🚧 TODO: Implement pause menu")
        pass  # Placeholder untuk implementasi nanti

    elif state == "inventory":
        print("🚧 TODO: Implement inventory system")
        pass  # Akan diisi nanti

    elif state == "settings":
        print("🚧 TODO: Implement settings menu")
        pass  # Coming soon

    elif state == "quit":
        print("✅ Implemented: Exit game")
Enter fullscreen mode Exit fullscreen mode

Contoh 2: Exception Handling dengan Pass

print("\n📁 FILE PROCESSOR")
print("=" * 35)

# Simulasi pemrosesan berbagai file
files = ["data.txt", "image.jpg", "video.mp4", "document.pdf", "script.py"]

for file in files:
    print(f"Processing: {file:15s}", end="")

    try:
        # Simulasi proses file berdasarkan ekstensi
        if file.endswith('.txt'):
            print("✅ Text file processed")

        elif file.endswith('.jpg'):
            print("✅ Image file processed")

        elif file.endswith('.mp4'):
            # Video processing belum diimplementasi
            pass  # Sementara tidak lakukan apa-apa
            print("⏸️ Video processing not implemented yet")

        elif file.endswith('.pdf'):
            print("✅ PDF file processed")

        else:
            print("❓ Unknown file type")

    except Exception as e:
        # Jika ada error, log tapi lanjutkan proses
        pass  # Ignore error dan lanjut
        print(f"⚠️ Error ignored: {e}")
Enter fullscreen mode Exit fullscreen mode

📊 Perbandingan Control Statements

┌────────────┬──────────────────┬────────────────┬──────────────────┐
│ Statement  │     Fungsi       │    Analogi     │   Use Case       │
├────────────┼──────────────────┼────────────────┼──────────────────┤
│   BREAK    │ Keluar dari loop │ Emergency exit │ Pencarian item   │
│            │ sepenuhnya       │ Power off      │ Error handling   │
├────────────┼──────────────────┼────────────────┼──────────────────┤
│  CONTINUE  │ Skip iterasi     │ Skip iklan     │ Filter data      │
│            │ saat ini         │ Next song      │ Validasi input   │
├────────────┼──────────────────┼────────────────┼──────────────────┤
│    PASS    │ Tidak lakukan    │ Under          │ Placeholder      │
│            │ apa-apa          │ construction   │ Stub code        │
└────────────┴──────────────────┴────────────────┴──────────────────┘
Enter fullscreen mode Exit fullscreen mode

🎯 Tips Penggunaan Control Statements

  1. BREAK untuk Efisiensi

    • Gunakan break segera setelah menemukan yang dicari
    • Hindari proses yang tidak perlu
  2. CONTINUE untuk Clean Code

    • Lebih baik skip dengan continue daripada nested if yang dalam
    • Membuat kode lebih mudah dibaca
  3. PASS untuk Development

    • Gunakan saat membuat struktur kode
    • Ganti dengan implementasi real nantinya

Bab 4: Algoritma Perulangan Legendaris

1. Bubble Sort - Si Sabar

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# Visualisasi proses
nilai = [64, 34, 25, 12, 22]
print(f"Sebelum: {nilai}")
bubble_sort(nilai)
print(f"Sesudah: {nilai}")
Enter fullscreen mode Exit fullscreen mode

2. Binary Search - Si Cepat

def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = (left + right) // 2
        print(f"Checking index {mid}: {arr[mid]}")

        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return -1

# Test
sorted_list = [2, 5, 8, 12, 16, 23, 38, 45, 56, 67]
result = binary_search(sorted_list, 23)
print(f"Found at index: {result}")
Enter fullscreen mode Exit fullscreen mode

3. Fibonacci - Si Matematika

def fibonacci_series(n):
    fib = []
    a, b = 0, 1

    while len(fib) < n:
        fib.append(a)
        a, b = b, a + b

    return fib

# Golden ratio muncul!
print("Deret Fibonacci:", fibonacci_series(10))
Enter fullscreen mode Exit fullscreen mode

Bab 5: Pattern Recognition dengan Loop

Diamond Pattern 💎

def print_diamond(n):
    # Bagian atas
    for i in range(n):
        print(" " * (n - i - 1) + "*" * (2 * i + 1))

    # Bagian bawah
    for i in range(n - 2, -1, -1):
        print(" " * (n - i - 1) + "*" * (2 * i + 1))

print_diamond(5)
Enter fullscreen mode Exit fullscreen mode

Pascal's Triangle 📐

def pascal_triangle(rows):
    for i in range(rows):
        num = 1
        print(" " * (rows - i), end="")
        for j in range(i + 1):
            print(num, end=" ")
            num = num * (i - j) // (j + 1)
        print()

pascal_triangle(6)
Enter fullscreen mode Exit fullscreen mode

Bab 6: Real-World Applications

1. Sistem Parkir Otomatis

class SistemParkir:
    def __init__(self, kapasitas):
        self.kapasitas = kapasitas
        self.terisi = 0
        self.kendaraan = []

    def masuk(self, plat):
        while self.terisi < self.kapasitas:
            self.kendaraan.append(plat)
            self.terisi += 1
            print(f"{plat} masuk. Slot terisi: {self.terisi}/{self.kapasitas}")
            return True

        print(f"❌ Parkiran penuh!")
        return False

    def status(self):
        print("\n📊 STATUS PARKIRAN:")
        for i, plat in enumerate(self.kendaraan, 1):
            print(f"Slot {i}: {plat}")
        print(f"Sisa slot: {self.kapasitas - self.terisi}")

# Simulasi
parkiran = SistemParkir(5)
mobil = ["B 1234 CD", "D 5678 EF", "B 9012 GH"]

for plat in mobil:
    parkiran.masuk(plat)

parkiran.status()
Enter fullscreen mode Exit fullscreen mode

2. Game Tebak Angka

import random

def game_tebak_angka():
    angka_rahasia = random.randint(1, 100)
    percobaan = 0
    max_percobaan = 7

    print("🎮 GAME TEBAK ANGKA (1-100)")
    print(f"Kamu punya {max_percobaan} kesempatan!\n")

    while percobaan < max_percobaan:
        try:
            tebakan = int(input(f"Percobaan {percobaan + 1}: "))
            percobaan += 1

            if tebakan == angka_rahasia:
                print(f"🎉 SELAMAT! Kamu menang dalam {percobaan} percobaan!")
                break
            elif tebakan < angka_rahasia:
                print("📈 Terlalu kecil!")
            else:
                print("📉 Terlalu besar!")

            if percobaan == max_percobaan:
                print(f"😢 Game Over! Angkanya adalah {angka_rahasia}")

        except ValueError:
            print("⚠️ Masukkan angka yang valid!")

# Jalankan game
# game_tebak_angka()
Enter fullscreen mode Exit fullscreen mode

Bab 7: Tips & Tricks Optimization

1. List Comprehension - One Liner Magic

# Cara lama
squares = []
for i in range(10):
    squares.append(i**2)

# Cara keren
squares = [i**2 for i in range(10)]

# Dengan kondisi
even_squares = [i**2 for i in range(10) if i % 2 == 0]
Enter fullscreen mode Exit fullscreen mode

2. Enumerate untuk Index

# ❌ Jangan begini
fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# ✅ Gunakan enumerate
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")
Enter fullscreen mode Exit fullscreen mode

3. Zip untuk Multiple Lists

names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
grades = ["B", "A", "C"]

for name, score, grade in zip(names, scores, grades):
    print(f"{name}: {score} ({grade})")
Enter fullscreen mode Exit fullscreen mode

Bab 8: Common Pitfalls & How to Avoid Them

1. Infinite Loop - Loop Tanpa Akhir

# ❌ BAHAYA - Infinite loop
# while True:
#     print("Help, I'm stuck!")

# ✅ Selalu pastikan ada exit condition
counter = 0
while True:
    print(f"Iterasi {counter}")
    counter += 1
    if counter >= 5:
        break
Enter fullscreen mode Exit fullscreen mode

2. Off-by-One Error

# ❌ Salah - akan skip elemen terakhir
arr = [1, 2, 3, 4, 5]
for i in range(len(arr) - 1):  # Harusnya len(arr)
    print(arr[i])

# ✅ Benar
for i in range(len(arr)):
    print(arr[i])
Enter fullscreen mode Exit fullscreen mode

3. Modifying List While Iterating

# ❌ Berbahaya
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)  # Bisa skip elemen!

# ✅ Gunakan copy atau list comprehension
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]
Enter fullscreen mode Exit fullscreen mode

Bab 9: Performance Comparison

import time

def measure_time(func, *args):
    start = time.time()
    result = func(*args)
    end = time.time()
    return result, end - start

# For loop vs While loop vs List comprehension
n = 1000000

# For loop
def for_loop_test(n):
    result = []
    for i in range(n):
        result.append(i * 2)
    return result

# While loop
def while_loop_test(n):
    result = []
    i = 0
    while i < n:
        result.append(i * 2)
        i += 1
    return result

# List comprehension
def list_comp_test(n):
    return [i * 2 for i in range(n)]

# Benchmark (untuk n kecil agar tidak terlalu lama)
n_test = 10000
print("🏁 Performance Benchmark:")
_, time1 = measure_time(for_loop_test, n_test)
print(f"For Loop: {time1:.4f} detik")

_, time2 = measure_time(while_loop_test, n_test)
print(f"While Loop: {time2:.4f} detik")

_, time3 = measure_time(list_comp_test, n_test)
print(f"List Comprehension: {time3:.4f} detik")
Enter fullscreen mode Exit fullscreen mode

Epilog: Loop Mastery Achieved! 🎓

Selamat! Kamu telah menyelesaikan perjalanan mempelajari algoritma perulangan. Ingat beberapa prinsip kunci:

  1. Choose Wisely: Pilih jenis loop yang tepat untuk kasusmu
  2. Keep It Simple: Loop yang sederhana lebih mudah di-debug
  3. Think Performance: Untuk data besar, performa matters!
  4. Avoid Infinite Loops: Selalu pastikan ada exit condition
  5. Practice Makes Perfect: Semakin sering coding, semakin natural

Challenge untuk Kamu! 💪

  1. Easy: Buat program yang mencetak multiplication table 1-10
  2. Medium: Implementasikan algoritma untuk mencari prime numbers hingga 100
  3. Hard: Buat Conway's Game of Life menggunakan nested loops
  4. Expert: Implementasikan A* pathfinding algorithm

Resources untuk Belajar Lebih Lanjut

  • Visualisasi Algoritma: VisuAlgo, Algorithm Visualizer
  • Practice Coding: LeetCode, HackerRank, CodeWars
  • Buku Rekomendasi: "Grokking Algorithms" by Aditya Bhargava
  • YouTube Channel: CS Dojo, Tech With Tim

"The only way to learn a new programming language is by writing programs in it." - Dennis Ritchie

Happy Looping! May your loops be finite and your bugs be minimal! 🚀

Top comments (0)