Belajar dengan membaca secara berurutan

Loop while dan Menghindari Loop Tak Terbatas

Pelajari loop while di Python untuk mengulang selama kondisi terpenuhi tanpa terjebak loop tak hingga.

Bab for sebelumnya berfokus pada loop di mana hitungan atau target diketahui di awal.

Pernyataan while yang dibahas di sini adalah loop yang berulang "selama kondisi terpenuhi", dan dipakai ketika jumlah iterasi tidak diketahui sebelumnya. Penanganan retry, mengosongkan antrean, loop game — ia muncul di mana-mana dalam kode nyata.

Dasar while — ulangi selama kondisi True

while kondisi: menjalankan blok berulang kali selama kondisinya True. Setiap kali loop berputar, kondisi dievaluasi ulang, dan saat menjadi False, loop keluar.

Bentuknya mirip for, tapi alih-alih mengambil dari target, ia me-loop pada kondisi itu sendiri.

Siklus evaluasi while
Mulaievaluasi kondisijalankan badanperbarui variabelSelesaiTrueevaluasi ulangFalse

Kondisi → jika True, jalankan badan → cek kondisi lagi → keluar ketika False. Aturan utama while: dorong kondisi menuju False di dalam badan.

# Bentuk dasar — cetak 0 sampai 4
count = 0
while count < 5:
    print(count)
    count += 1
# 0 / 1 / 2 / 3 / 4

# Mengosongkan tugas yang tersisa dari sebuah antrean
tasks = ["send mail", "backup", "deploy"]
while tasks:
    task = tasks.pop(0)       # ambil dari depan
    print(f"memproses: {task}")
# memproses: send mail / memproses: backup / memproses: deploy

Contoh kedua mengandalkan fakta bahwa while tasks: berbalik ke False saat list kosong, memakai aturan truthiness dari sebelumnya (list kosong adalah False).

Loop sampai ada 0 pertanyaan tersisa.

① Definisikan remaining = 3 (jumlah item tersisa).

② Pakai while untuk mencetak "Menangani X tersisa" selama remaining > 0, mengurangi remaining 1 setiap kali.

③ Setelah loop keluar, cetak "Semua ditangani".

(Penjelasan akan muncul setelah kamu menjalankan kode dengan benar.)

Python Editor

Jalankan kode untuk melihat output

Menghindari loop tak terbatas — selalu sediakan kondisi terminasi

Jebakan terbesar dengan while adalah loop tak terbatas. Jika kamu lupa update yang membalik kondisi ke False, program tidak pernah berhenti. Bahkan di console dalam-browser ini, itu membekukan halaman sampai timeout beberapa detik (atau puluhan detik) kemudian.

# Buruk: n tidak pernah berubah di dalam badan, jadi tidak pernah berakhir
# n = 10
# while n > 0:
#     print(n)
# (Jangan jalankan ini — membekukan browser / timeout)

# Baik: kurangi n setiap kali sehingga kondisi akhirnya menjadi False
n = 10
while n > 0:
    print(n)
    n -= 1
Pola untuk membangun kondisi terminasi
while n > 0jalankan badann -= 1di-updateakhirnya berakhirwhile n > 0jalankan badantanpa updateloop tak terbatas

Setiap kali kamu menulis while, cek bahwa kamu bisa menjawab "bagaimana kondisi menjadi False?"

Sebelum kamu menjalankannya, tunjuk ke kode dan konfirmasi bahwa setiap variabel di kondisi diperbarui di suatu tempat di badan loop.

Implementasikan hitung mundur dari 5.

① Definisikan count = 5.

② Di dalam while count > 0:, cetak count dan kurangi dengan count -= 1.

③ Setelah loop keluar, cetak "LEPAS LANDAS!".

Python Editor

Jalankan kode untuk melihat output

Menggunakan break dan continue di dalam while

break / continue yang kamu lihat di for bekerja sama di dalam while.

Walaupun kondisi True, break dengan tegas keluar dari loop dan continue mengulang iterasi saat ini — ini adalah pola umum.

break dan continue di dalam while
while condif condbreakkeluar loopwhile condif condcontinueevaluasi cond ulangTrueTruekeluarTrueTruekembali
# Simulasi retry: sampai 5 percobaan, break ketika ditemukan
responses = [None, None, "OK", "OK", "OK"]   # respons API eksternal mock
attempt = 0
found = False
while attempt < 5:
    attempt += 1
    response = responses[attempt - 1]
    if response is None:
        print(f"percobaan {attempt}: tidak ada respons, mencoba lagi")
        continue   # lewati sisa iterasi ini
    print(f"percobaan {attempt}: dapat respons {response}, selesai")
    found = True
    break          # sukses, keluar dari loop

if not found:
    print("mencapai jumlah percobaan maksimum")

Meletakkan attempt += 1 di puncak loop adalah kuncinya. Dengan tata letak ini, bahkan jika continue atau break keluar lebih dini, counter tidak pernah dilewati, jadi jaminan "sampai 5 percobaan" tetap berlaku.

Tulis loop retry password memakai list hasil yang sudah ditentukan (tanpa randomness).

① Siapkan attempts = ["wrong", "wrong", "right", "wrong"] (hasil percobaan).

② Mulai dengan i = 0 dan loop dengan while i < len(attempts):.

③ Di dalam, naikkan i 1 (di puncak), baca satu hasil, dan:

 - Jika "right", cetak "Terotentikasi pada percobaan X" dan break.

 - Selainnya cetak "percobaan X gagal".

④ Tampung boolean di flag found, dan setelah loop cetak "Terkunci" hanya ketika tidak ada jawaban benar yang ditemukan.

Python Editor

Jalankan kode untuk melihat output

Memilih antara for dan while

for dan while keduanya loop, tapi mereka cocok untuk situasi berbeda. Ketika kamu tidak bisa memutuskan, ingat tabel ini.

Ketika kamu ingin…Pilihan terbaikMengapa
Memproses setiap elemen list, dict, dll.forIterasi atas-ke-akhir terbaca alami
Mengulang persis N kali dari 0 sampai N-1for + range(N)Hitungannya dinyatakan eksplisit sebagai angka
Berakhir pada kondisi kompleks di mana hitungan tidak diketahuiwhileKondisi itu sendiri yang menggerakkan loop
Coba ulang sampai respons eksternal sukseswhile + breakKamu bisa keluar segera saat sukses
Memproses input pengguna atau antrean sampai kosongwhileIa berakhir alami saat kosong

Di artikel ini, kita membahas dasar-dasar while, kondisi terminasi yang mencegah loop tak terbatas, mengontrol alur dengan break / continue, dan cara memilih antara for dan while.

Dengan if / for / while terbahas, kamu sudah belajar kontrol alur fundamental.

QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang dicetak kode ini?
n = 3
while n > 0:
print(n)
n -= 1

Soal 2Hal paling penting yang perlu dilakukan untuk menghindari loop tak terbatas di while adalah?

Soal 3Mana cara paling tepat untuk memilih antara for dan while?