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).
Pola Perulangan for
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_dataakan diberikan kesuatu_variabelsecara berurutan. - Pada setiap pemberian data tersebut, blok program yang berada di bawah
forakan dijalankan. Berarti, blok program tersebut akan dijalankan sebanyak kejadian pemberian data tadi. - Blok
forakan 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:
Fungsi range()
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
isebanyak 4 kali di mana pada setiap perubahan tersebut, nilaii+1dicetak 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:
Pola Perulangan while
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
angkaberisi nilai Integer 1. Kondisi ini memenuhi persyaratan awal untuk masuk ke dalam blokwhile. - Blok
whileakan dijalankan dengan nilai variabelangka1 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
whileselesai 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:
Penggunaan else dalam Pola Perulangan
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_dytoakan 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
returntidak akan dijalankan sehinggaforberhenti sempurna dengan habisnya koleksi data. - Karena
forberhenti sempurna, blokelsedijalankan 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
foryang ada sebagai blok program tersendiri. Sehingga, ada blok jam, menit, dan detik. - Dengan
range24, berarti blok jam akan dijalankan sebanyak 24 kali yang masing-masing akan memanggil blok menit. - Dengan
range60, berarti blok menit akan dijalankan sebanyak 60 kali yang masing-masing akan memanggil blok detik. - Dengan
range60, 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.