Perulangan menjalankan sekumpulan pernyataan berulang kali tanpa menyalin kodenya. Topik ini membahas pernyataan for untuk iterasi langsung atas urutan seperti list dan string, fungsi range() untuk perulangan berhitung, serta pernyataan while yang berjalan selama kondisinya benar. Setelah membacanya, bentuk perulangan yang tepat dapat dipilih untuk setiap kasus, dan pola akumulator sederhana seperti penjumlahan serta pencarian nilai tertinggi dapat ditulis dengan benar.
Perulangan for atas urutan#
Pernyataan for mengiterasi item dari sebuah urutan satu per satu. Variabel yang ditulis setelah kata kunci for menampung nilai item berjalan, blok yang menjorok dijalankan untuk setiap item, dan perulangan berakhir setelah item terakhir selesai diproses. Python tidak memerlukan indeks untuk mengunjungi seluruh item, sehingga iterasi atas list maupun string ditulis dengan bentuk yang sama. String diperlakukan sebagai urutan karakter, sehingga perulangan atasnya menghasilkan satu huruf per iterasi.
nilai_ujian = [82, 75, 91, 64]
for nilai in nilai_ujian:
print("nilai:", nilai)
for huruf in "Ayo":
print(huruf)nilai: 82
nilai: 75
nilai: 91
nilai: 64
A
y
oVariabel nilai berulang kali menampung angka satu per satu, sedangkan huruf menampung karakter demi karakter dari string "Ayo". Nama variabel perulangan bebas ditentukan, tetapi nama yang menggambarkan satu item, seperti nilai atau huruf, membuat isi blok lebih mudah dibaca. Setelah perulangan selesai, variabel perulangan tetap ada dan menampung nilai terakhirnya, sehingga huruf bernilai o pada contoh di atas. Perilaku ini berbeda dari sebagian bahasa yang menghapus variabel perulangannya, sehingga hindari menggunakan kembali nama yang sama untuk maksud yang berbeda di bawah perulangan.
range untuk perulangan berhitung#
Fungsi range() menghasilkan deretan bilangan bulat berurutan untuk kebutuhan perulangan berhitung. Bentuk range(n) menghasilkan bilangan dari 0 sampai n-1, bentuk range(a, b) menghasilkan bilangan dari a sampai b-1, dan bentuk ketiga range(a, b, langkah) menambahkan jarak antarbilangan. Batas atas tidak pernah diikutkan, sehingga range(4) menghasilkan empat bilangan, yaitu 0 sampai 3. Nilai langkah boleh negatif untuk menghitung menurun.
Objek range() tidak menghitung seluruh bilangannya di awal, melainkan menghasilkan satu bilangan setiap kali perulangan memintanya, sehingga rentang yang besar tetap hemat memori. Perilaku ini disebut lazy, yakni penundaan pembuatan nilai sampai nilai itu benar-benar dibutuhkan. Untuk mengamati isi rentang sebagai urutan biasa, bungkus dengan list() seperti pada contoh pemeriksaan batas di bagian kesalahan umum.
for i in range(4):
print(i, end=" ")
print()
for i in range(1, 5):
print(i, end=" ")
print()
for i in range(10, 0, -2):
print(i, end=" ")
print()0 1 2 3
1 2 3 4
10 8 6 4 2Indeks posisi dibutuhkan apabila item perlu diakses lewat posisinya. Kombinasi range(len(...)) menyediakan indeks tersebut tanpa mengubah isi listnya.
daftar = [12, 7, 25, 9]
for i in range(len(daftar)):
print(f"indeks {i} bernilai {daftar[i]}")indeks 0 bernilai 12
indeks 1 bernilai 7
indeks 2 bernilai 25
indeks 3 bernilai 9Perulangan while#
Pernyataan while mengulang bloknya selama kondisinya bernilai benar. Kondisi diperiksa kembali di awal setiap putaran, sehingga blok yang dijalankan wajib memuat langkah yang mengarah pada penghentian, misalnya pengurangan penghitung atau pengosongan wadah. Penilaian kondisinya memanfaatkan truthiness yang sama dengan percabangan, sehingga list yang masih berisi data dinilai benar dan list yang kosong dinilai salah. Bentuk while dipilih apabila jumlah putaran belum diketahui di awal, misalnya memproses antrean yang panjangnya berubah-ubah, sedangkan jumlah putaran yang sudah pasti lebih cocok ditangani for karena batasnya tertulis pada satu tempat.
Karena pemeriksaan dilakukan di awal setiap putaran, blok while dapat tidak berjalan sama sekali. Kondisi yang sudah salah sebelum putaran pertama, misalnya penghitung yang langsung bernilai nol, membuat seluruh blok dilewati begitu saja. Dalam keadaan itu, eksekusi berlanjut ke baris setelah perulangan tanpa menjalankan isi bloknya sekali pun.
sisa_coba = 3
while sisa_coba > 0:
print("percobaan tersisa:", sisa_coba)
sisa_coba -= 1percobaan tersisa: 3
percobaan tersisa: 2
percobaan tersisa: 1Contoh berikut memanfaatkan truthiness dari list untuk memproses antrean loket sampai kosong. Metode pop(0) mengambil sekaligus menghapus item pertama, sehingga panjang antrean berkurang setiap putaran dan kondisi while akhirnya bernilai salah.
antrean = ["Ali", "Budi", "Citra"]
while antrean:
berikutnya = antrean.pop(0)
print("melayani", berikutnya)
print("antrean selesai")melayani Ali
melayani Budi
melayani Citra
antrean selesaiPola akumulator dan contoh program utuh#
Banyak perhitungan atas kumpulan data mengikuti pola akumulator (accumulator), yaitu variabel yang dibuat sebelum perulangan lalu diperbarui pada setiap iterasi. Penjumlahan mengumpulkan total, sedangkan pencarian nilai tertinggi membandingkan setiap item dengan pemegang rekor yang berjalan. Program berikut menerapkan kedua pola itu pada satu kumpulan nilai ujian.
nilai_ujian = [82, 75, 91, 64]
total = 0
for nilai in nilai_ujian:
total += nilai
tertinggi = nilai_ujian[0]
for nilai in nilai_ujian:
if nilai > tertinggi:
tertinggi = nilai
rata_rata = total / len(nilai_ujian)
print(f"total : {total}")
print(f"tertinggi : {tertinggi}")
print(f"rata-rata : {rata_rata}")total : 312
tertinggi : 91
rata-rata : 78.0Total dimulai dari 0 dan bertambah dengan setiap nilai, sehingga hasilnya 312. Pemegang rekor tertinggi dimulai dari item pertama, dan hanya nilai yang lebih besar yang menggantikannya, sehingga hasilnya 91. Rata-rata diperoleh dengan membagi total oleh banyaknya item. Pola akumulator juga menjadi dasar bagi perhitungan sederhana lainnya, seperti pencarian nilai terendah dengan perbandingan terbalik atau penghitung item yang memenuhi syarat. Untuk kasus yang sama, fungsi bawaan sum() dan max() menghasilkan angka yang identik tanpa perulangan yang ditulis sendiri.
nilai_ujian = [82, 75, 91, 64]
print(sum(nilai_ujian), max(nilai_ujian), sum(nilai_ujian) / len(nilai_ujian))312 91 78.0Variabel penghitung adalah bentuk akumulator kedua yang sering digunakan. Nilai awalnya nol, dan blok perulangan menambahkannya satu demi satu setiap kali sebuah syarat terpenuhi.
nilai_ujian = [82, 75, 91, 64]
di_atas_batas = 0
for nilai in nilai_ujian:
if nilai >= 75:
di_atas_batas += 1
print("banyak nilai minimal 75:", di_atas_batas)banyak nilai minimal 75: 3Tiga nilai memenuhi syarat, yaitu 82, 75, dan 91, sedangkan 64 tidak menambah penghitung. Pola semacam ini menjadi dasar perhitungan banyaknya item yang lolos kriteria. Item tidak perlu disimpan satu per satu, karena hanya jumlahnya yang ditampung.
Simpan berkas program di atas di direktori kerja, lalu jalankan dengan perintah berikut.
# menjalankan program rekap nilai
python3 rekap-nilai.pytotal : 312
tertinggi : 91
rata-rata : 78.0Kesalahan umum#
Kesalahan pertama adalah perulangan while yang kondisinya tidak pernah berubah. Apabila bloknya tidak memuat langkah yang mengarah pada penghentian, kondisi tetap benar selamanya dan program tidak pernah selesai, sehingga sistem memaksa penghentiannya. Pastikan setiap while memiliki variabel yang diperbarui di dalam bloknya dan kondisi yang dapat menjadi salah.
Kesalahan kedua adalah menganggap batas atas range() ikut diikutkan. Nilai yang diberikan sebagai batas atas hanya menjadi tanda pemberhentian, sehingga range(1, 5) menghasilkan empat bilangan, bukan lima. Selisih semacam ini dikenal sebagai kesalahan off-by-one dan sering lolos sampai program dijalankan.
print(list(range(1, 5)))[1, 2, 3, 4]Apabila lima bilangan 1 sampai 5 memang diperlukan, tulis batas atasnya sebagai 6, sehingga rentangnya menjadi range(1, 6). Kebiasaan mencetak list(range(...)) saat mengembangkan kode membantu memastikan rentang yang dihasilkan sudah sesuai. Pemeriksaan semurah ini jauh lebih ringan daripada menelusuri kesalahan di bagian program yang lain.
Ringkasan#
- Pernyataan
formengiterasi item urutan secara langsung, sedangkanrange()menghasilkan bilangan berhitung dengan batas atas yang tidak pernah diikutkan. - Pernyataan
whileberjalan selama kondisinya benar dan wajib memiliki langkah yang mengarah pada penghentian. - Pola akumulator menampung hasil tiap iterasi pada satu variabel, misalnya total penjumlahan dan pemegang rekor nilai tertinggi.
- Fungsi bawaan
sum()danmax()menggantikan perulangan akumulator yang paling umum.
Referensi#
- More Control Flow Tools — Python Software Foundation — Panduan resmi pernyataan for dan while beserta contohnya.
- The while statement — Python Software Foundation — Referensi bahasa untuk semantik pernyataan while.
- range — Python Software Foundation — Dokumentasi tipe range beserta tiga bentuk argumennya.