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:

SituasiGunakan
Iterasi atas list, tuple, string, atau rangefor
Jumlah pengulangan sudah diketahui di awalfor
Loop bergantung pada kondisi yang bisa berubahwhile
Meminta input berulang sampai validwhile
Menu interaktif atau event loopwhile 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:

  1. Tulis program yang meminta pengguna menebak sebuah angka rahasia (simpan sebagai konstanta, misalnya ANGKA_RAHASIA = 42). Gunakan while untuk terus meminta tebakan sampai benar. Di setiap tebakan yang salah, beri petunjuk apakah tebakan terlalu besar atau terlalu kecil. Hitung berapa percobaan yang dibutuhkan.

  2. Buat simulasi pengisian jawaban kuis: gunakan while untuk meminta jawaban soal (A, B, C, atau D) satu per satu, sebanyak 5 soal. Gunakan continue untuk melewati (dan meminta ulang) jika jawaban yang dimasukkan bukan salah satu dari empat pilihan tersebut. Setelah 5 jawaban valid terkumpul, cetak seluruh jawaban.

  3. Gabungkan while dan for: minta pengguna memasukkan jumlah peserta menggunakan while (validasi bahwa jumlahnya antara 1 dan 10), lalu gunakan for dan range() 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.

Referensi

  1. 1Python Docs — The while Statement
  2. 2Real Python — Python “while” Loops (Indefinite Iteration)