While Loop di Python
Pahami while lewat analogi menunggu air mendidih: ulangi selama kondisi benar, berhenti saat selesai, dan hindari jebakan infinite loop.
Analogi: menunggu air mendidih
Bayangkan kamu merebus air. Kamu tidak tahu pasti butuh berapa menit, jadi kamu mengecek terus: "sudah mendidih belum?" Kalau belum, tunggu lagi. Kalau sudah, matikan kompor. Itulah while: ulangi selama kondisinya masih benar, dan kamu tidak perlu tahu di awal berapa kali pengulangan terjadi.
Bandingkan dengan antrean yang sudah jelas jumlah orangnya, itu jatahnya for. while dipakai saat jumlah pengulangan tidak diketahui sebelumnya.
Kenapa konsep ini ada?
Banyak pekerjaan di dunia nyata tidak punya jumlah langkah yang pasti. Menunggu file selesai diunduh, meminta input sampai pengguna memasukkan angka yang benar, membaca data baris demi baris sampai habis, mencoba koneksi sampai berhasil. Semua ini butuh pola "lakukan terus sampai kondisi berubah", dan itulah alasan while diciptakan.
Bentuk dasar while
hitung = 3
while hitung > 0: # selama kondisi True, blok di bawah diulang
print(hitung)
hitung = hitung - 1 # PENTING: kondisi harus bisa berubah jadi False
print("Selesai!")
# Output: 3, 2, 1, lalu "Selesai!"Kunci while cuma satu: pastikan sesuatu di dalam loop mengubah kondisi, supaya loop bisa berhenti.
Contoh 1: tebak angka (jumlah tebakan tidak pasti)
angka_rahasia = 7
tebakan = 0
while tebakan != angka_rahasia:
tebakan = int(input("Tebak angka 1-10: "))
if tebakan < angka_rahasia:
print("Terlalu kecil!")
elif tebakan > angka_rahasia:
print("Terlalu besar!")
print("Benar! Angkanya", angka_rahasia)Kita tidak tahu pengguna butuh berapa kali tebakan, bisa 1 kali, bisa 20 kali. while cocok sempurna di sini. Bandingkan kalau dipaksa pakai for: kamu harus menebak batas maksimal tebakan di awal, misalnya for i in range(100), yang kaku dan membingungkan. while membiarkan masalahnya sendiri yang menentukan kapan berhenti, bukan tebakanmu di awal.
Contoh 2: validasi input data (konteks data)
Saat membersihkan data, kamu sering butuh input yang valid sebelum lanjut. Misalnya meminta umur yang masuk akal:
umur = -1
while umur < 0 or umur > 120:
umur = int(input("Masukkan umur (0-120): "))
if umur < 0 or umur > 120:
print("Umur tidak masuk akal, coba lagi.")
print("Umur tersimpan:", umur)Pola yang sama dipakai saat membaca file: while baris: artinya "baca terus selama masih ada baris".
Pola sentinel: nilai khusus sebagai tanda berhenti
Di pengolahan data, kamu sering tidak tahu kapan data habis sampai kamu menemukannya. Solusinya adalah nilai sentinel: nilai khusus yang disepakati sebagai tanda "sudah selesai", misalnya baris kosong, angka -1, atau kata "SELESAI". Loop terus berjalan sampai sentinel itu muncul, lalu break. Inilah alasan while True + break begitu populer di skrip ETL dan pembaca file: kodenya jujur berkata "aku tidak tahu kapan berhentinya, berhentilah saat datanya bilang berhenti".
Bahaya: infinite loop
Infinite loop terjadi saat kondisi tidak pernah menjadi False. Program jalan selamanya dan tidak merespons.
# JANGAN lakukan ini: hitung tidak pernah berubah!
hitung = 3
while hitung > 0:
print(hitung)
# lupa mengurangi hitung -> loop selamanyaCatatan teknis: Kalau program macet karena infinite loop, tekan
Ctrl+Cdi terminal untuk menghentikannya secara paksa. Kebiasaan baik: sebelum menjalankanwhile, tanyakan ke diri sendiri, "apa yang membuat kondisi ini berhenti?"
Kadang loop selamanya memang disengaja, misalnya server yang terus berjalan. Polanya memakai while True dengan break:
while True:
perintah = input("Ketik 'keluar' untuk berhenti: ")
if perintah == "keluar":
break # keluar dari loop
print("Kamu mengetik:", perintah)Kesalahan umum pemula
SALAH: lupa mengubah variabel kondisi
i = 0
while i < 5:
print(i)
# i tidak pernah bertambah -> infinite loop!BENAR: update variabel di setiap iterasi
i = 0
while i < 5:
print(i)
i = i + 1 # atau i += 1SALAH: kondisi yang mustahil berhenti
while 1 < 2: # selalu True, tidak ada yang berubah
print("halo")BENAR: kondisi bergantung pada sesuatu yang berubah
sisa = 3
while sisa > 0:
print("sisa:", sisa)
sisa -= 1Tantangan
Jumlahkan Sampai Nol
Minta input angka berulang kali dengan while. Setiap angka valid ditambahkan ke total. Loop berhenti saat pengguna mengetik 0, lalu cetak totalnya.