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)
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:
- Rutinitas Pagi ๐
SELAMA belum_sampai_kampus:
- Bangun tidur
- Mandi
- Sarapan
- Berangkat
- Mesin Cuci ๐
UNTUK setiap_siklus dari 1 hingga 3:
- Isi air
- Putar drum (cuci)
- Buang air
- Putar drum (bilas)
- Peras
- Antrian Bank ๐ฆ
SELAMA masih_ada_antrian:
- Panggil nomor berikutnya
- Layani nasabah
- Selesai transaksi
๐ 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!)
๐ก 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
2. Mengurangi Human Error ๐ก๏ธ
Semakin banyak mengetik manual = semakin besar peluang typo!
print("Student 1") โ
print("Studnet 2") โ (typo!)
print("Student 3") โ
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
-
FOR Loop - Si Terencana ๐
- "Aku tahu persis berapa kali harus mengulang"
- Seperti: Jadwal kuliah (16 pertemuan per semester)
-
WHILE Loop - Si Kondisional โฐ
- "Aku akan terus mengulang selama kondisi terpenuhi"
- Seperti: Belajar sampai paham (tidak tahu berapa lama)
-
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
๐ฏ 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
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐จ 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)
๐ 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
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")
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
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
๐ 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
๐ป Anatomi WHILE Loop
Struktur Dasar:
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ while kondisi: โ โ Cek kondisi dulu
โ # kode โ โ Jika TRUE, jalankan
โ # update kondisi โ โ PENTING: Update kondisi
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
Kembali cek kondisi
๐ 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 ๐ด")
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.")
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
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
โ ๏ธ 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}%")
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)
๐ 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 โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโ
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)
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)
๐ฏ 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")
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.")
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)
๐ฏ 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}")
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}")
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)
๐ฏ 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")
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}")
๐ 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 โ
โโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโ
๐ฏ Tips Penggunaan Control Statements
-
BREAK untuk Efisiensi
- Gunakan break segera setelah menemukan yang dicari
- Hindari proses yang tidak perlu
-
CONTINUE untuk Clean Code
- Lebih baik skip dengan continue daripada nested if yang dalam
- Membuat kode lebih mudah dibaca
-
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}")
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}")
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))
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)
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)
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()
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()
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]
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}")
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})")
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
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])
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]
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")
Epilog: Loop Mastery Achieved! ๐
Selamat! Kamu telah menyelesaikan perjalanan mempelajari algoritma perulangan. Ingat beberapa prinsip kunci:
- Choose Wisely: Pilih jenis loop yang tepat untuk kasusmu
- Keep It Simple: Loop yang sederhana lebih mudah di-debug
- Think Performance: Untuk data besar, performa matters!
- Avoid Infinite Loops: Selalu pastikan ada exit condition
- Practice Makes Perfect: Semakin sering coding, semakin natural
Challenge untuk Kamu! ๐ช
- Easy: Buat program yang mencetak multiplication table 1-10
- Medium: Implementasikan algoritma untuk mencari prime numbers hingga 100
- Hard: Buat Conway's Game of Life menggunakan nested loops
- 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)