Kita sudah pernah mengerjakan kasus untuk mencari nilai terbesar, terkecil, dan nilai tengah dari 3 buah angka. Solusinya terbilang mudah, hanya menggunakan percabangan if-else saja.
Tapi, bagaimana jika angkanya ada 4?
Atau ada 5?
Atau 100?
Kita tidak mungkin membuat percabangan if-else sebanyak itu π
Oleh karena itu, kita akan mencari solusi lain yang lebih dinamis.
Persiapan
Sebelum memulai pertemuan ini, ada baiknya kalian telah memahami beberapa materi dasar python di bawah ini:
Menggunakan Fungsi max() dan min()
Jika kalian menginginkan cara yang paling cepat, sederhana, dan paling bagus, kalian bisa menggunakan 2 fungsi bawaan dari python; yaitu fungsi min()
dan fungsi max()
.
Kedua fungsi tersebut –sesuai namanya– memiliki tugas untuk mencari nilai terbesar atau terkecil dari suatu deret bilangan.
Perhatikan contoh berikut:
a = [3, 20, 100, -35, 50]
print(a)
print('Nilai terbesar:', max(a))
print('Nilai terkecil:', min(a))
Output:
[3, 20, 100, -35, 50]
Nilai terbesar: 100
Nilai terkecil: -35
Dua fungsi ini adalah cara yang paling cocok kita gunakan untuk real project. Akan tetapi, kalau tujuannya adalah “melatih logika kita”, maka kita harus membuat proses pencarian nilai maksimum dan maksimum secara manual menggunakan perulangan.
Pencarian Secara Manual
Bagaimana logikanya?
Logikanya sederhana.
- Kita akan melakukan travelling ke semua angka yang terdapat pada suatu deret bilangan.
- Yang kedua, kita jadikan nilai pertama sebagai nilai terbesar.
- Pada setiap iterasi, kita akan memeriksa apakah nilai pada iterasi tersebut lebih besar dari nilai terbesar sebelumnya?
- Kalau lebih besar, catat nilai tersebut sebagai nilai terbesar.
- Lalu ulangi prosesnya hingga ke angka paling akhir.
Untuk pencarian nilai terkecil, kita tinggal melakukan logika terbalik.
Menggunakan Perulangan For
Yang pertama, kita buat dulu sebuah fungsi dengan nama nilai_maksimal()
. Fungsi ini akan menerima satu buah parameter berupa list.
Kemudian, kita deklarasikan sebuah variabel untuk menyimpan nilai terbesar. Ingat, sebagai nilai awal, kita jadikan angka pertama dari deret bilangan sebagai nilai terbesar.
Sehingga kode programnya akan terlihat seperti ini:
def nilai_maksimal(deret_bilangan):
nilai_terbesar = deret_bilangan[0]
# di sini nanti letak perulangan kita
return nilai_terbesar
Selanjutnya, kita bisa langsung melakukan perulangan for untuk memeriksa setiap nilai apakah lebih besar dari nilai_terbesar yang pernah tercatat sebelumnya:
def nilai_maksimal(deret_bilangan):
nilai_terbesar = deret_bilangan[0]
for nilai in deret_bilangan:
if nilai > nilai_terbesar:
nilai_terbesar = nilai
return nilai_terbesar
Buat sebuah fungsi lagi dengan nama nilai_minimal()
, fungsi ini akan menerapkan logika terbalik dari fungsi sebelumnya.
Seperti ini kira-kira kode programnya:
def nilai_minimal(deret_bilangan):
nilai_terkecil = deret_bilangan[0]
for nilai in deret_bilangan:
if nilai < nilai_terkecil:
nilai_terkecil = nilai
return nilai_terkecil
Eksekusi Program
Setelah 2 fungsi di atas selesai kita buat, kita bisa langsung mencobanya dengan membuat sebuah list yang berisi deret angka sebagai berikut:
a = [3, 20, 100, -35, 50]
print(a)
print('Nilai terbesar:', nilai_maksimal(a))
print('Nilai terkecil:', nilai_minimal(a))
Output:
[3, 20, 100, -35, 50]
Nilai terbesar: 100
Nilai terkecil: -35
Menggunakan Perulangan Rekursif
Berikutnya, cara lain yang bisa kita lakukan untuk mencari nilai maksimal dan nilai minimal adalah menggunakan perulangan rekursif.
Perulangan rekursif memiliki alur yang unik dan cukup rumit. Dan untuk memahaminya, kita harus sering-sering berlatih memecahkan kasus pemrograman menggunakan perulangan rekursif.
Berikut ini kode program untuk mencari nilai terbesar dengan rekursif:
def nilai_maksimal (list):
nilai_terbesar = list[0]
if len(list) > 1:
# proses rekursif
next_nilai_terbesar = nilai_maksimal(list[1:])
if next_nilai_terbesar > nilai_terbesar:
nilai_terbesar = next_nilai_terbesar
return nilai_terbesar
Kita coba testing:
a = [3, 20, 100, -35, 50]
print(a)
print('Nilai terbesar:', nilai_maksimal(a))
Output:
[3, 20, 100, -35, 50]
Nilai terbesar: 100
Nilai terkecil: -35
Penjelasan
Cukup rumit untuk menjelaskan alurnya. Oleh karena itu agar alurnya terlihat sedikit lebih jelas, mari kita tambahkan 2 buah print sebelum dan sesudah blok kode if:
def nilai_maksimal (list):
nilai_terbesar = list[0]
print(f'{list} -> {nilai_terbesar}')
if len(list) > 1:
# proses rekursif
next_nilai_terbesar = nilai_maksimal(list[1:])
if next_nilai_terbesar > nilai_terbesar:
nilai_terbesar = next_nilai_terbesar
print(f'{list} -> {nilai_terbesar}')
return nilai_terbesar
Jalankan kembali program dan kita akan mendapatkan output kira-kira seperti ini:
[3, 20, 100, -35, 50] -> 3
[20, 100, -35, 50] -> 20
[100, -35, 50] -> 100
[-35, 50] -> -35
[50] -> 50
[50] -> 50
[-35, 50] -> 50
[100, -35, 50] -> 100
[20, 100, -35, 50] -> 100
[3, 20, 100, -35, 50] -> 100
Nilai terbesar: 100
Meskipun masih membingungkan, setidaknya alur fungsi rekursif tersebut sudah terpetakan π
Nilai Terkecil dengan fungsi rekursif
Sedangkan untuk mencari nilai terkecil mengguankan fungsi rekursif, kita hanya perlu melakukan logika terbalik:
def nilai_minimal (list):
nilai_terkecil = list[0]
# print(f'{list} -> {nilai_terkecil}')
if len(list) > 1:
# proses rekursif
next_nilai_terkecil = nilai_minimal(list[1:])
if next_nilai_terkecil < nilai_terkecil:
nilai_terkecil = next_nilai_terkecil
# print(f'{list} -> {nilai_terkecil}')
return nilai_terkecil
Kesimpulan
Dari pertemuan ini, kita bisa simpulkan beberapa poin:
- Untuk mencari nilai maksimal dan minimal dari sebuah deret bilangan, python telah menyediakan untuk kita 2 fungsi bawaannya yaitu
min()
danmax()
- Selain itu, kita juga bisa membuatnya secara manual menggunakan perulangan
for
. - Dan apa saja yang bisa kita lakukan dengan perulangan for, kita juga bisa melakukan hal yang dalam bentuk rekursif.
- Cara berfikir secara rekursif jauh berbeda dengan perulangan biasa.
Kode Program Lengkap
Jika kalian ingin mendapatkan kode program lengkap dari pertemuan kali ini, kalian bisa mendapatkannya pada repositori python-latihan-logika di github.
Jangan lupa kasih star ya!βπ
Pertemuan Selanjutnya
Insyaallah pada pertemuan yang akan datang kita akan membuat program untuk menghitung jumlah huruf vokal dari suatu kata.
Misal kita memiliki input berupa "Jakarta"
, maka outputnya adalah: 3 huruf vokal
.
Jika inputnya adalah "Kalimantan"
, maka outputnya adalah: 4 huruf vokal
.
Bagaimana caranya?
Simak terus tutorial latihan logika python di jagongoding!
Jika ada pertanyaan atau sesuatu yang ingin didiskusikan, atau bahkan request tutorial, jangan sungkan-sungkan untuk berkomentar, ya! π
Terima kasih banyak!