Modul 4: Perulangan¶
Operator logika/boolean¶
Selain comparison operators, ada operator lain yang sangat berperan dalam pemrograman, khususnya pada kondisi, yaitu operator logika/boolean. Sering di berbagai permasalahan, ada beberapa kondisi yang harus dicek bersamaan untuk mengetahui apakah aksi perlu dijalankan atau tidak.
Contoh sederhana adalah untuk memastikan apakah nilai mahasiswa yang diinputkan user valid atau tidak, dimana nilai yang valid adalah 0-100. Dalam hal ini kita harus memastikan dua kondisi terpenuhi (kata terpenuhi sering diasosiasikan dengan bernilai True
), yaitu nilai >= 0
dan nilai <=100
. Jika tanpa operator logika, kita bisa menggunakan nested if-else walau kode terlihat kurang simple.
nilai = int(input("Masukkan nilai : "))
if nilai >= 0:
if nilai <= 100:
print('Valid')
else:
print('Tidak Valid')
else:
print('Tidak Valid')
Masukkan nilai : 1000
Tidak Valid
Bandingkan jika kita menggunakan operator logika untuk memastikan kedua kondisi tersebut True
sebelum menjalankan aksi.
nilai = int(input("Masukkan nilai : "))
if nilai >= 0 and nilai <= 100:
print('Valid')
else:
print('Tidak Valid')
Masukkan nilai : 1000
Tidak Valid
Tentu saja akan lebih terlihat efisiensinya dari pada menggunakan nested if saat ada semakin banyak kondisi yang harus dicek.
Untuk itu, mari kita lihat satu persatu operator logika yang tersedia.
Not¶
Seperti pada matematika, operator Not menegasikan nilai boolean seperti pada table di bawah ini.
|
|
---|---|
True |
False |
False |
True |
x = True
y = False
print(not x)
print(not y)
False
True
Terlihat simple dan mungkin saja kita bisa tetap bisa menghasilkan output yang sama tanpa not
, namun penggunaan not
dapat membuat kondisi menjadi lebih mudah dimengerti oleh kita.
Sebagai contoh, misalnya kita ingin menginfokan ke user, jika ia tidak bekerja, maka ia disarankan mengikuti pelatihan. Maka tanpa not
kita bisa mengakalinya dengan if
seperti ini, walau terlihat tidak umum.
is_working = True
if is_working:
pass
else:
print('Silakan mengikuti program pelatihan peningkatan skill coding')
Karena kita tertarik (ingin melakukan aksi) pada kondisi yang False
, maka kita gunakan not
untuk mempersingkat kode, menjadi seperti di bawah ini.
is_working = True
if not is_working:
print('Silakan mengikuti program pelatihan peningkatan skill coding')
And¶
Operator and
digunakan manakala kita ingin memastikan bahwa 2 kondisi bernilai True
sebelum aksi dijalankan. Jika ada satu saja kondisi bernilai False
maka hasil evaluasi and
akan bernilai False
.
|
|
|
---|---|---|
True |
True |
True |
True |
False |
False |
False |
True |
False |
False |
False |
False |
print(True and True)
print(True and False)
print(False and True)
print(False and False)
print(True and True and False)
print(4 > 5 and 5 > 4)
True
False
False
False
False
False
Mari lihat kembali solusi perhitungan bonus pada bagian nested if-else
.
masa_kerja = int(input("Masa Kerja : "))
umur = int(input("Umur : "))
if masa_kerja >= 5:
if umur >50:
print("Anda mendapatkan bonus 20%")
else:
print("Anda mendapatkan bonus 10%")
else:
print("Maaf anda belum mendapatkan bonus")
Sekarang mari kita ubah dengan menggunakan and
dari pada nested if-else
.
masa_kerja = int(input("Masa Kerja : "))
umur = int(input("Umur : "))
if masa_kerja >= 5 and umur > 50: #masa_kerja dan umur diperhatikan
print("Anda mendapatkan bonus 20%")
elif masa_kerja >=5: #tidak peduli dengan umur, hanya tergantung masa_kerja
print("Anda mendapatkan bonus 10%")
else:
print("Maaf anda belum mendapatkan bonus")
Masa Kerja : 10
Umur : 40
Anda mendapatkan bonus 10%
Kedua solusi menghasilkan output yang sama, dan di banyak permasalahan serupa anda dapat memilih menggunakan antara menggunakan nested if-else
atau and
.
Or¶
Berlawanan dengan and
, operator or
akan menghasilkan True
jika salah satu nilai bernilai True, atau dengan kata lain akan False
hanya jika kedua nilainya False
.
x |
y |
x or y |
---|---|---|
True |
True |
True |
True |
False |
True |
False |
True |
True |
False |
False |
False |
Kita biasa menggunakan operator or
jika ada beberapa alternatif kondisi yang menyebabkan suatu aksi dijalankan.
Sebagai contoh kasus, misalnya kita ingin menentukan apakah seseorang berhak menerima diskon 20% atau tidak berdasarkan aturan berikut:
Pembeli merupakan member, atau
Jumlah belanja > 1 juta rupiah, atau
Sedang harbolnas
is_member = True
jlh_belanja = 500000
is_harbolnas = False
if is_member or jlh_belanja > 1000000 or is_harbolnas:
print("Anda mendapat diskon 20%, jumlah bayar : ", 0.8*jlh_belanja)
else:
print("Tidak ada diskon, jumlah bayar: ", jlh_belanja)
Anda mendapat diskon 20%, jumlah bayar : 400000.0
Update Prioritas Operator¶
Baik not
, and
, dan or
tidak berada di level prioritas yang sama. Perhatikan contoh berikut, dapatkan anda menebak urutan prioritas ketiga operator tersebut?
x = True
y = False
z = False
print(x or y and z)
print(not x and y)
True
False
Jika or
setara atau lebih tinggi prioritasnya dari pada and
, maka seharusnya jawabannya adalah False
, namun ternyata jawaban pertama adalah True
, yang artinya and
dieksekusi lebih dulu dari or
. Sehingga dapat disimpulkan prioritas and
lebih tinggi dari or
.
Sedangkan pada jawaban kedua, terlihat bahwa and
tidak dieksekusi lebih dulu dari pada not
, artinya prioritas and
tidak lebih tinggi dari not
. Ternyata, di python memang prioritas not
lebih tinggi dari and
.
Sehingga prioritas operator kita sejuah ini adalah sebagai berikut:
Prioritas |
Operator |
Jenis |
---|---|---|
1. |
|
|
2. |
|
|
3. |
|
unary |
4. |
|
|
5. |
|
binary |
6. |
|
|
7. |
|
|
8. |
|
|
9. |
|
Perulangan¶
Control Statements
Selain dapat memilih block statement yang akan dieksekusi oleh program, komputer juga dapat mengulang-ulang eksekusi suatu block. Kedua fitur ini biasa disebut dengan control statement pada bahasa pemrograman, karena ia dapat menentukan alur eksekusi statement-statement yang ada pada kode program.
Kegunaan Perulangan
Di contoh kode terakhir, kita sudah melihat bagaimana python dapat mengurutkan tiga buah bilangan dari besar ke kecil. Anda juga mestinya dapat membayangkan bagaimana kode python untuk mengurutkan dua bilangan dari besar ke kecil. Mungkin pertanyaannya adalah, bagaimana kalau kita ingin mengurutkan 4 angka, atau 5 angka, dan seterusnya? Apakah kita perlu membuat block kode spesifik untuk tiap banyak angka tersebut?
Tentunya hal ini tidak praktis dilakukan, bahkan tidak mungkin bisa untuk membuat block kode spesifik untuk setiap kemungkinannya. Sekedar informasi, jumlah kemungkinan urutan dari n
buah angka adalah n!
(faktorial), jadi untuk 5 buah angka, maka ada 5! = 120
kemungkinan urutan. Di sinilah perulangan berperan, yaitu dengan mengulang-ulang block statement tertentu sehingga kita tidak perlu menuliskan satu per satu.
Sebagai contoh lain, anda bisa melihat di game komputer, di mana sebuah karakter bisa bergerak dari satu posisi ke posisi yang lain dengan langkah kiri dan kanan berulang-ulang. Anda sudah bisa menebak, tentu saja jika ada 10 pasangan langkah kiri-kanan selama perpindahan, hal itu tidak terjadi karena kode langkah_kiri()
dan langkah_kanan()
(anggap ada fungsi tersebut) ditulis masing-masing 10 kali, melainkan dengan menggunakan perulangan.
Intinya, hampir di semua program komputer akan terdapat perpaduan antara pemilihan dan pengulangan, untuk itu pastikan anda benar-benar mengerti kedua hal tersebut.
#Jenis Statement Perulangan#
Ada 2 jenis statement yang dapat digunakan untuk perulangan berdasarkan keutuhan, yaitu while
dan for
.
Statement while
¶
Fungsi statement while
hampir mirip dengan fungsi if
, yaitu aksi akan dijalankan ketika kondisi bernilai True
. Perbedaannya adalah, jika if
hanya akan menjalankan aksi sebanyak satu kali, while
akan menjalankan aksi berulang-ulang selama kondisi bernilai True
. Berikut ini adalah cara menggunakan statement while
.
while <kondisi>:
<aksi>
Perhatikan contoh berikut:
count = 0
while count < 2:
print(count)
count = count + 1
print('Selesai')
0
1
Selesai
Dari output terlihat bahwa perintah print(count)
dieksekusi sebanyak 2 kali, yaitu ketika nilai count
adalah 0 dan 1. Perubahan nilai count terjadi karena ada perintah count = count + 1
yang tentunya juga dieksekusi sebanyak 2 kali (karena berada di block yang sama dengan print(count)
).
Jika kita jabarkan, maka perintah yang dijalankan oleh program adalah sebagai berikut:
count = 0
while count < 2 #count adalah 0, sehingga kondisi True
print(count) #print(0)
count = count + 1 #count = 0 + 1, maka count = 1
while count < 2 #count adalah 1, sehingga kondisi True
print(count) #print(1)
count = count + 1 #count = 1 + 1, maka count = 2
while count < 2 #count adalah 2, sehingga kondisi False
print('Selesai')
Perhatikan bahwa program selalu mengecek kondisi terlebih dahulu sebelum menjalankan aksi dari while
, begitu kondisi bernilai False
, maka program akan keluar dari statement while
dan melanjutkan ke perintah berikutnya (print('Selesai')
).
Sekarang anda tentu sudah dapat menebak apa yang terjadi jika kita ubah nilai count
yang awalnya 0
menjadi 2
… Ya, tentu saja output yang terlihat hanyalah Selesai
, hal ini karena kondisi while
saat pertama kali dicek sudah bernilai False
sehingga tidak ada aksi (atau juga disebut body) dari while yang dieksekusi.
Kombinasi while
dan if
¶
Seperti yang sudah dijelaskan di bagian block, bahwa mungkin saja terdapat block di dalam block. Dalam hal ini, kita bisa menempatkan if
pada body dari while
atau pun sebaliknya.
Perhatikan contoh berikut ini:
x = 1
jlh_genap = 0
jlh_ganjil = 0
while x <= 10:
if x % 2 == 0:
jlh_genap = jlh_genap + x
else:
jlh_ganjil = jlh_ganjil +x
x = x + 1
print("Jumlah bilangan genap dari 1-10 adalah :", jlh_genap)
print("Jumlah bilangan ganjil dari 1-10 adalah :", jlh_ganjil)
Jumlah bilangan genap dari 1-10 adalah : 30
Jumlah bilangan ganjil dari 1-10 adalah : 25
Statement for
¶
Meskipun sama-sama untuk pengulangan, while
dan for
memiliki bentuk yang berbeda, yaitu while
mengulang berdasarkan kondisi, sementara for
mengulang berdasarkan item di dalam sebuah sequence (kumpulan objek). Pembahasan lebih dalam tentang jenis-jenis sequence dalam Python akan di bahas kemudian. Berikut adalah konstruksi dari statement for
:
for var in <sequence>:
<aksi>
List dan Range
Untuk saat ini, kita cukup mengetahui dua bentuk sequence, yaitu range dan list.
[data_1, data_2, ..., data_n]
: adalah bentuk list dengan n data. Data bisa berupa integer dan sebagainya, bahkan bisa berbeda-beda tipe data di dalam satu list. Untuk membentuk list cukup dengan[]
.range(stop)
: fungsi yang akan membentuk sequence integer berisi0, 1, ..., stop-1
Terdapat bentuk kedua dari range yaitu:
range(start, stop, step)
: membentuk sequence yang dimulai daristart, start+step, start+step+step, ..., stop-1
, atau jikastep
negatif, maka berakhir sampaistop+1
.
Perhatikan contoh berikut ini:
a = [1, 2, 3] # terbentuk sebuah list dengan 3 item
print(a)
print(type(a)) # terlihat bahwa type data a adalah list
b = range(3) # akan terbentuk range dengan 3 item yaitu 0, 1, 2
print(b) # menampilkan objek range
print(list(b)) # untuk menampilkan isi, kita perlu ubah menjadi type list
c = range(10, 0, -1)
print(list(c))
[1, 2, 3]
<class 'list'>
range(0, 3)
[0, 1, 2]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Penggunaan for
dengan list
for
biasa digunakan bersama list
jika kita ingin menggunakan satu persatu item di dalam list untuk aksi yang sama, mulai dari yang paling simple seperti print
atau proses lainnya yang lebih komplek.
Perhatikan beberapa contoh penggunaan for
dengan list
berikut ini:
a = [3, 2, 1]
for i in a:
print(i)
3
2
1
# buat list nama-nama hari
list_hari = ['senin', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu', 'minggu']
# print nama hari satu per satu
for hari in list_hari:
print(hari)
senin
selasa
rabu
kamis
jumat
sabtu
minggu
# buat list nilai
list_nilai = [100, 20, 45, 80, 90, 30]
# hitung banyak nilai di bawah 50
u_50 = 0
for nilai in list_nilai:
if nilai < 50:
u_50 += 1
print(u_50)
3
Penggunaan for
dengan range
Selain pengulangan berdasarkan item di dalam list, ada juga kondisi di mana kita ingin melakukan dengan jumlah yang sudah ditentukan di awal, misalnya 10 kali atau 20 kali dan seterusnya. Salah satu cara mudah adalah dengan menggunakan kombinasi for
dengan range
seperti contoh di bawah ini:
for i in range(10):
print(i, "Cinta Telkom University")
0 Cinta Telkom University
1 Cinta Telkom University
2 Cinta Telkom University
3 Cinta Telkom University
4 Cinta Telkom University
5 Cinta Telkom University
6 Cinta Telkom University
7 Cinta Telkom University
8 Cinta Telkom University
9 Cinta Telkom University
fungsi range
juga bisa diberikan parameter sesuai kebutuhan aksi dalam pengulangan, seperti contoh berikut:
bulan = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"]
# Cetak bulan ganjil saja
for i in range(0, len(bulan), 2):
print(bulan[i])
Januari
Maret
Mei
Juli
September
November
Augmented Assignment (+=
& -=
)¶
Mengingat pada pengulangan kita sering menambahkan atau mengurangi nilai variable counter (e.g., x = x + 1
) untuk melakukan tracking jumlah pengulangan, Python menyediakan cara yang sedikit lebih singkat, yaitu yang disebut dengan augmented assignment yang terdiri dari +=
dan -=
. Perhatikan contoh berikut ini:
a = 0
a += 1 #sama dengan a = a + 1
print(a)
a += 2 #sama dengan a = a + 2
print(a)
a -= 1 #sama dengan a = a - 1
print(a)
1
3
2
Sehingga kita bisa ganti penggunaan increment variable counter pada contoh sebelumnya dengan augmented assignment.
count = 0
while count < 2:
print(count)
count +=1 #sebelumnya count = count + 1
print('Selesai')
0
1
Selesai
Sekedar informasi, pada beberapa bahasa lainnya seperti C/C++/Java, terdapat operator khusus untuk menambah atau mengurangi nilai variable dengan 1, yang biasa disebut dengan increment dan decrement operator yang biasa ditulis dengan ++
dan --
, misalnya count++
. Python tidak memiliki operator ini dan sebagai gantinya dapat menggunakan augmented assignment di atas.
Nested Loop¶
Untuk melakukan nested loop sama seperti nested if-else
, misalnya seperti contoh berikut ini:
i = 0
while i < 3: # while ke-1
print("Loop i =",i)
j = 0
while j < 2: # while ke-2
print("Loop j =",j)
j += 1
i += 1
Loop i = 0
Loop j = 0
Loop j = 1
Loop i = 1
Loop j = 0
Loop j = 1
Loop i = 2
Loop j = 0
Loop j = 1
Pertama mari kita perhatikan dan pahami output dari program di atas, karena nested loop bisa menjadi sangat kompleks dan banyak menimbulkan kesalahan pada program.
Program pertama-tama akan cek kondisi pada
while
ke-1 (i < 3
), jikaTrue
, maka satu per satu statement di bodywhile
tersebut akan dijalankan.karena pertama kali nilai
i = 0
,Loop i = 0
akan tercetakj = 0
statement while ke-2 dieksekusi. Karena
j < 2
bernilaiTrue
, makaLoop j = 0
tercetakj = 0 + 1
, sehinggaj = 1
ini adalah bagian krusial yang programmer pemula sering salah atau terlupa, bahwa setelah menambahkan nilai
j
, maka berikutnya adalah pengecekan kembali ke kondisi while ke-2, bukan mengeksekusii += 1
.karena
j = 1
, sehingga1 < 2
adalahTrue
, makaLoop j = 1
tercetakberikutnya
j = 1 + 1
, sehinggaj = 2
kembali lagi ke pengecekan kondisi while ke-2, karena
j = 2
, sehingga2 < 2
bernilaiFalse
.bagian krusial berikutnya. Selalu ingat, bahwa ketika
False
pada while ke-2, maka yang selesai hanyalah statement while ke-2. Selanjutnya program akan mengeksekusi baris statement (bagian block while ke-1) setelah block while ke-2, atau jika tidak ada statement lain, program akan kembali ke pengecekan kondisi while ke-1. Pada contoh di atas, program akan mengeksekusi satu statement lain yaitui = 0 + 1', sehingga
i = 1`i += 1
adalah statement terakhir dari block while ke-1, maka sekarang program akan kembali ke pengecekan kondisi while ke-1. Karenai = 1
, maka1 < 3
bernilaiTrue
Loop i = 1
akan tercetakj = 0
. Perhatikan bahwa nilaij
diset kembali, bukan melanjutkan dari nilaij
sebelumnya yaitu2
.kondisi while ke-2 bernilai
True
Loop j = 0
tercetakj += 1
, sehinggaj = 1
kondisi while ke-2 bernilai
True
Loop j = 1
tercetakj += 1
, sehinggaj = 2
kondisi while ke-2 bernilai
False
i += 1
, sehinggai = 2
kondisi while ke-1 bernilai
True
Loop i = 2
akan tercetakj += 1
, sehinggaj = 0
kondisi while ke-2 bernilai
True
Loop j = 0
tercetakj += 1
, sehinggaj = 1
kondisi while ke-2 bernilai
True
Loop j = 1
tercetakj += 1
, sehinggaj = 2
kondisi while ke-2 bernilai
False
i += 1
, sehinggai = 3
kondisi while ke-1 bernilai
False
yaitu3 < 3
, program selesai.
Catatan:
aksi
print("Loop i ...
dilakukan sebanyak 3 kali, yaitu menghasilkan Loop i = 0, Loop i = 1, dan Loop i = 2aksi
print("Loop j ...
dilakukan sebanyak 6 kali, yaitu 2 kali untuk setiap kali menjalankanprint("Loop i ...
Jika anda sudah mengerti dengan contoh di atas, dapatkan anda menebak output dari program di bawah ini?
i = 0
while i < 3: # while ke-1
print("Loop i =",i)
j = 0
while j < i: # while ke-2
print("Loop j =",j)
j += 1
i += 1
Loop i = 0
Loop i = 1
Loop j = 0
Loop i = 2
Loop j = 0
Loop j = 1
Penggunaan Nested Loop
Contoh penggunaan nested loop yaitu misalnya pada fungsi untuk mengurutkan nilai dalam list, penambahan nilai pada matriks (1 loop untuk baris, 1 loop untuk kolom), pada program yang kompleks seperti game (1 loop untuk keseluruhan aplikasi game, 1 loop untuk masing-masing mode permainan tertentu. Jika exit di satu bagian game, maka seperti exit di sebuah loop), atau program numerik seperti pengecekan prima. Saat ini kita hanya melihat satu contoh penggunaan nested loop, yaitu untuk mengurutkan nilai seperti kode di bawah ini, tapi anda dipersilakan untuk eksplore sendiri di Internet.
nilai = [7, 2, 4, 9, 1, 6, 0, 5]
print("Sebelum diurutkan:", nilai)
for i in range(len(nilai)-1):
idx_min = i
# cari posisi nilai minimum pada range index ke-i sampai akhir
for j in range(i+1, len(nilai)):
# jika nilai ke-j lebih kecil dari nilai min saat ini (yg ditunjuk idx_min)
# simpan posisi j sebagai idx_min yang baru
if nilai[j] < nilai[idx_min]:
idx_min = j
# tukar posisi nilai minimum ke posisi ke-i
temp = nilai[idx_min]
nilai[idx_min] = nilai[i]
nilai[i] = temp
# tukar posisi pada python bisa juga dengan cara berikut:
# nilai[i], nilai[idx_min] = nilai[idx_min], nilai[i]
print("Setelah diurutkan:", nilai)
Sebelum diurutkan: [7, 2, 4, 9, 1, 6, 0, 5]
Setelah diurutkan: [0, 1, 2, 4, 5, 6, 7, 9]
Terakhir, bisa terdapat lebih dari 2 loop pada nested loop, dan bisa menggabungkan antara while
dan for
.
Selamat anda telah menyelesaikan Modul 4!!
Mohon berkenan memberikan Rating dan Feedback agar kami dapat meningkatkan kualitas modul ini!