Control Flow - Looping

Looping

Looping atau perulangan digunakan ketika kita ingin mengeksekusi sebuah kode berulang kali. Contohnya saja kita memiliki sebuah list yang berisikan nama-nama planet. Kemudian jika kita ingin menampilkan seluruh nama-nama planet tersebut, kita bisa saja menampilkannya dengan cara indexing satu per satu untuk masing-masing item pada list tersebut seperti kode berikut.

# tidak efektif
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
print(planets[0])
print(planets[1])
print(planets[2])
print(planets[3])
print(planets[4])
print(planets[5])
print(planets[6])
print(planets[7])

Memang kita bisa melakukannya dengan cara diatas, namun tentu saja cara demikian tidak direkomendasikan. Karena saat kita melakukan indexing seperti contoh diatas, kita harus tahu jumlah item pada list tersebut. Tentunya hal tersebut akan menjadi masalah besar jika list kita memiliki ratusan item atau lebih.

Karena itulah kita akan mempelajari looping untuk melakukan hal serupa. Di materi ini kita akan mengenal 2 jenis looping, yaitu For dan While.

For

Sama halnya dengan bahasa pemrograman lain, python juga memiliki For untuk melakukan looping. Namun, pada bahasa pemrograman lain kita perlu mendefinisikan batasan berapa kali perulangan akan dilakukan. Sedangkan pada python, kita cukup mendefinisikan pada variabel apa kita ingin perulangan dilakukan. Mari kita coba terapkan pada contoh sebelumnya.

# efektif
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']

for planet in planets:
	print(planet)

Jauh lebih ringkas dan mudah dibaca, bukan?

Coba perhatikan kembali pada contoh barusan. Looping For membutuhkan 2 variabel untuk melakukan tugasnya, yaitu

  • Variabel untuk mengakses item pada list, dalam hal ini planet.

  • Sekumpulan nilai untuk diulang, dalam hal ini planets.

For dapat digunakan untuk mengulang nilai pada collection, string, dan range. Cara penggunaannya pun tidak jauh berbeda, jika pada contoh diatas kita telah melakukan perulangan pada sebuah list maka perulangan pada jenis collection lainnya bisa dilakukan seperti contoh berikut.

# looping pada Set
orang = {'Budi', 'Ani', 'Candra', 'Putri', 'Naufal'}
for nama in orang:
  print(nama)


# looping pada tuple
nilai = (77, 85, 72, 66, 95, 90)
for n in nilai:
  print(n)


# looping pada dictionary
ex_dict = {
    'nama': 'Budi',
    'usia': 17,
    'pendidikan': ['tk', 'sd', 'smp', 'sma', 'strata-1']
}
for key in ex_dict:
  print(ex_dict[key])

Perlu diperhatikan bahwa pada collection dictionary, secara default yang akan diulang adalah masing-masing key pada dictionary tersebut. Sehingga jika kita ingin menampilkan value atau item didalamnya, maka kita perlu melakukan indexing menggunakan key tersebut seperti pada contoh diatas.

Pada beberapa kasus, mungkin saja kita perlu melakukan looping secara spesifik sebanyak X kali. Tentunya hal tersebut tidak mungkin dilakukan dengan cara sebelumnya, karena pada cara sebelumnya looping akan berjalan sesuai dengan jumlah item pada collection atau jumlah karakter pada string. Beruntungnya, python telah menyediakan fungsi range untuk mengatasi permasalahan kita.

# print 'Hello World' sebanyak 5 kali
for i in range(0,5):
	print('Hello World!')

Fungsi range membutuhkan 2 input, yaitu angka mulai dan angka berhenti. Kemudian range akan men-generate nilai dari angka mulai hingga tepat sebelum angka berhenti. Pada contoh diatas nilai 0 merupakan angka mulai dan 5 merupakan angka berhenti, maka fungsi range akan men-generate 5 angka yaitu 0, 1, 2, 3, dan 4.

Pada fungsi range, kita tidak harus selalu memulai dari angka 0. Kita bisa saja mulai dari angka berapapun dan berhenti pada angka berapapun.

# bisakah kamu menebak berapa saja angka yang akan dihasilkan dari kode berikut?
for i in range(45, 51):
  print(i)

Berbeda dengan bahasa pemrograman lainnya, secara default looping pada python tidak mencantumkan index atau posisi perulangan saat ini.

Pada beberapa kasus lainnya, ada kalanya kita juga perlu tahu pada putaran berapakah eksekusi saat ini berjalan. Hal ini biasanya kita lakukan ketika melakukan debugging pada kode kita. Untuk melakukannya kita bisa memanfaatkan fungsi bawaan python yaitu enumerate.

# looping pada list beserta enumerate
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
for index, planet in enumerate(planets):
  print(index, planet)

Perhatikan bahwa ketika kita memanfaatkan enumerate, maka kita perlu menambahkan sebuah variabel untuk mengakses index atau posisi perulangan saat ini, dalam hal ini variabel tersebut bernama index.

Sebenarnya, yang terjadi dibalik layar adalah fungsi enumerate akan mengkonversi seluruh item didalam collection menjadi sebuah tuple dengan format (index, value). Kemudian yang baru saja kita pahami adalah salah satu cara untuk mengakses item pada tuple, yaitu dengan melakukan unpack. Sehingga dengan demikian, kita bisa menampilkan posisi perulangan saat dibutuhkan.

Karena tuple yang dihasilkan oleh enumerate memiliki format tertentu, maka kita perlu hati-hati dalam hal urutan variabel pada saat melakukan unpack untuk mencegah hasil yang diharapkan menjadi tidak sesuai dengan keinginan kita.

