While loop mengulang satu blok kode selama sebuah kondisi bernilai True. Kondisinya dicek sebelum tiap putaran. Begitu jadi False, loop berhenti. Bayangin Pak Darto jualan kopi di Warung Kopi: sebelum melayani pembeli berikutnya, dia melirik toples kopi dulu. Masih ada? Layani. Sudah kosong? Berhenti jualan. Yang dicek tiap kali itu kondisinya, dan yang membuat toples akhirnya kosong adalah stok yang berkurang tiap putaran.
🧪 Tebakan cepat: di program jualan kopi di bawah, baris
stok -= 1dihapus. Programnya berhenti setelah berapa putaran? Tebak dulu, jawabannya ada di bagian "Infinite loop: lupa mengubah kondisinya".
Cara kerja while
stok = 3
while stok > 0:
stok -= 1
print(f"Jual 1 kopi, sisa {stok}")
print("Warung tutup")
Jual 1 kopi, sisa 2
Jual 1 kopi, sisa 1
Jual 1 kopi, sisa 0
Warung tutup
| Cek ke | stok |
stok > 0 |
Yang terjadi |
|---|---|---|---|
| 1 | 3 | True |
stok jadi 2, cetak sisa 2 |
| 2 | 2 | True |
stok jadi 1, cetak sisa 1 |
| 3 | 1 | True |
stok jadi 0, cetak sisa 0 |
| 4 | 0 | False |
loop selesai, lanjut ke Warung tutup |
while stok > 0:mengecek kondisinya. KalauTrue, badan loop (baris yang menjorok) jalan sekali, lalu Python kembali ke bariswhiledan mengecek lagi.stok -= 1singkatan daristok = stok - 1. Baris inilah yang membuat kondisinya suatu saat jadiFalse.- Kondisinya dicek 4 kali, badan loop jalan 3 kali. Pengecekan terakhir yang menghentikan loop.
- Kalau kondisinya sudah
Falsedari awal (stok = 0), badan loop gak jalan sama sekali.
for atau while? Pakai for kalau kamu sudah tahu apa yang mau diulang: tiap isi list, atau range(5). Pakai while kalau kamu mengulang sampai sesuatu berubah: stok habis, uang mencapai target, input yang benar.
Infinite loop: lupa mengubah kondisinya
Hapus stok -= 1, dan stok tetap 3 selamanya. 3 > 0 selalu True, jadi loop gak pernah berhenti. Ini disebut infinite loop. Itu jawaban tebakannya: gak pernah berhenti sendiri. Terminal dibanjiri baris yang sama sampai kamu menekan Ctrl+C:
Jual 1 kopi, sisa 3
Jual 1 kopi, sisa 3
^CTraceback (most recent call last):
File "/home/darto/warung.py", line 3, in <module>
print(f"Jual 1 kopi, sisa {stok}")
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
^Cadalah Ctrl+C yang kamu tekan. Python berhenti di baris mana pun yang sedang jalan saat itu, lalu menulisKeyboardInterrupt.- Tiap
whilebutuh sesuatu di badannya yang mendorong kondisinya keFalse, atau sebuahbreak.
break: keluar di tengah jalan
break menghentikan loop saat itu juga, tanpa menunggu kondisinya jadi False. Misalnya gelas terakhir disisihkan untuk Pak Darto sendiri:
stok = 3
while stok > 0:
stok -= 1
if stok == 1:
break
print(f"Jual 1 kopi, sisa {stok}")
print("Warung tutup")
Jual 1 kopi, sisa 2
Warung tutup
Di putaran kedua stok jadi 1, break jalan, dan Python langsung loncat ke baris setelah loop. print di bawah break gak sempat jalan.
Pola yang sering dipakai: while True: yang sengaja gak pernah False, dengan break di dalamnya. Pak Darto menabung Rp150.000 per hari sampai minimal Rp500.000:
uang = 0
hari = 0
while True:
hari += 1
uang += 150000
if uang >= 500000:
break
print(hari, uang) # 4 600000
continue: lompat ke putaran berikutnya
continue melewati sisa badan loop di putaran itu saja, lalu kembali mengecek kondisi. Loop-nya tetap jalan.
stok = 3
while stok > 0:
stok -= 1
if stok == 1:
continue
print(f"Jual 1 kopi, sisa {stok}")
print("Warung tutup")
Jual 1 kopi, sisa 2
Jual 1 kopi, sisa 0
Warung tutup
Saat stok 1, print dilewati, tapi putaran berikutnya tetap jalan sampai stok 0. Bedanya dengan break: break mengakhiri loop, continue cuma mengakhiri putaran itu.
else di loop
Python punya fitur yang jarang ada di bahasa lain: else setelah loop. Blok else jalan kalau loop selesai normal, yaitu karena kondisinya jadi False. Kalau loop dihentikan break, else dilewati.
stok = 3
while stok > 0:
stok -= 1
print(f"Jual 1 kopi, sisa {stok}")
else:
print("Kopi habis")
print("Warung tutup")
- Program ini mencetak tiga baris
Jual, laluKopi habis, laluWarung tutup. - Tambahkan
if stok == 1: breakdi dalamnya, danKopi habishilang: loop berhenti karenabreak, bukan karena kondisinya. - Dengan
stok = 0, badan loop gak jalan sekali pun, tapielsetetap jalan, karena kondisinyaFalsesecara normal. forjuga bisa punyaelse, dengan aturan yang sama: jalan kalau semua isi sudah dilewati tanpabreak. Cocok untuk pencarian:breaksaat ketemu,elseuntuk "gak ketemu".
⚠️ Jebakan yang sering ketemu
- Lupa mengubah variabel kondisinya. Tanpa
stok -= 1, loop jalan terus. Hentikan dengan Ctrl+C, lalu tambahkan baris yang mengubah kondisinya. continuesebelum penambah atau pengurang. Kalaustok -= 1ditaruh di bawahcontinue, putaran yang dilewati gak pernah mengurangi stok, dan loop gak berhenti.- Salah memilih
>atau>=.while stok >= 0:menjual 4 kali, dan putaran terakhir mencetaksisa -1. - Mengira
elsejalan setelahbreak.elsecuma jalan kalau loop selesai karena kondisinyaFalse.
TL;DR: while kondisi: mengecek kondisinya sebelum tiap putaran dan mengulang selama True. Badan loop harus mengubah sesuatu (stok -= 1) supaya kondisinya suatu saat False. Kalau gak, terjadi infinite loop yang cuma berhenti dengan Ctrl+C (KeyboardInterrupt). break mengakhiri loop saat itu juga, continue cuma melewati sisa putaran itu. else setelah loop jalan kalau loop selesai normal (kondisinya False), dan dilewati kalau berhenti karena break. Pakai for untuk deret yang sudah jelas, while untuk mengulang sampai sesuatu berubah.