Loop yang mengawasi sebuah kondisi
Kalau for menelusuri deret yang sudah diketahui, while terus mengulang selama sebuah kondisi bernilai benar. Kamu memakainya saat tidak tahu sejak awal berapa kali perulangan yang dibutuhkan: mencoba ulang sampai sesuatu berhasil, membaca input sampai pengguna bilang berhenti, memeriksa sebuah layanan sampai ia merespons.
Bentuknya sederhana:
Kode itu mencetak 0 sampai 4. Python memeriksa kondisinya di awal setiap perulangan. Kalau benar, isi loop dijalankan. Lalu kondisinya diperiksa lagi. Saat kondisinya menjadi salah, loop berakhir.
Perhatikan bahwa count += 1 itu penting. Tanpanya, kondisinya akan terus benar selamanya, menjadi infinite loop. Itulah jebakan utama while, dan alasan utama untuk memilih for kalau bisa.
Saat while adalah alat yang tepat
Beberapa kasus penggunaan klasik:
Mencoba ulang sampai berhasil.
Membaca input sampai pengguna keluar.
Memproses antrean.
Benang merahnya: kamu mengawasi perubahan keadaan, bukan menelusuri item satu per satu.
while True tidak masalah
Kamu akan sering melihat pola ini:
Ini cara Python yang idiomatis saat kondisi keluar yang "sebenarnya" ada di dalam isi loop, bukan sesuatu yang rapi untuk diuji di bagian atas. Lebih mudah dibaca daripada membuat flag should_continue yang kamu perbarui di satu tempat dan kamu periksa di tempat lain.
Satu-satunya aturan: pastikan memang ada break (atau return, atau exception yang dimunculkan) yang pada akhirnya akan dicapai kodenya. while True: tanpa syarat dan tanpa jalan keluar adalah cara klasik untuk membuat program macet.
Menghindari infinite loop
Infinite loop terjadi saat kondisinya tetap benar selamanya. Tersangka yang biasa:
- Lupa memperbarui variabel.
while count < 5:butuh sesuatu di dalam isi loop yang mengubahcount. - Memperbarui variabel yang salah.
while i < 10:laluj += 1di dalamnya: mudah terlewat kalau kodemu punya lebih dari beberapa variabel. - Perbandingan floating-point.
while x != 1.0:bisa mengulang selamanya kalauxhanya pernah mendekati 1.0. Pakai<=atauabs(x - 1.0) < tolerancesebagai gantinya.
Kalau kamu terjebak di infinite loop di terminal, tekan Ctrl+C. Itu mengirim sinyal interupsi, dan Python menghentikan apa pun yang sedang dikerjakannya.
break, continue, dan else
while mendukung tiga alat "alur" yang sama dengan for:
breaklangsung keluar dari loop.continuemelompat ke perulangan berikutnya (sehingga kondisinya diperiksa lagi).elsedijalankan kalau loop selesai tanpabreak.
Itu pengecekan bilangan prima yang sederhana. Kalau break di dalamnya terpicu, bilangannya komposit. Kalau loop berakhir secara alami (kondisinya menjadi salah), else dijalankan dan menyatakan bilangan itu prima.
while vs for: pilih yang mana?
Tes singkat dalam kepala:
- Apakah kamu punya koleksi untuk ditelusuri? →
for. - Apakah kamu perlu mengulang sejumlah kali yang tetap? →
for i in range(n):. - Apakah kamu mengulang sampai suatu kondisi berubah? →
while.
Di kode Python awal, kamu akan menemukan bahwa for mencakup 90% loop. while muncul saat kamu melakukan hal seperti polling, mencoba ulang, atau membangun REPL sederhana. Kalau kamu memakai while untuk menelusuri list dengan indeks, itu tanda kamu sebaiknya beralih ke for + enumerate.
Program while yang praktis
Permainan tebak angka adalah contoh klasik karena jumlah perulangannya bergantung pada cara pengguna bermain:
Kamu tidak bisa tahu sejak awal berapa kali percobaan yang dibutuhkan, karena itu bergantung pada tebakan pengguna. Itulah alasan keberadaan while.
Melihat ke depan
Sekarang kamu sudah melihat dua jenis loop yang disediakan Python. Berikutnya: range() secara rinci. Ia muncul di hampir setiap for loop yang bersifat menghitung, dan nuansa kecilnya layak dipahami sebelum kita masuk ke koleksi.
Pertanyaan yang sering diajukan
Kapan sebaiknya memakai while loop alih-alih for loop?
Pakai while saat kamu tidak tahu sejak awal berapa kali perulangan yang dibutuhkan, misalnya mencoba ulang sampai sesuatu berhasil, atau membaca input sampai pengguna mengetik 'quit'. Pakai for saat kamu menelusuri koleksi yang sudah diketahui.
Bagaimana cara menghindari infinite loop di Python?
Pastikan ada sesuatu di dalam loop yang akhirnya membuat kondisinya bernilai salah. Penyebab infinite loop yang paling umum adalah lupa memperbarui variabel yang menjadi dasar kondisinya. Kalau kamu terjebak di salah satunya, tekan Ctrl+C di terminal untuk menghentikannya.
Apakah while True termasuk kebiasaan buruk?
Tidak dengan sendirinya. while True: dengan break yang jelas di dalamnya adalah pola yang sangat normal untuk "ulangi sampai kita menemui kondisi keluar tertentu". Cara ini lebih rapi daripada membuat flag boolean yang harus kamu urus di dua tempat.