Mari kita perhatikan pada contoh berikut.

# output tidak sesuai harapan
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
for planet, index in enumerate(planets):
  print(index, planet)

Jika kita menjalankan kode diatas, maka kita akan menyadari bahwa variabel planet akan menampilkan angka, sedangkan variabel index akan menampilkan nama-nama planet. Tentu hal ini tidak sesuai dengan harapan kita, dan juga hal ini akan menyulitkan rekan kita saat membaca kode. Karenanya kita perlu berhati-hati dalam menuliskan urutan variabel ketika melakukan unpack tuple.

While

While merupakan sebuah looping yang berjalan selama kondisi yang diberikan terpenuhi. Jika kondisi tersebut menghasilkan nilai True, maka kode didalam looping akan dijalankan. Sebaliknya, ketika kondisi tersebut menghasilkan nilai False maka program akan melanjutkan eksekusi baris setelah while.

Berikut adalah contoh penggunaan while.

number = 0

while number < 5:
	print(number)
	number += 1

# baris kode selanjutnya

Pada contoh diatas, kita mendefinisikan nilai awal variabel number adalah 0 dan juga sebuah kondisi yaitu number < 5. Di tahap ini, kondisi akan terpenuhi (True) karena nilai number masih kurang dari 5. Kemudian program akan mencetak nilai number saat ini, dan dilanjutkan dengan menambahkan angka 1 pada variabel number itu sendiri sehingga di akhir perulangan pertama nilai number menjadi 1. Karena pada tahap ini kondisi yang kita berikan masih terpenuhi, maka program akan melakukan hal yang sama seperti sebelumnya hingga nilai number menjadi 5.

Ketika nilai number mencapai 5, maka kondisi while tidak akan terpenuhi (False) sehingga eksekusi program akan berlanjut ke baris dibawah blok while.

Looping while bisa bersifat infinit apabila kondisi yang diberikan selalu terpenuhi. Hal ini disebut forever loop yang akan mengakibatkan eksekusi program tidak akan pernah selesai.

# forever loop
number = 0
while number < 5:
	print(number)

# forever loop
while True:
	print('Hello world!')

Kedua contoh looping diatas akan menghasilkan forever loop karena kondisi yang diberikan selalu terpenuhi. Pada contoh pertama, kita memberikan kondisi number < 5. Namun pada blok didalamnya kita tidak pernah menambahkan nilai pada variabel number sehingga variabel number akan selalu bernilai 0 dan kondisi akan selalu terpenuhi atau tidak pernah bernilai False.

Pada contoh kedua kita tidak memberikan sebuah kondisi pada while, melainkan sebuah boolean bernilai True. Hal ini bisa saja dilakukan, dan kode akan berjalan sebagaimana mestinya. Sejatinya while memerlukan sebuah nilai boolean untuk melakukan tugasnya. Nah umumnya dalam memberikan nilai boolean, kita akan membuat sebuah kondisi yang dapat dipenuhi.

Sampai disini mungkin anda akan berpikir, lantas bagaimana caranya menghentikan sebuah looping seperti pada contoh kedua diatas. Tentu saja hal tersebut tidaklah mustahil untuk dilakukan. Selanjutnya kita akan mempelajari Control Loop, yaitu perintah untuk mengendalikan sebuah looping, dalam hal ini menghentikan looping seperti pada contoh kedua diatas.

Control Loop

Control loop merupakan perintah untuk mengendalikan looping. Kita akan mempelajari 2 jenis control loop yaitu break dan continue. Keduanya bisa kita gunakan baik pada looping while maupun looping for. Pada umumnya, kedua control loop tersebut digunakan jika kita ingin menghentikan looping setelah melakukan aksi tertentu. Mari kita lihat secara langsung penerapannya.

Break

Sesuai dengan artinya, break digunakan untuk menghentikan sebuah looping. Berikut adalah contoh penggunaannya.

# kode ini akan mencetak salam sebanyak 3 kali
times = 0
while times < 5:
	print('Hello world!')
	times += 1

	if times == 3:
		break

# kode ini akan mencetak salam sebanyak 3 kali
times = 0
for times in range(0,5):
  print('Hello world!')
  times += 1

  if times == 3:
    break

Pada kedua contoh diatas, seharusnya looping akan berjalan sebanyak 5 kali. Namun karena kita menambahkan sebuah kondisi tambahan if times == 3 maka looping akan berhenti pada putaran ke 3.

Tidak ada perbedaan dalam menggunakan break baik pada while maupun pada for.

Continue

Sesuai dengan artinya pula, continue digunakan untuk melanjutkan proses looping. Namun makna melanjutkan disini lebih ke skip eksekusi kode pada perulangan saat ini, dan langsung dilanjutkan ke perulangan berikutnya. Berikut adalah contoh penggunaannya.

# kode ini akan mencetak bilangan ganjil
number = 0
while number < 11:
  if number % 2 == 0:
    number += 1
    continue

  print(number)
  number += 1

# kode ini akan mencetak bilangan ganjil
for number in range(0,11):
  if number % 2 == 0:
    continue

  print(number)
  number += 1

Pada contoh diatas, kita memberikan sebuah kondisi tambahan yaitu if number % 2 == 0 maka angka tersebut tidak akan dicetak dan looping akan dilanjutkan ke perulangan berikutnya sehingga output yang ditampilkan akan berupa bilangan-bilangan ganjil saja.

Last updated