Lab 5
Lab 5
Keranjang Boba
Materi List
List adalah sebuah struktur data built-in di bahasa pemrograman Python. List
direpresentasikan sebagai sebuah barisan terurut yang mengandung elemen-elemen di
dalamnya. Ibaratkan list adalah sebuah rentetan loker yang di setiap lokernya terdapat nomor-
nomor, dan masing-masing loker dapat menyimpan sesuatu barang.
List juga merupakan sebuah objek yang mutable dan iterable. List berupa objek mutable
artinya isi / kandungannya dapat berubah. List berupa objek iterable artinya kita bisa melakukan
iterasi / looping pada setiap elemen-elemen di dalam list.
Deklarasi List
Kita bisa membuat sebuah list dengan mendeklarasikan langsung seperti di bawah ini:
lst1 = []
lst2 = [1, 2, 3]
lst3 = [1, "Hello", [1, 2, 3]]
print(lst1) #output: []
print(lst2) #output: [1, 2, 3]
print(lst3) #output: [1, "Hello", [1, 2, 3]]
Atau, kita bisa membuat list dengan menggunakan constructor dan memasukkan
sebuah object iterable ke dalam parameternya
lst1 = list()
lst2 = list("abcde")
lst3 = list((1, 2, 3))
print(lst1) #output: []
print(lst2) #output: ["a", "b", "c", "d", "e"]
print(lst3) #output: [1, 2, 3]
Perhatikan bahwa ternyata sebuah list bisa mengandung objek-objek dengan tipe data
yang berbeda, bahkan sebuah list juga bisa mengandung list lain di dalamnya! :O
print(my_lst)
#Output: ["Selamat", "pagi", "semua"]
Method tersebut akan memecah string dengan delimiter whitespace (" ").
Perhatikan apabila kita mencoba mengakses list melalui indeksnya, namun indeks yang
kita masukkan berada di luar batas list yang bersangkutan, maka python akan melempar
IndexError
my_lst[0] = 100
print(my_lst) #Output: [100, 2, [1, 2, 3]]
my_lst[2][1] = 0
print(my_lst) #Output: [100, 2, [1, 0, 3]]
my_lst = []
my_lst.append(1)
print(my_lst) # Output: [1]
my_lst.append(2)
print(my_lst) # Output: [1, 2]
my_lst.append("Hello")
print(my_lst) # Output: [1, 2, "Hello"]
Selain .append(), kita juga bisa menggunakan method .insert(). Method .insert()
mengambil 2 parameter (i, elem) sedemikian sehingga elemen elem akan dimasukkan ke
dalam list di index ke i.
my_lst.insert(1, "o")
print(my_lst) # Output: ["a", "o", "b", "c", "d", "e"]
my_lst.insert(5, "p")
print(my_lst) # Output: ["a", "o", "b", "c", "d", "p", "e"]
my_lst = [1, 2, 3, 4, 5]
my_lst.pop(2)
print(my_lst) # Output: [1, 2, 4]
Selain .pop(), kita juga bisa menggunakan method .remove() untuk menghapus
elemen di dalam list. Method .remove() membutuhkan sebuah parameter, kemudian
menghapus elemen yang sesuai dengan parameter yang diberikan. Jika ada 2 atau lebih
elemen yang sama, maka yang dihapus adalah elemen dengan indeks yang lebih kecil.
my_lst.remove("a")
print(my_lst) # Output: ["b", "c", "b", "z"]
my_lst.remove("b")
print(my_lst) # Output: ["c", "b", "z"]
Materi Function
Function dalam bahasa Python dapat diartikan menjadi sebuah subprogram, yang di
dalamnya terdapat beberapa baris program. Misalkan kita mempunyai beberapa statement
program, lalu kita beri nama kumpulan statement tersebut. Nantinya kita bisa menjalankan
program yang sudah kita beri nama kapanpun dan dimanapun, dengan cara memanggil
namanya tersebut.
Bagian dari program yang membuat sebuah function disebut function definition.
Function yang kita panggil bisa disebut called atau invoked. Setiap function bisa menerima
parameter(s) sebagai variabel yang dibutuhkan. Namun perlu diperhatikan bahwa variabel-
variabel yang ada di dalam function hanya bisa dipanggil di dalam function tersebut.
Deklarasi Function
def<function-name>(<parameters>):
<body>
Pemanggilan Function
def selamat():
print("Selamat, kamu telah berhasil!")
selamat()
selamat()
Pada program diatas terdapat sebuah function selamat() dan dipanggil sebanyak dua
kali di bawahnya. Sehingga setiap pemanggilan function selamat(), statement dalam function
tersebut akan dijalankan, yaitu mencetak string “Selamat, kamu telah berhasil!”. Karena function
dipanggil sebanyak dua kali, maka program akan mencetak string sebanyak dua kali.
Bayangkan kita ingin melakukan beberapa statement secara berulang namun kita juga
membutuhkan nilai dari variabel untuk menjalankan statement tersebut. Oleh karena itu kita
bisa membuat function dengan parameter untuk menjalankan program tersebut.
def selamat(nama):
print("Selamat ulang tahun", nama, "!")
print("Semoga panjang umur!")
selamat("James")
selamat("Lucy")
hasil_1 = (2, 3)
hasil_2 = (0, 10)
print("Hasil perkalian 2 x 3 adalah " + hasil_1)
print("Hasil perkalian 0 x 10 adalah " + hasil_2)
Kita juga dapat langsung mencetak atau melakukan print nilai hasil dari return suatu
function tanpa perlu menyimpan hasil return tersebut ke dalam suatu variabel.
def selamat_pagi(nama):
print("Ohayou " + nama)
print(selamat_pagi("Dek Depe"))
# Output:
# Ohayou Dek Depe
# None
Deskripsi Soal:
Keluarga Dek Depe memiliki banyak ladang dan berpikir untuk membuat perkebunan.
Suatu hari, dia menemukan pohon spesial yang dapat membuahkan boba. Karena bisnis boba
sedang hits, Dek Depe akhirnya menanami ladangnya dengan pohon-pohon boba. Dek Depe
membutuhkan beberapa keranjang untuk memanen ladang-ladang boba tersebut. Tiap
keranjang direpresentasikan sebagai list dengan panjang 2 seperti berikut: [S, C]. S
merupakan nama dari keranjang dan C adalah kapasitas biji boba yang bisa ditampung.
Dijamin nama setiap keranjang unik dan panjangnya tidak lebih dari 20 karakter (berbeda satu
sama lain).
Tak butuh waktu lama untuk perkebunan keluarga Dek Depe menjadi sebuah
perkebunan yang besar! Oleh karena itu, Dek Depe memerlukan suatu sistem manajemen
untuk mengatur keranjang-keranjangnya. Ada beberapa operasi yang bisa dilakukan Dek Depe
terhadap keranjang-keranjang yang ia miliki:
a. BELI
Apabila operasi yang dilakukan adalah BELI, maka akan ditambahkan keranjang baru
ke daftar keranjang yang dimiliki Dek Depe. Dipastikan bahwa nama keranjang baru
yang akan ditambahkan belum ada di daftar keranjang sebelumnya.
b. JUAL
Apabila operasi yang dilakukan adalah JUAL, maka keranjang yang bersangkutan akan
dihapus dari daftar keranjang. Dipastikan bahwa keranjang yang akan dibuang sudah
ada di daftar keranjang sebelumnya.
c. UBAH_KAPASITAS
Apabila operasi yang dilakukan adalah UBAH_KAPASITAS, maka keranjang yang
bersangkutan akan diubah kapasitasnya. Dipastikan bahwa keranjang yang ingin diubah
kapasitasnya sudah ada di daftar keranjang.
Panduan Pengerjaan:
1. Pada awalnya, daftar keranjang berupa sebuah list kosong. Lalu akan dijalankan N buah
operasi.
2. Setiap operasi dipastikan berupa salah satu dari BELI, JUAL, UBAH_KAPASITAS,
UBAH_NAMA, LIHAT, LIHAT_SEMUA atau TOTAL_KAPASITAS.
3. Setiap operasi berupa sebuah string yang berisi informasi mengenai operasi yang ingin
dilakukan
4. Jika operasi yang dijalankan adalah BELI, maka operasi tersebut akan diikuti sebuah
string dan sebuah bilangan bulat yang merepresentasikan nama keranjang dan
kapasitas keranjang yang ingin ditambahkan
5. Jika operasi yang dijalankan adalah JUAL, maka operasi tersebut akan diikuti sebuah
bilangan bulat yang merepresentasikan indeks keranjang yang ingin dijual. Dijamin
indeks keranjang yang ingin dijual ada dalam daftar_keranjang
6. Jika operasi yang dijalankan adalah UBAH_KAPASITAS, maka operasi tersebut akan
diikuti oleh 2 buah bilangan bulat yang masing-masing menyatakan indeks keranjang
yang ingin diubah dan kapasitas barunya. Dijamin indeks keranjang yang ingin diubah
ada dalam daftar_keranjang
7. Jika operasi yang dijalankan adalah UBAH_NAMA, maka operasi tersebut akan diikuti
oleh sebuah bilangan bulat dan sebuah string yang masing-masing menyatakan indeks
keranjang yang ingin diubah dan nama barunya. Dijamin indeks keranjang yang ingin
diubah ada dalam daftar_keranjang.
8. Jika operasi yang dijalankan adalah LIHAT, maka operasi tersebut akan diikuti oleh
sebuah bilangan bulat yang menyatakan indeks keranjang yang ingin dilihat. Dijamin
indeks keranjang yang ingin dilihat ada dalam daftar_keranjang.
9. Jika operasi yang dijalankan adalah LIHAT_SEMUA, maka akan dicetak semua
keranjang dalam format tabel. Sediakan minimal 20 karakter untuk nama keranjang dan
10 karakter untuk kapasitas keranjang.
10. Jika operasi yang dijalankan adalah TOTAL_KAPASITAS, maka program mencetak
total kapasitas dari semua keranjang yang dimiliki Dek Depe.
Contoh Interaksi 1:
Operasi 4: TOTAL_KAPASITAS
Total kapasitas keranjang Dek Depe adalah 10014
Operasi 5: LIHAT 1
Keranjang KRJ2 memiliki kapasitas sebesar 10
Operasi 6: JUAL 1
Berhasil menjual KRJ2 yang memiliki kapasitas sebesar 10
Operasi 7: LIHAT_SEMUA
Keranjang Dek Depe
---------------------------
KRJ1 | 5
Kantong_Dorae*mon | 9999
Penjelasan:
Setelah operasi 1, 2, dan 3 dijalankan, list daftar_keranjang berisi [["KRJ1", 5],
["KRJ2", 10], ["Kantong Dora*mon", 9999]]
Ketika operasi 4 dijalankan, maka program akan menghitung total kapasitas dari setiap
keranjang yaitu = 5 + 10 + 9999 = 10014
Ketika operasi 5 dijalankan, maka program akan mencetak informasi berupa nama dan
kapasitas keranjang yang ingin dilihat oleh Dek Depe
Ketika operasi 6 dijalankan, maka program akan menghapus ["KRJ2", 10] dari list
daftar_keranjang
Contoh Interaksi 2:
Operasi 2: TOTAL_KAPASITAS
Total kapasitas keranjang Dek Depe adalah 10
Operasi 4: TOTAL_KAPASITAS
Total kapasitas keranjang Dek Depe adalah 100
Operasi 6: LIHAT 0
Keranjang KERJ4 memiliki kapasitas sebesar 100
Contoh Interaksi 3:
Operasi 2: LIHAT 0
Keranjang KRJ1 memiliki kapasitas sebesar 5
Operasi 4: LIHAT 0
Keranjang KRJ0 memiliki kapasitas sebesar 5
Deskripsi Soal:
Pada suatu hari Dek Depe sedang mengerjakan ujian online di Fakultas Ternak Lele
tercinta. Saat sedang asik - asiknya mengerjakan ujian dengan sangat serius, tiba - tiba Dek
Depe diberikan informasi dari Fakultas, bahwa jawaban dari soal ujian tersebut bocor dan
sudah tersebar ke seluruh mahasiswa dikarenakan kecerobohan seorang asisten pengajar.
Hal ini membuat para tenaga pengajar harus melakukan pergantian soal ujian agar para
mahasiswa tetap menjaga integritas dan kejujuran #NoPlagiarisme
Untung saja, tenaga pengajar sudah membuat beberapa versi soal ujian dengan
berbagai macam tingkat kesulitan yang direpresentasikan dengan sebuah barisan L. Nah, soal
ujian yang mengalami kebocoran adalah soal ujian yang merupakan elemen pertama dari
barisan L tersebut.
Karena soal ujian bocor, maka tim pengajar harus melakukan pencarian soal ujian lain
yang memiliki tingkat kesulitan paling mirip dengan soal ujian yang bocor tersebut. Soal paling
Tim pengajar harus cepat cepat dalam mencari soal pengganti! Oleh karena itu, mereka
meminta kamu sebagai programmer andal di dunia persilatan ini untuk membantu tenaga
pengajar dalam menjunjung integritas dan kejujuran.
Panduan Pengerjaan:
1. Input berubah sebuah barisan bilangan bulat yang menyatakan tingkat kesulitan tiap
soal yang dipisahkan oleh spasi.
2. Output nantinya adalah nomor soal yang merupakan soal yang tingkat kesulitannya
paling mirip.
3. Jika ada dua atau lebih soal yang paling mirip maka nomor soal yang diambil adalah
soal dengan nomor soal terkecil yang ditemukan.
4. Tugas anda adalah mengimplementasikan sebuah function yang menerima parameter
berupa sebuah list yang berisi bilangan bulat. Function tersebut me-return sebuah
bilangan yang berupa nomor soal paling mirip.
Simulasi Program
Contoh masukkan 1:
Masukkan tingkat kesulitan soal: 1 5 4 9 7
Contoh keluaran 1:
Versi soal paling mirip adalah soal ke: 3
Penjelasan:
Soal-soal yang dimiliki oleh tim pengajar memiliki tingkat kesulitan 1, 5, 4, 9, dan 7. Lalu, soal
yang bocor adalah soal pertama (dengan tingkat kesulitan 1).
Selisih soal 2 dengan soal 1 = 5 - 1 = 4
Selisih soal 3 dengan soal 1 = 4 - 1 = 3
Selisih soal 4 dengan soal 1 = 9 - 1 = 7
Selisih soal 5 dengan soal 1 = 7 - 1 = 6
Soal yang dipilih adalah soal 3 dengan selisih 3
Contoh masukkan 2:
Masukkan tingkat kesulitan soal: 7 5 4 6 6 6 1 1 2 10
Contoh keluaran 2:
Versi soal paling mirip adalah soal ke: 4
Contoh keluaran 3:
Versi soal paling mirip adalah soal ke: 2
Contoh masukkan 4:
Masukkan banyak versi soal: 20 5 2 7 8 2 18
Contoh keluaran 4:
Versi soal paling mirip adalah soal ke: 7
Deliverable
Buatlah file zip dengan format nama [KodeAsdos]_[Nama]_[NPM]_[Kelas]_lab5.zip yang
berisi file lab05.py, dan lab05_bonus.py
Contoh: DNS_LouisAkbar_1234567890_lab3.zip