Mid Project

Daftar Playlist Favorit Saya   


Playlist lagu : 
Hold on - Justin Bieber
- Edename - Rich Brian
- No woman no cry - Bob Marley
- Mangu - Fourtwnty
- The Scientist - Coldplay
- Stephanie - Cloonee, Young M.A & InntRaw")


Ini adalah gambar Codingan saya:




Ini adalah link google colab saya:

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 objek Node. Setiap kali objek Node dibuat, kode ini akan dijalankan.
  • self.playlist_lagu = playlist_lagu : Baris ini menyimpan judul lagu yang diberikan (playlist_lagu) sebagai atribut dari objek Node yang dibuat. self mengacu pada objek Node itu sendiri.
  • self.next = None : Baris ini menginisialisasi atribut next dari objek Node. Atribut next akan menyimpan referensi ke Node berikutnya dalam urutan playlist. Awalnya, sebuah node yang baru dibuat belum memiliki node berikutnya, jadi nilainya diatur menjadi None.
  • self.prev = None : Baris ini menginisialisasi atribut prev dari objek Node. Atribut prev akan menyimpan referensi ke Node 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 menjadi None.

2. class Playlist:

  • def __init__(self):: Ini adalah konstruktor untuk objek Playlist. Kode ini dijalankan saat objek Playlist dibuat.

    • self.head = None: Baris ini menginisialisasi atribut head dari objek Playlist. head adalah referensi ke Node pertama dalam playlist. Jika head bernilai None, itu berarti playlist saat ini kosong.
  • def kosong(self):: Metode ini memeriksa apakah playlist kosong.

    • return self.head is None: Baris ini mengembalikan nilai True jika self.head (kepala playlist) adalah None, yang berarti tidak ada lagu dalam playlist. Jika self.head merujuk ke sebuah Node, maka akan mengembalikan False.
  • def tambah_lagu(self, playlist_lagu):: Metode ini menambahkan lagu baru ke akhir playlist.

    • node = Node(playlist_lagu): Membuat objek Node 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 dengan head untuk memulai penelusuran dari awal.
    • while current.next:: Loop ini terus berjalan selama current belum mencapai Node terakhir (yaitu, current.next masih memiliki referensi ke Node lain).
      • current = current.next: Memindahkan current ke Node berikutnya dalam playlist.
    • current.next = node: Setelah loop selesai, current akan berada di Node terakhir. Baris ini mengatur next dari Node terakhir untuk menunjuk ke Node yang baru dibuat, sehingga menambahkannya ke akhir.
    • node.prev = current: Baris ini mengatur prev dari Node yang baru dibuat untuk menunjuk ke Node 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: Mengubah head menjadi Node 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 menjadi None 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 mencapai Node 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: Menghubungkan next dari Node sebelumnya ke Node setelah current, melewati current.
        • current.next.prev = current.prev: Menghubungkan prev dari Node setelah current ke Node sebelumnya, melewati current.
        • 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 ke Node 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 dari Node sebelumnya diatur menjadi None.
      • 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 selama current tidak None (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 ke Node 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 selama current tidak None.
      • print(f"- {current.playlist_lagu}"): Mencetak judul lagu dari Node saat ini.
      • current = current.next: Pindah ke Node berikutnya.

3. Bagian Utama Kode:

  • playlist = Playlist(): Membuat sebuah objek Playlist bernama playlist.
  • playlist.tambah_lagu(...) (enam baris): Menambahkan enam judul lagu yang berbeda ke dalam objek playlist menggunakan metode tambah_lagu.
  • print("\n"): Mencetak baris kosong untuk pemisah output.
  • playlist.tampilkan_lagu(): Memanggil metode tampilkan_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 variabel hapus_lagu.
  • playlist.hapus_lagu(hapus_lagu): Memanggil metode hapus_lagu pada objek playlist 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 variabel cari_lagu.
  • print("Hasil pencarian:"): Mencetak label untuk output hasil pencarian.
  • playlist.cari_lagu(cari_lagu): Memanggil metode cari_lagu pada objek playlist dengan judul lagu yang diinput pengguna, untuk mencari lagu tersebut dalam playlist dan menampilkan hasilnya.


Komentar

Postingan Populer