BAB 13: Mengontrol Alur Loop dengan break dan continue

Kendalikan kapan loop berhenti dan iterasi mana yang dilewati menggunakan break dan continue — dua keyword yang membuat loop lebih presisi.

Di bab sebelumnya, kita sudah menggunakan break sekilas di dalam while untuk menghentikan sesi percobaan login. Tapi break dan pasangannya, continue, sebenarnya adalah dua alat yang berdiri sendiri dan bekerja di semua jenis loop — baik for maupun while. Memahami keduanya secara mendalam akan mengubah cara kamu merancang loop: dari yang hanya bisa berjalan lurus, menjadi yang bisa merespons kondisi di tengah jalan.

Bayangkan break dan continue sebagai dua instruksi berbeda yang bisa kamu berikan kepada peserta kuis yang sedang mengerjakan soal: break berarti “hentikan semua, kita selesai di sini”, sementara continue berarti “lewati soal ini, lanjut ke soal berikutnya”.

break — Hentikan Loop Sepenuhnya

Ketika Python menemukan break di dalam loop, seluruh loop langsung dihentikan — tidak peduli apakah kondisi while masih True atau masih ada elemen tersisa di for. Eksekusi berlanjut ke baris pertama setelah blok loop.

Skenario paling umum: mencari sesuatu dalam kumpulan data dan berhenti segera setelah ditemukan.

# kuis.py — mencari peserta yang lulus pertama kali
nilai_peserta = [62, 55, 78, 91, 45, 83]
BATAS_LULUS = 70

for nilai in nilai_peserta:
    if nilai >= BATAS_LULUS:
        print(f"Peserta pertama yang lulus: nilai {nilai}")
        break
Peserta pertama yang lulus: nilai 78

Tanpa break, loop akan terus berjalan dan mencetak semua peserta yang lulus. Dengan break, begitu peserta pertama yang lulus ditemukan, pencarian langsung dihentikan — lebih efisien dan sesuai dengan tujuan.

break hanya menghentikan loop terdalam yang membungkusnya. Jika ada loop bersarang, break di loop dalam tidak akan memengaruhi loop luar.

continue — Lewati Iterasi Ini

continue tidak menghentikan loop — ia hanya melewati sisa kode dalam iterasi saat ini dan langsung melompat ke iterasi berikutnya. Di for, berarti lanjut ke elemen berikutnya; di while, berarti kembali memeriksa kondisi.

Gunakan continue saat kamu ingin mem-filter item tertentu agar tidak diproses, tapi tetap ingin melanjutkan loop untuk item lainnya.

# kuis.py — proses hanya peserta yang hadir (skor bukan None)
skor_peserta = [85, None, 72, None, 91, 68]

total = 0
jumlah_hadir = 0

for skor in skor_peserta:
    if skor is None:
        continue  # lewati peserta yang tidak hadir
    total += skor
    jumlah_hadir += 1

rata_rata = total / jumlah_hadir
print(f"Rata-rata dari {jumlah_hadir} peserta hadir: {rata_rata:.1f}")
Rata-rata dari 4 peserta hadir: 79.0

Perhatikan bahwa continue membuat kode lebih bersih dibanding membungkus seluruh logika dalam if skor is not None. Alih-alih menambah satu level indentasi untuk semua kode yang valid, kita “buang” kasus yang tidak diinginkan di awal dan biarkan kode utama berjalan tanpa indentasi tambahan.

break dan continue di while

Kedua keyword ini bekerja identik di while. Pola yang sangat umum adalah while True dikombinasikan dengan break — loop sengaja dibuat tanpa kondisi keluar di header, dan seluruh kendali diserahkan ke break di dalam blok.

# kuis.py — sesi kuis interaktif dengan opsi keluar
print("=== Sesi Latihan Kuis ===")
soal_dijawab = 0

while True:
    masukan = input(f"\nSoal ke-{soal_dijawab + 1} (ketik jawaban atau 'selesai'): ")

    if masukan.lower() == "selesai":
        break

    if masukan.strip() == "":
        print("Jawaban tidak boleh kosong.")
        continue

    soal_dijawab += 1
    print(f"Jawaban tercatat. Total soal dijawab: {soal_dijawab}")

print(f"\nSesi berakhir. Kamu menjawab {soal_dijawab} soal.")

Di sini break dan continue bekerja bersama: continue membuang input kosong tanpa menambah hitungan, sementara break mengakhiri seluruh sesi ketika peserta mengetik “selesai”.

Mengontrol Loop Bersarang

