Loop
Pola Perulangan
Secara sederhana, pola perulangan digunakan untuk mengulangi blok program tertentu berdasarkan susunan yang dibuat oleh pemrogram. Dalam Python, pola perulangan ini dapat dikendalikan oleh dua tipe susunan, yaitu urutan data (dengan for
) dan kondisi (dengan while
).
for
Pola Perulangan Pada materi Tipe Data, kita telah mengetahui bahwa String merupakan untaian dari karakter-karakter. Dalam Python, karakteristik ini membuat String terkategorikan di bawah suatu kelompok tipe data yang bernama tipe urutan (sequence types) yang juga mencakup List dan Tuple. Kelompok tipe data urutan ini memiliki karakteristik di mana setiap data pembangunannya disusun secara terurut dan memiliki nomor indeksnya masing-masing untuk proses pemanggilan. Karakteristik ini dapat dimanfaatkan untuk membangun suatu pola perulangan.
Misalnya, kamu punya daftar teman seangkatan yang sudah kamu ajak kenalan seperti berikut ini:
Lalu, kamu ingin mencetak masing-masing dari nama tersebut satu per satu sehingga menghasilkan suatu daftar yang terlihat lebih "manusiawi" seperti berikut ini:
Untuk mencapai hasil tersebut, kamu perlu menjalankan fungsi print()
untuk setiap nama-nama yang telah kamu masukkan ke dalam variabel teman_kenalan
tadi. Memang, kamu bisa saja melakukan hal seperti ini:
Melelahkan, bukan? Hal seperti ini tidak scalable dan akan menjadi buruk dengan jumlah data besar (450 orang misalnya). Di sinilah, pola perulangan akan membantu kalian. Kita sudah mengetahui bahwa fungsi print()
harus dijalankan untuk setiap nama-nama yang ada tadi. Dalam Python, karakteristik "untuk setiap" ini diimplementasikan dalam bentuk ekspresi for
. Secara umum, ekspresi for
berbentuk seperti berikut ini:
Penjelasan:
- Setiap data pembangun yang ada pada
koleksi_data
akan diberikan kesuatu_variabel
secara berurutan. - Pada setiap pemberian data tersebut, blok program yang berada di bawah
for
akan dijalankan. Berarti, blok program tersebut akan dijalankan sebanyak kejadian pemberian data tadi. - Blok
for
akan selesai apabila koleksi data telah habis atau ada perintah tersurat untuk berhenti.
Proses pencetakan nama-nama teman kenalan tadi dapat diimplementasikan seperti ini:
Sebagaimana dapat diamati dari grafik di atas, setiap iterasi mengubah konten dari variabel nama
sesuai dengan posisi dari urutan yang ditempuh. Pada perjalanan iterasi pertama, variabel nama
akan menggunakan data pada indeks paling awal (0); pada perjalanan iterasi kedua, variabel nama
akan menggunakan data pada indeks setelahnya (1); dan seterusnya.
Cobalah untuk mencari hasil dari program-program di bawah ini:
range()
Fungsi Notasi fungsi:
range(start=0,stop,step=1)Daftar argumen:
start
(Positional): Angka pertama dari deret angka yang diinginkan (*default*-nya 0)stop
(Positional): Batas dari deret angka yang diinginkan (bersifat eksklusif dan harus ada)step
(Positional): Longkapan yang ingin dilakukan pada setiap angka (*default*-nya 1, tidak melongkap).
Pola perulangan for
dapat digunakan untuk sekelompok data dengan tipe data apapun, termasuk angka. Ada beberapa kasus di mana kita ingin melakukan perulangan dengan angka seperti untuk:
- Mengulangi suatu blok program sebanyak x kali (2 kali, 8 kali, 10 kali, 12 kali, dst.)
- Mencetak angka-angka ganjil atau genap
- Dan lain-lain
Untuk kasus-kasus ini, kamu tidak perlu membuat urutan angka sendiri dalam bentuk List. Kamu dapat menggunakan fungsi range()
untuk membuatkan urutannya untukmu. Sederhananya, fungsi ini mirip dengan slicing di mana kita melakukan pemotongan terhadap suatu deret angka yang tak berhingga. Umumnya, fungsi ini ditempelkan langsung ke for
seperti berikut ini:
Hasilnya adalah:
Penjelasan:
- Fungsi
range()
akan membuat urutan sesuai dengan permintaan, yakni 0, 1, 2, dan 3. - Terjadi perubahan nilai variabel
i
sebanyak 4 kali di mana pada setiap perubahan tersebut, nilaii+1
dicetak bersama dengan String "We are in Iteration".
Perlu diketahui bahwa fungsi ini menghasilkan urutan dengan tipe data tersendiri dengan nama yang sama. Apabila kamu ingin menggunakannya di tempat selain for
, disarankan menggunakan casting ke List atau Tuple.
Cobalah untuk mencari hasil dari program-program berikut ini:
while
Pola Perulangan Kali ini, tinjauan akan kita alihkan menuju Boolean dan operasi-operasi yang dapat dilakukan olehnya. Pada materi Struktur Kendali I, kamu telah mengetahui bahwa kondisi yang didefinisikan pada if
akan menentukan apakah program akan masuk ke dalam blok tersebut atau tidak. Sebagai pengingat, coba amati program berikut ini:
Karena variabel angka
berisi nilai Integer 1 dan kondisi yang didefinisikan adalah angka
kurang dari/sama dengan 10, maka angka tersebut akan dicetak ke layar. Berarti, kondisi True yang dihasilkan oleh operasi pembanding yang kita lakukan akan menjalankan kondisi yang didefinisikan. Lalu, bagaimana jika kita ingin mencetak semua angka yang kurang dari/sama dengan 10 seperti berikut ini?
Sebelumnya, kamu telah memiliki variabel angka
yang berisi nilai Integer 1. Untuk melakukan pencetakan terhadap nilai seperti diminta, berarti kamu dapat mencetak isi dari variabel tersebut kemudian menambahkannya selama isi dari variabel tersebut masih kurang dari/sama dengan 10. Dalam Python, pola perulangan seperti ini diimplementasikan dalam bentuk perulangan while
yang memiliki bentuk:
Untuk masalah pencetakan angka tadi, program Python yang dapat menyelesaikannya adalah sebagai berikut:
Penjelasan:
- Pada kondisi awal, variabel
angka
berisi nilai Integer 1. Kondisi ini memenuhi persyaratan awal untuk masuk ke dalam blokwhile
. - Blok
while
akan dijalankan dengan nilai variabelangka
1 yang akan mencetak nilai tersebut kemudian memodifikasi variabelnya untuk menampungangka
+1 (2). - Python akan kembali mengecek kondisi tadi secara terus menerus dan akan menjalankannya apabila masih memenuhi.
- Ketika kondisi tersebut sudah dilanggar, maka blok
while
selesai dijalankan.
Pola Perulangan Tak Berhingga
Pola seperti ini kadang berguna untuk beberapa kasus. Namun, tetap perlu ada batasan terhadap jumlah perulangan yang dilakukan blok tersebut.
Karena blok program yang ada di bawah while
akan dijalankan selama kondisi yang diberikan bernilai True, kamu harus menyusun cara agar kondisi yang diberikan tersebut dapat diubah menjadi False sehingga blok dapat dihentikan. Apabila kondisi tersebut tidak dapat berubah menjadi False pada waktu tertentu, akan tercipta pola perulangan tak berhingga. Amatilah program berikut ini:
Program ini mirip dengan yang sebelumnya. Bedanya, pada setiap perulangan yang dilakukan, variabel angka
tidak mengalami perubahan. Amatilah hasil program di atas di Python-mu!
Untuk menghentikan program Python yang sedang berjalan secara paksa, gunakan
Ctrl
+C
.
Pada proses pemrograman, blok program while
harus disusun bersamaan dengan asuransi bahwa program tersebut akan berhenti normal pada waktu tertentu.
Cobalah untuk mencari hasil dari program-program di bawah ini:
else
dalam Pola Perulangan
Penggunaan Pola perulangan juga dapat diikuti oleh pernyataan else
yang memiliki blok program di bawahnya. Program akan memasuki blok else
apabila pola perulangan berjalan secara normal (tidak diberhentikan secara paksa). Kondisi yang menyebabkan masuknya else
adalah:
- Untuk
for
, urutan datanya sudah habis terpakai. - Untuk
while
, kondisinya sudah tidak memenuhi syarat.
Struktur pola perulangan yang mengandung else
adalah sebagai berikut:
Contoh:
Hasil:
Penjelasan:
- Pemanggilan fungsi
cari_dyto
akan menjalankan sebuah iterasi yang mengecek satu per satu elemen dari List apakah sama dengan Dyto atau tidak. - Karena tidak ada yang sama dengan Dyto, maka kata kunci
return
tidak akan dijalankan sehinggafor
berhenti sempurna dengan habisnya koleksi data. - Karena
for
berhenti sempurna, blokelse
dijalankan dengan mengembalikan False ke pemanggilnya.
Pola Perulangan Bersarang
Dalam membuat pola perulangan, mungkin saja bahwa pola perulangan tersebut menjalankan suatu pola perulangan lain di dalamnya. Pola perulangan seperti ini disebut pola perulangan bersarang (nested loop). Sebagai contoh, mari kita ambil contoh program yang memeragakan cara kerja jam.
00:00:00
Kita mengetahui bahwa bagian detik dari jam tersebut akan berubah 1x setiap detiknya. Kemudian, saat detik tersebut selesai melakukan iterasi (dari 59 kembali ke 00), bagian menitnya turut bertambah 1. Begitu pula dengan bagian jamnya, di mana saat bagian menitnya selesai melakukan iterasi (dari 59 kembali ke 00), bagian jamnya turut bertambah 1. Apabila masing-masing dari bagian jam, menit, dan detik tersebut dijadikan sebuah variabel, maka perubahan yang terjadi adalah sebagai berikut:
Jam | 00 | 01 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Menit | 00 | 01 | ... | ... | 00 | ||||||||
Detik | 00 | 01 | ... | 58 | 59 | 00 | 01 | ... | 58 | 59 | ... | ... | 00 |
Dalam Python, struktur seperti ini dapat diimplementasikan dengan tiga tingkatan pola perulangan for
sebagai berikut:
Penjelasan:
- Anggaplah setiap blok
for
yang ada sebagai blok program tersendiri. Sehingga, ada blok jam, menit, dan detik. - Dengan
range
24, berarti blok jam akan dijalankan sebanyak 24 kali yang masing-masing akan memanggil blok menit. - Dengan
range
60, berarti blok menit akan dijalankan sebanyak 60 kali yang masing-masing akan memanggil blok detik. - Dengan
range
60, berarti blok detik akan dijalankan sebanyak 60 kali yang masing-masing akan memanggil fungsiprint
. - Suatu pola perulangan baru bisa melanjutkan perulangannya setelah blok di dalamnya selesai dilakukan. Berarti, blok menit baru akan melanjutkan ke perulangan selanjutnya setelah blok detik telah berjalan sebanyak 60 kali. Begitupun dengan jam.
Hasil:
Kamu juga dapat mengamati proses pola perulangan bersarang pada sistem rotor yang merupakan salah satu metode enkripsi dalam sistem Enigma yang pernah digunakan di Perang Dunia ke-2. Situs peraga ini dapat membantumu dalam mengamatinya. Pada sistem tersebut, setiap kali tombol keyboard ditekan, rotor paling kanan akan melangkah sejauh 1 langkah. Ketika rotor paling kanan tersebut telah berputar kembali ke awal, pergantian kembali ke awal juga akan menarik rotor di sebelah kirinya untuk melangkah sejauh 1 langkah. Cara kerja ini mirip dengan jam tadi.