Perulangan secara bawaan menyelesaikan seluruh iterasinya sampai selesai, tetapi banyak kasus menuntut keluar lebih awal atau melewati satu langkah tertentu. Topik ini membahas pernyataan break yang menghentikan perulangan, pernyataan continue yang melompat ke iterasi berikutnya, serta klausa else pada for dan while yang sering disebut loop-else. Setelah membacanya, pencarian nilai di dalam urutan dan pemeriksaan syarat per item dapat ditulis tanpa variabel penanda (flag) tambahan.
Pernyataan break#
Pernyataan break menghentikan perulangan terdalam yang melingkupinya secara langsung, dan eksekusi berlanjut ke baris setelah perulangan itu. Pernyataan ini biasanya dipasangkan dengan percabangan, sehingga perulangan berhenti tepat pada saat tujuan sudah tercapai dan sisa item tidak diperiksa lagi.
daftar_nama = ["Ali", "Budi", "Citra", "Dewi"]
dicari = "Citra"
for nama in daftar_nama:
print("memeriksa", nama)
if nama == dicari:
print("ditemukan, perulangan dihentikan")
breakmemeriksa Ali
memeriksa Budi
memeriksa Citra
ditemukan, perulangan dihentikanBaris untuk Dewi tidak pernah dicetak karena perulangan sudah dihentikan pada Citra. Tanpa break, program tetap benar untuk pencarian ini, tetapi seluruh item tetap diproses, dan itu sia-sia pada data yang besar. Pernyataan break lazim diletakkan di dalam percabangan agar perulangan hanya berhenti pada keadaan yang memang dimaksudkan.
Pola terkait adalah perulangan while True, yaitu kondisi yang sengaja selalu benar sehingga satu-satunya jalan keluarnya adalah break. Bentuk ini dipakai apabila syarat berhenti lebih alami diletakkan di tengah blok, misalnya setelah data berikutnya diperoleh.
putaran = 0
while True:
putaran += 1
if putaran == 3:
break
print("berhenti pada putaran", putaran)berhenti pada putaran 3Kondisi True tidak pernah menjadi salah dengan sendirinya, sehingga tanpa break perulangan ini tidak akan berhenti. Penghitung dinaikkan pada setiap putaran, dan putaran ketiga memicu break, sehingga pesan penutup mencantumkan angka 3. Letak syarat break menentukan banyaknya putaran, sehingga pemindahannya satu baris saja sudah mengubah hasil program.
Pernyataan continue#
Pernyataan continue melompati sisa blok untuk iterasi yang sedang berjalan, lalu kembali ke awal perulangan untuk item berikutnya. Perulangan itu sendiri tidak berhenti, sehingga continue dipakai untuk menyingkirkan item yang tidak perlu diproses tanpa menumpuk kondisi di dalam blok.
for angka in range(1, 11):
if angka % 2 == 0:
continue
print(angka, end=" ")
print()1 3 5 7 9Setiap bilangan genap memicu continue, sehingga baris print di bawahnya tidak dijalankan untuk item itu. Perulangan tetap berlanjut ke bilangan berikutnya karena continue hanya melompati satu iterasi. Tanpa continue, logika yang sama harus ditulis sebagai if angka % 2 != 0: yang menampung seluruh blok pemrosesan, dan penumpukan kondisi semacam itu semakin sulit dibaca apabila bloknya panjang.
Klausa else pada for dan while#
Klausa else dapat dilekatkan pada pernyataan for maupun while. Bloknya dijalankan hanya apabila perulangan selesai secara normal tanpa pernah menemui break, dan blok itu dilewati apabila break dijalankan. Aturan ini membuat pola pencarian menjadi ringkas, karena jalur ketika nilai tidak ditemukan dapat ditulis tanpa variabel penanda yang diperiksa setelah perulangan.
Bentuk ini khas Python karena sebagian besar bahasa lain tidak memiliki klausa serupa. Padanannya di bahasa lain adalah variabel penanda yang diubah di dalam perulangan lalu diperiksa setelahnya, dan klausa else menggantikan seluruh rangkaian itu. Apabila pola ini masih terasa asing, penulisan dengan variabel penanda tetap sah dan hasilnya sama.
daftar = [12, 7, 25, 9]
for dicari in [25, 30]:
for i in range(len(daftar)):
if daftar[i] == dicari:
print(dicari, "ditemukan pada indeks", i)
break
else:
print(dicari, "tidak ada dalam daftar")25 ditemukan pada indeks 2
30 tidak ada dalam daftarPerhatikan penjorokannya. Klausa else sejajar dengan for i yang terdalam, sehingga klausa itu milik perulangan pencarian, bukan milik for dicari di luarnya. Untuk nilai 25, break dijalankan dan else dilewati, sedangkan untuk 30 perulangan selesai tanpa break, sehingga blok else menampilkan pesan ketiadaan. Pernyataan while mengikuti aturan yang sama, yaitu blok else dijalankan apabila kondisinya menjadi salah tanpa pernah menemui break.
Contoh program utuh: memeriksa bilangan prima#
Pemeriksaan bilangan prima memadukan perulangan bersarang dan loop-else. Kandidat diperiksa satu per satu, dan setiap kandidat diuji habis dibagi oleh pembagi dari 2 sampai kandidat-1. Apabila ada pembagi yang membagi habis, perulangan dalam berhenti karena kandidatnya sudah pasti bukan prima. Apabila seluruh pembagi selesai diuji tanpa break, klausa else menyatakan kandidat itu prima.
batas_awal = 10
batas_akhir = 20
for kandidat in range(batas_awal, batas_akhir):
for pembagi in range(2, kandidat):
if kandidat % pembagi == 0:
break
else:
print(kandidat, "adalah prima")11 adalah prima
13 adalah prima
17 adalah prima
19 adalah primaPerulangan dalam untuk kandidat 11 selesai tanpa menemukan pembagi, sehingga blok else yang mencetak. Kandidat 12 berhenti pada pembagi 2, kandidat 13 lolos lagi, sedangkan 14, 15, 16, dan 18 berhenti lebih awal. Rentang yang diuji sengaja dipilih pendek agar setiap putarannya mudah dihitung ulang.
Simpan berkas di atas di direktori kerja, lalu jalankan dengan perintah berikut.
# menjalankan program pencarian bilangan prima
python3 cari-prima.py11 adalah prima
13 adalah prima
17 adalah prima
19 adalah primaKesalahan umum#
Kesalahan pertama adalah mengira break menghentikan seluruh perulangan bersarang. Pernyataan break hanya berlaku pada perulangan terdalam yang melingkupinya, sehingga perulangan luarnya tetap berputar penuh. Perilaku ini menjadikan break aman dipakai di dalam perulangan bersarang, tetapi jangkauannya harus dipahami dengan tepat.
for i in range(3):
for j in range(5):
if j == 2:
break
print(f"i={i} j={j}")i=0 j=0
i=0 j=1
i=1 j=0
i=1 j=1
i=2 j=0
i=2 j=1Meskipun break dijalankan untuk setiap nilai i, perulangan luarnya tetap menyelesaikan tiga putarannya. Untuk keluar dari dua tingkat sekaligus, logikanya perlu ditata ulang, misalnya dengan memeriksa penanda pada perulangan luar atau memecah bagian dalam menjadi fungsi tersendiri yang mengembalikan hasilnya.
Kesalahan kedua terjadi pada gabungan while dan continue. Apabila baris yang memperbarui kondisi berada di bawah continue, baris itu terlewati pada putaran yang melompat, sehingga kondisinya tidak pernah berubah dan program berputar tanpa henti. Pola yang sama berlaku pada for, tetapi karena item berikutnya sudah disiapkan oleh mekanisme iterasi, continue pada for tidak menimbulkan risiko macet.
Kesalahan ketiga adalah salah membaca posisi klausa else pada perulangan bersarang. Klausa itu milik pernyataan for atau while yang sejajar dengannya, bukan milik if yang berada di dalam badan perulangan. Apabila else ditulis menjorok sampai sejajar dengan if, maknanya berubah total, yaitu dijalankan setiap kali syarat if tidak terpenuhi, sehingga pesan “tidak ada dalam daftar” muncul untuk setiap item yang tidak cocok. Periksa penjorokan klausa else terlebih dahulu setiap kali hasil pencariannya terlihat berlebihan.
Ringkasan#
- Pernyataan
breakmenghentikan perulangan terdalam yang melingkupinya, sedangkancontinuemelompati sisa blok untuk satu iterasi saja. - Klausa
elsepadafordanwhiledijalankan hanya apabila perulangan selesai tanpa pernah menemuibreak. - Pola pencarian dengan loop-else menggantikan variabel penanda yang biasanya diperiksa setelah perulangan.
breakpada perulangan bersarang hanya keluar dari tingkat terdalam, sehingga perulangan luar tetap berputar.
Referensi#
- More Control Flow Tools — Python Software Foundation — Bagian resmi tutorial tentang break, continue, dan else pada perulangan.
- The break statement — Python Software Foundation — Referensi bahasa untuk semantik pernyataan break.
- The continue statement — Python Software Foundation — Referensi bahasa untuk semantik pernyataan continue.