Masalah yang sering muncul: bagaimana menghentikan loop luar dari dalam loop dalam? Python tidak punya sintaks label seperti Java atau Go, tapi ada pola yang idiomatis menggunakan variabel boolean.

Misalkan kita ingin mencetak pasangan soal-peserta, tapi berhenti sepenuhnya jika ditemukan peserta dengan nilai 0 (kecurangan terdeteksi):

# kuis.py — pemeriksaan silang soal dan peserta
soal = ["Soal A", "Soal B", "Soal C"]
skor_per_soal = [
    [85, 0, 72],   # skor tiap peserta untuk Soal A
    [91, 68, 55],  # skor tiap peserta untuk Soal B
    [78, 83, 0],   # skor tiap peserta untuk Soal C
]

kecurangan_terdeteksi = False

for i, nama_soal in enumerate(soal):
    if kecurangan_terdeteksi:
        break

    for j, skor in enumerate(skor_per_soal[i]):
        if skor == 0:
            print(f"Nilai 0 terdeteksi: {nama_soal}, Peserta {j + 1}")
            kecurangan_terdeteksi = True
            break

        print(f"{nama_soal} — Peserta {j + 1}: {skor}")
Soal A — Peserta 1: 85
Nilai 0 terdeteksi: Soal A, Peserta 2

Variabel kecurangan_terdeteksi berfungsi sebagai sinyal: loop dalam men-set-nya ke True dan break keluar dari loop dalam, lalu loop luar memeriksa variabel itu di awal setiap iterasi dan break juga jika sinyal sudah aktif.

Jika logika nested loop dengan variabel boolean terasa terlalu kompleks, itu biasanya tanda bahwa loop tersebut lebih cocok dipindahkan ke dalam sebuah fungsi — lalu gunakan return untuk keluar dari semua loop sekaligus.

for…else dan while…else

Python punya fitur yang jarang ditemukan di bahasa lain: blok else untuk loop. Blok else dijalankan hanya jika loop selesai secara normal — artinya tidak dihentikan oleh break.

# kuis.py — verifikasi tidak ada nilai kritis
nilai_peserta = [85, 72, 91, 68, 77]
NILAI_KRITIS = 50

for nilai in nilai_peserta:
    if nilai < NILAI_KRITIS:
        print(f"Ditemukan nilai kritis: {nilai}. Perlu perhatian khusus.")
        break
else:
    print("Semua peserta di atas nilai kritis. Tidak ada yang perlu ditindaklanjuti.")
Semua peserta di atas nilai kritis. Tidak ada yang perlu ditindaklanjuti.

Kalau kita ganti salah satu nilai menjadi di bawah 50, break akan terpicu dan blok else tidak akan dijalankan. Ini sangat berguna untuk pola “cari sesuatu — laporkan jika tidak ditemukan” tanpa harus menggunakan variabel boolean tambahan.

Latihan

Tiga tantangan ini mengombinasikan break, continue, dan konsep dari bab-bab sebelumnya:

  1. Tulis program yang menerima input angka dari pengguna secara berulang menggunakan while True. Hentikan loop dengan break jika angka yang dimasukkan adalah 0. Gunakan continue untuk melewati angka negatif tanpa menambahnya ke total. Di akhir, cetak jumlah semua angka positif yang berhasil dikumpulkan.

  2. Kamu punya list nilai = [88, 72, 0, 95, 61, 0, 79]. Tulis loop for yang mencetak setiap nilai, tapi lewati nilai 0 menggunakan continue. Di akhir loop, gunakan else untuk mencetak “Semua nilai berhasil diproses” — dan pastikan pesan itu hanya muncul jika tidak ada break yang terpicu.

  3. Buat program yang meminta pengguna memasukkan kata sandi. Gunakan while True dengan batas maksimal 3 percobaan (simpan sebagai konstanta). Jika kata sandi benar ("kuis2026"), cetak pesan selamat dan hentikan loop. Jika percobaan habis tanpa berhasil, cetak pesan kegagalan. Gunakan variabel boolean untuk menentukan pesan mana yang dicetak setelah loop berakhir — tanpa meletakkan logika print di dalam loop.

break dan continue melengkapi toolkit perulangan kita. Sejauh ini semua data yang kita gunakan — daftar nilai, pilihan menu, skor peserta — sudah ada atau kita buat langsung di kode. Di bab selanjutnya, kita akan berkenalan dengan struktur data pertama yang sesungguhnya: list, tipe data yang dirancang khusus untuk menyimpan dan mengelola kumpulan nilai dalam satu variabel.

Referensi

  1. 1Python Docs — break and continue Statements, and else Clauses on Loops
  2. 2Real Python — Breaking Out of a for Loop