Mid Project
https://colab.research.google.com/drive/1LMucdZBavQYf2KE4O7ZqI2SLxI3LnqhE?usp=sharing
Sesuai dengan arahan tugas saya akan menjelaskan beberapa disetiap baris kode yang saya buat, dan juga saya menggunakan menghapus lagu dan pencarian lagu. Ini adalah beberapa penjelasan code di setiap line:
1. class Node:
def __init__(self, playlist_lagu):
: Ini adalah konstruktor untuk objekNode
. Setiap kali objekNode
dibuat, kode ini akan dijalankan.self.playlist_lagu = playlist_lagu
: Baris ini menyimpan judul lagu yang diberikan (playlist_lagu
) sebagai atribut dari objekNode
yang dibuat.self
mengacu pada objekNode
itu sendiri.self.next = None
: Baris ini menginisialisasi atributnext
dari objekNode
. Atributnext
akan menyimpan referensi keNode
berikutnya dalam urutan playlist. Awalnya, sebuah node yang baru dibuat belum memiliki node berikutnya, jadi nilainya diatur menjadiNone
.self.prev = None
: Baris ini menginisialisasi atributprev
dari objekNode
. Atributprev
akan menyimpan referensi keNode
sebelumnya dalam urutan playlist. Ini memungkinkan playlist untuk ditelusuri dari belakang (implementasi doubly linked list). Awalnya, sebuah node yang baru dibuat belum memiliki node sebelumnya, jadi nilainya diatur menjadiNone
.
2. class Playlist:
-
def __init__(self):
: Ini adalah konstruktor untuk objekPlaylist
. Kode ini dijalankan saat objekPlaylist
dibuat.self.head = None
: Baris ini menginisialisasi atributhead
dari objekPlaylist
.head
adalah referensi keNode
pertama dalam playlist. Jikahead
bernilaiNone
, itu berarti playlist saat ini kosong.
-
def kosong(self):
: Metode ini memeriksa apakah playlist kosong.return self.head is None
: Baris ini mengembalikan nilaiTrue
jikaself.head
(kepala playlist) adalahNone
, yang berarti tidak ada lagu dalam playlist. Jikaself.head
merujuk ke sebuahNode
, maka akan mengembalikanFalse
.
-
def tambah_lagu(self, playlist_lagu):
: Metode ini menambahkan lagu baru ke akhir playlist.node = Node(playlist_lagu)
: Membuat objekNode
baru dengan judul lagu yang diberikan.if self.kosong():
: Memeriksa apakah playlist saat ini kosong.self.head = node
: Jika kosong,Node
yang baru dibuat menjadi lagu pertama (kepala) dari playlist.print(f"Lagu '{playlist_lagu}' berhasil ditambahkan ke playlist.")
: Memberikan pesan bahwa lagu berhasil ditambahkan.return
: Menghentikan eksekusi metode karena lagu sudah ditambahkan sebagai kepala.
current = self.head
: Jika playlist tidak kosong,current
diinisialisasi denganhead
untuk memulai penelusuran dari awal.while current.next:
: Loop ini terus berjalan selamacurrent
belum mencapaiNode
terakhir (yaitu,current.next
masih memiliki referensi keNode
lain).current = current.next
: Memindahkancurrent
keNode
berikutnya dalam playlist.
current.next = node
: Setelah loop selesai,current
akan berada diNode
terakhir. Baris ini mengaturnext
dariNode
terakhir untuk menunjuk keNode
yang baru dibuat, sehingga menambahkannya ke akhir.node.prev = current
: Baris ini mengaturprev
dariNode
yang baru dibuat untuk menunjuk keNode
sebelumnya (current
), menjalin hubungan previous dalam doubly linked list.print(f"Lagu '{playlist_lagu}' berhasil ditambahkan ke playlist.")
: Memberikan pesan bahwa lagu berhasil ditambahkan.
-
def hapus_lagu(self, playlist_lagu):
: Metode ini menghapus lagu dari playlist berdasarkan judulnya.if self.kosong():
: Memeriksa apakah playlist kosong.print("Playlist lagu kosong.")
: Jika kosong, tidak ada yang bisa dihapus.return
: Menghentikan eksekusi metode.
lagu_dihapus = None
: Variabel untuk menyimpan judul lagu yang berhasil dihapus.if self.head.playlist_lagu == playlist_lagu:
: Memeriksa apakah lagu yang akan dihapus adalah lagu pertama (kepala).lagu_dihapus = self.head.playlist_lagu
: Menyimpan judul lagu yang akan dihapus.self.head = self.head.next
: Mengubahhead
menjadiNode
berikutnya (jika ada).if self.head:
: Memeriksa apakah setelah penghapusan, playlist masih memiliki lagu.self.head.prev = None
: Jika ada lagu baru di kepala,prev
-nya harus diatur menjadiNone
karena tidak ada lagu sebelumnya.
print(f"Lagu '{lagu_dihapus}' berhasil dihapus dari playlist.")
: Memberitahukan lagu yang dihapus.print("\nDaftar playlist setelah penghapusan:")
: Menampilkan label untuk daftar baru.self.tampilkan_lagu()
: Memanggil metode untuk menampilkan playlist yang baru.return
: Menghentikan eksekusi metode.
current = self.head
: Jika lagu yang dihapus bukan kepala, mulai penelusuran dari awal.while current.next:
: Loop selama belum mencapaiNode
terakhir.if current.playlist_lagu == playlist_lagu:
: Jika judul lagu saat ini cocok dengan yang ingin dihapus.lagu_dihapus = current.playlist_lagu
: Menyimpan judul lagu yang dihapus.current.prev.next = current.next
: Menghubungkannext
dariNode
sebelumnya keNode
setelahcurrent
, melewaticurrent
.current.next.prev = current.prev
: Menghubungkanprev
dariNode
setelahcurrent
keNode
sebelumnya, melewaticurrent
.print(f"Lagu '{lagu_dihapus}' berhasil dihapus dari playlist.")
: Memberitahukan lagu yang dihapus.print("\nDaftar playlist setelah penghapusan:")
: Menampilkan label untuk daftar baru.self.tampilkan_lagu()
: Memanggil metode untuk menampilkan playlist yang baru.return
: Menghentikan eksekusi metode.
current = current.next
: Pindah keNode
berikutnya.
if current.playlist_lagu == playlist_lagu:
: Memeriksa apakah lagu yang akan dihapus adalah lagu terakhir.lagu_dihapus = current.playlist_lagu
: Menyimpan judul lagu yang dihapus.current.prev.next = None
: Jika lagu terakhir,next
dariNode
sebelumnya diatur menjadiNone
.print(f"Lagu '{lagu_dihapus}' berhasil dihapus dari playlist.")
: Memberitahukan lagu yang dihapus.print("\nDaftar playlist setelah penghapusan:")
: Menampilkan label untuk daftar baru.self.tampilkan_lagu()
: Memanggil metode untuk menampilkan playlist yang baru.return
: Menghentikan eksekusi metode.
print(f"Lagu '{playlist_lagu}' tidak ditemukan dalam playlist.")
: Jika lagu tidak ditemukan setelah seluruh playlist diperiksa.
-
def cari_lagu(self, playlist_lagu):
: Metode ini mencari lagu dalam playlist berdasarkan judulnya.if self.kosong():
: Memeriksa apakah playlist kosong.print("Playlist lagu kosong.")
: Jika kosong, tidak ada yang bisa dicari.return
: Menghentikan eksekusi metode.
current = self.head
: Mulai penelusuran dari kepala.while current:
: Loop selamacurrent
tidakNone
(belum mencapai akhir playlist).if current.playlist_lagu == playlist_lagu:
: Jika judul lagu saat ini cocok dengan yang dicari.print(f"Lagu '{playlist_lagu}' ditemukan dalam playlist.")
: Memberitahukan bahwa lagu ditemukan.return
: Menghentikan eksekusi metode.
current = current.next
: Pindah keNode
berikutnya.
print(f"Lagu '{playlist_lagu}' tidak ditemukan dalam playlist.")
: Jika loop selesai tanpa menemukan lagu.
-
def tampilkan_lagu(self):
: Metode ini menampilkan semua lagu dalam playlist.if self.kosong():
: Memeriksa apakah playlist kosong.print("Playlist lagu kosong.")
: Jika kosong, tidak ada yang bisa ditampilkan.return
: Menghentikan eksekusi metode.
current = self.head
: Mulai dari kepala.print("Daftar Playlist Lagu:")
: Mencetak label untuk daftar playlist.while current:
: Loop selamacurrent
tidakNone
.print(f"- {current.playlist_lagu}")
: Mencetak judul lagu dariNode
saat ini.current = current.next
: Pindah keNode
berikutnya.
3. Bagian Utama Kode:
playlist = Playlist()
: Membuat sebuah objekPlaylist
bernamaplaylist
.playlist.tambah_lagu(...)
(enam baris): Menambahkan enam judul lagu yang berbeda ke dalam objekplaylist
menggunakan metodetambah_lagu
.print("\n")
: Mencetak baris kosong untuk pemisah output.playlist.tampilkan_lagu()
: Memanggil metodetampilkan_lagu
untuk menampilkan daftar lagu yang saat ini ada dalam playlist.print("\n")
: Mencetak baris kosong.hapus_lagu = input("Masukkan lagu yang ingin dihapus: ")
: Meminta pengguna untuk memasukkan judul lagu yang ingin dihapus dan menyimpan input dalam variabelhapus_lagu
.playlist.hapus_lagu(hapus_lagu)
: Memanggil metodehapus_lagu
pada objekplaylist
dengan judul lagu yang diinput pengguna, untuk menghapus lagu tersebut dari playlist.print("\n")
: Mencetak baris kosong.cari_lagu = input("Masukkan lagu yang ingin dicari: ")
: Meminta pengguna untuk memasukkan judul lagu yang ingin dicari dan menyimpan input dalam variabelcari_lagu
.print("Hasil pencarian:")
: Mencetak label untuk output hasil pencarian.playlist.cari_lagu(cari_lagu)
: Memanggil metodecari_lagu
pada objekplaylist
dengan judul lagu yang diinput pengguna, untuk mencari lagu tersebut dalam playlist dan menampilkan hasilnya.
Komentar
Posting Komentar