BAB 12: Perulangan dengan while
Gunakan while loop untuk perulangan berbasis kondisi — saat jumlah pengulangan tidak diketahui di awal dan bergantung pada kejadian di tengah program.
for loop yang kita pelajari di bab sebelumnya sangat cocok ketika kita tahu persis apa yang akan diiterasi — sebuah list, sebuah range, sebuah string. Tapi ada skenario di mana kita tidak tahu dari awal berapa kali loop harus berjalan. Jumlahnya bergantung pada sesuatu yang baru diketahui saat program sedang berjalan.
Bayangkan fitur login untuk sistem kuis: peserta harus memasukkan kata sandi, dan program terus meminta input sampai kata sandi yang benar dimasukkan. Berapa kali loop berjalan? Bergantung pada pesertanya. Untuk kasus seperti ini, Python punya while.
Cara Kerja while Loop
while menjalankan blok kode selama kondisinya bernilai True. Setiap kali blok selesai dieksekusi, kondisi diperiksa ulang — dan jika masih True, blok dijalankan lagi.
while kondisi:
# blok kode yang diulang
Bedanya dengan for: while tidak terikat pada iterable tertentu. Ia hanya peduli pada satu hal — apakah kondisinya masih terpenuhi.
Contoh paling langsung:
# kuis.py — menghitung mundur sesi pengerjaan
waktu_tersisa = 5 # dalam menit
while waktu_tersisa > 0:
print(f"Waktu tersisa: {waktu_tersisa} menit")
waktu_tersisa -= 1
print("Waktu habis! Kuis berakhir.")
Waktu tersisa: 5 menit
Waktu tersisa: 4 menit
Waktu tersisa: 3 menit
Waktu tersisa: 2 menit
Waktu tersisa: 1 menit
Waktu habis! Kuis berakhir.
waktu_tersisa -= 1 adalah cara Python untuk menulis waktu_tersisa = waktu_tersisa - 1. Python tidak punya operator -- seperti di bahasa C atau JavaScript — kita selalu menggunakan bentuk variabel -= 1 untuk pengurangan, dan variabel += 1 untuk penambahan.
Pastikan kondisi while akan bernilai False pada suatu titik. Jika variabel yang menjadi kondisi tidak pernah berubah di dalam loop, program akan berjalan selamanya dan hanya bisa dihentikan paksa dengan Ctrl+C.
while untuk Validasi Input
Skenario paling umum while di program nyata adalah meminta input berulang sampai nilainya valid. Kita tidak tahu berapa kali pengguna akan salah memasukkan data — bisa sekali, bisa sepuluh kali — jadi for tidak cocok di sini.
# kuis.py — validasi jumlah soal yang dikerjakan
JUMLAH_SOAL = 20
jumlah_jawaban = -1
while jumlah_jawaban < 0 or jumlah_jawaban > JUMLAH_SOAL:
masukan = input(f"Berapa soal yang kamu jawab? (0-{JUMLAH_SOAL}): ")
jumlah_jawaban = int(masukan)
if jumlah_jawaban < 0 or jumlah_jawaban > JUMLAH_SOAL:
print(f"Input tidak valid. Masukkan angka antara 0 dan {JUMLAH_SOAL}.")
print(f"Tercatat: {jumlah_jawaban} soal dijawab.")
Inisialisasi jumlah_jawaban = -1 memastikan loop berjalan setidaknya sekali — karena -1 < 0 selalu True, kondisi while terpenuhi dari awal dan program langsung meminta input.
break dan continue di while
break dan continue bekerja di while persis seperti di for. break menghentikan loop sepenuhnya; continue melewati sisa iterasi saat ini dan kembali ke pemeriksaan kondisi.
Ini berguna ketika kita ingin keluar dari loop karena alasan tertentu, bukan hanya karena kondisi utama gagal:
# kuis.py — sesi percobaan dengan batas maksimal
MAKS_PERCOBAAN = 3
kata_sandi_benar = "kuis2026"
percobaan = 0
berhasil = False
while percobaan < MAKS_PERCOBAAN:
masukan = input("Masukkan kata sandi peserta: ")
percobaan += 1
if masukan == kata_sandi_benar:
berhasil = True
break
sisa = MAKS_PERCOBAAN - percobaan
if sisa > 0:
print(f"Kata sandi salah. {sisa} percobaan tersisa.")
if berhasil:
print("Akses diberikan. Selamat mengerjakan kuis!")
else:
print(f"Gagal setelah {MAKS_PERCOBAAN} percobaan. Akses ditolak.")
Loop berhenti karena break (kata sandi benar) atau karena kondisi percobaan < MAKS_PERCOBAAN tidak lagi terpenuhi (batas percobaan habis). Variabel berhasil kemudian menentukan pesan yang ditampilkan.
while True — Loop Tanpa Batas Terencana
Kadang kita memang ingin loop berjalan terus sampai ada perintah eksplisit untuk berhenti. Pola yang umum adalah while True dikombinasikan dengan break:
# kuis.py — menu interaktif sederhana
print("=== Menu Kuis ===")
while True:
print("\n1. Mulai kuis baru")
print("2. Lihat rekap nilai")
print("3. Keluar")
pilihan = input("Pilih menu (1-3): ")
if pilihan == "1":
print("Memulai kuis baru...")
elif pilihan == "2":
print("Menampilkan rekap nilai...")
elif pilihan == "3":
print("Sampai jumpa!")
break
else:
print("Pilihan tidak dikenal. Coba lagi.")
while True adalah infinite loop yang terencana — kita sengaja membuatnya tidak punya kondisi keluar di header loop, dan menyerahkan kendali sepenuhnya ke break di dalam blok. Ini adalah pola yang sah dan idiomatis untuk menu interaktif atau event loop sederhana.
Untuk program yang berjalan di terminal dan membutuhkan menu interaktif, while True dengan break adalah pola standar yang digunakan hampir di semua bahasa pemrograman.
for vs while — Kapan Pakai yang Mana
Keduanya adalah alat perulangan, tapi punya karakter yang berbeda. Pilihan yang tepat membuat kode lebih mudah dibaca:
| Situasi | Gunakan |
|---|---|
| Iterasi atas list, tuple, string, atau range | for |
| Jumlah pengulangan sudah diketahui di awal | for |
| Loop bergantung pada kondisi yang bisa berubah | while |
| Meminta input berulang sampai valid | while |
| Menu interaktif atau event loop | while True + break |
Jika kamu bisa menulis sesuatu dengan for, gunakan for. while masuk ketika kondisi untuk berhenti tidak bisa ditentukan sebelum loop mulai berjalan.
Latihan
Tiga tantangan ini mengombinasikan while dengan konsep dari bab-bab sebelumnya:
-
Tulis program yang meminta pengguna menebak sebuah angka rahasia (simpan sebagai konstanta, misalnya
ANGKA_RAHASIA = 42). Gunakanwhileuntuk terus meminta tebakan sampai benar. Di setiap tebakan yang salah, beri petunjuk apakah tebakan terlalu besar atau terlalu kecil. Hitung berapa percobaan yang dibutuhkan. -
Buat simulasi pengisian jawaban kuis: gunakan
whileuntuk meminta jawaban soal (A, B, C, atau D) satu per satu, sebanyak 5 soal. Gunakancontinueuntuk melewati (dan meminta ulang) jika jawaban yang dimasukkan bukan salah satu dari empat pilihan tersebut. Setelah 5 jawaban valid terkumpul, cetak seluruh jawaban. -
Gabungkan
whiledanfor: minta pengguna memasukkan jumlah peserta menggunakanwhile(validasi bahwa jumlahnya antara 1 dan 10), lalu gunakanfordanrange()untuk mencetak formulir “Peserta ke-1:”, “Peserta ke-2:”, dan seterusnya sesuai jumlah yang dimasukkan.
for dan while sudah memberi kita kemampuan untuk mengulang operasi apapun — tapi semua data yang kita olah masih berupa angka dan teks terpisah. Di bab selanjutnya, kita akan berkenalan dengan struktur data pertama yang sesungguhnya: list, tipe data yang dirancang khusus untuk menyimpan kumpulan nilai dalam satu variabel.