-
Notifications
You must be signed in to change notification settings - Fork 0
/
songPlaylist
360 lines (279 loc) · 8.86 KB
/
songPlaylist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
import numpy as np
# mendefinisikan array yang akan digunakan
playlist = ([])
# membuat tampilan menu
# push, edit, sort, pop, show, search, exit.
def spotiplay(playlist):
while True:
try:
print("""\nSPOTIPLAY MENU
1. Masukkan lagu ke dalam Playlist.
2. Ubah lagu pada Playlist.
3. Urutkan lagu pada Playlist.
4. Mainkan lagu pada Playlist.
5. Tampilkan lagu pada Playlist.
6. Cari lagu pada Playlist.
7. Hapus isi Playlist.
8. Keluar.""")
menu = int(input("Pilih Menu : "))
if menu == 1:
insertSong(playlist)
elif menu == 2:
updatePlaylist(playlist)
elif menu == 3:
sortPlaylist(playlist)
elif menu == 4:
playSong(playlist)
elif menu == 5:
showPlaylist(playlist)
elif menu == 6:
findSong(playlist)
elif menu == 7:
removePlaylist(playlist)
elif menu == 8:
exitSpotipai()
else:
invalid()
except ValueError:
invalid()
# membuat function yang digunakan pada menu
# function pertama untuk menambahkan lagu ke dalam Playlist
# dengan menggunakan push
def insertSong(playlist):
if playlist == ([]):
print("Masukkan jumlah lagu yang ingin ditambahkan : ")
songs = int(input("(Kapasitas Playlist 20) : "))
if songs < 1 or songs > 20:
insufficient()
else:
push(playlist, songs)
else:
print("Playlist telah terisi, ingin tetap menambah lagu?")
answer = str(input("Jawab (Y/T) : "))
if answer == "Y" or answer == 'y':
print("Masukkan jumlah lagu yang ingin ditambahkan : ")
songs = int(input("(Kapasitas Playlist 20) : "))
add = len(playlist) + songs
if add < 1 or add > 20:
insufficient()
else:
push(playlist, songs)
elif answer == "T" or answer == 't':
cancel()
else:
invalid()
# function kedua untuk mengubah isi playlist
# dengan mengubah nama lagu pada suatu indeks
def updatePlaylist(playlist):
content = len(playlist)
if content != 0:
for x in range(content):
print("Lagu pada posisi-", x, " =", playlist[x])
edit = int(input("Masukkan posisi lagu yang ingin diedit : "))
if edit in range(content):
edited = str(input("Masukkan nama lagu baru : "))
playlist[edit] = edited
success()
print("Lagu pada posisi-", x, " berhasil diubah.")
returnMenu()
else:
unregistered()
else:
emptyPlaylist()
# function ketiga untuk mengurutkan posisi lagu secara alphabetical
def sortPlaylist(playlist):
content = len(playlist)
if content != 0:
sorting = []
for x in range(content):
sorting.append(playlist[x])
sortinteger = []
sortstring = []
for pisah in sorting:
if isinstance(pisah, int):
sortinteger.append(pisah)
else:
sortstring.append(pisah)
mergeSort(sortinteger)
mergeSort(sortstring)
sorting = sortinteger + sortstring
success()
for x in range(content):
print("Lagu pada posisi-", x, " =", sorting[x])
returnMenu()
else:
emptyPlaylist()
# function mergeSort untuk mengurutkan lagu dan menerapkan recursion di dalamnya
# function ini digunakan pada function sortPlaylist
def mergeSort(sorting):
if len(sorting) > 1:
r = len(sorting)//2
L = sorting[:r]
M = sorting[r:]
mergeSort(L)
mergeSort(M)
i = j = k = 0
while i < len(L) and j < len(M):
if L[i] < M[j]:
sorting[k] = L[i]
i += 1
else:
sorting[k] = M[j]
j += 1
k += 1
while i < len(L):
sorting[k] = L[i]
i += 1
k += 1
while j < len(M):
sorting[k] = M[j]
j += 1
k += 1
# function keempat untuk memainkan lagu,
# lalu menghapusnya dari playlist setelah dimainkan
def playSong(playlist):
content = len(playlist)
if content != 0:
print("""Pilih :
1. Mainkan lagu dari posisi awal.
2. Mainkan lagu dari posisi terakhir.""")
answer = int(input("Pilih (1/2) : "))
if answer == 1:
dequeue(playlist)
return playlist
elif answer == 2:
stackPop(playlist)
return playlist
else:
invalid()
else:
emptyPlaylist()
# function kelima untuk menampilkan lagu di dalam Playlist
# bisa dengan mengurutkan posisi berdasarkan alphabetical
def showPlaylist(playlist):
content = len(playlist)
if content != 0:
print("Tampilkan lagu dalam posisi berurutan ? ")
answer = str(input("Jawab (Y/T) : "))
if answer == "Y" or answer == 'y':
success()
sortPlaylist(playlist)
elif answer == "T" or answer == 't':
success()
for x in range(content):
print("Lagu pada posisi-", x, " =", playlist[x])
returnMenu()
else:
invalid()
else:
emptyPlaylist()
# function keenam untuk mencari lagu pada Playlist
# dengan menggunakan binary search
def findSong(playlist):
content = len(playlist)
if content != 0:
binarySearch(playlist, search=str(
input("Masukkan nama lagu yang ingin dicari : ")))
else:
emptyPlaylist()
# function ketujuh untuk menghapus isi seluruh playlist
def removePlaylist(playlist):
content = len(playlist)
if content != 0:
print("Hapus isi Playlist ? ")
answer = str(input("Jawab (Y/T) : "))
if answer == "Y" or answer == 'y':
for x in range(content):
playlist.pop(0)
success()
return playlist
elif answer == "T" or answer == 't':
cancel()
else:
invalid()
else:
emptyPlaylist()
# function kedelapan untuk mengakhiri program
def exitSpotipai():
print("Keluar dari program ? ")
answer = str(input("(Y/T) : "))
if answer == "Y" or answer == 'y':
success()
print("Mematikan program.")
exit()
elif answer == "T" or answer == 't':
cancel()
else:
invalid()
# function push untuk menambahkan value pada array
def push(playlist, songs):
for x in range(songs):
playlist.append(str(input("Masukkan nama lagu : ")))
print(playlist)
playlist = np.array(playlist)
success()
return playlist
# function dequeue untuk menghapus value pada indeks awal array
def dequeue(playlist):
success()
print("Memainkan lagu pada posisi awal.")
playlist.pop(0)
returnMenu()
# function pop untuk menghapus value pada indeks akhir array
def stackPop(playlist):
success()
print("Memainkan lagu pada posisi akhir.")
playlist.pop()
returnMenu()
# function binarySearch untuk mencari nilai array
# dengan menerapkan binary search
def binarySearch(playlist, search):
start = 0
end = len(playlist) - 1
result = False
while start <= end and not result:
mid = (start + end) // 2
if(playlist[mid] == search):
result = True
print("Lagu", search, "berada pada posisi ke-", mid)
returnMenu()
else:
if(search < playlist[mid]):
end = mid + 1
else:
start = mid + 1
if result is False:
unregistered()
# function insufficient sebagai error status
# bila value yang dimasukkan melebihi size array
def insufficient():
print("\nError :\nKapasitas Playlist tidak memadai.")
cancel()
# function emptyPlaylist sebagai error status
# bila array belum memiliki value
def emptyPlaylist():
print("\nError :\nPlaylist belum memiliki isi. Silahkan isi pada Menu 1 !")
cancel()
# function unregistered sebagai error status
# bila value yang dicari tidak ada pada array
def unregistered():
print("\nError :\nLagu tidak terdaftar.")
cancel()
# function success sebagai pemberitahuan
# bila perintah berhasil dieksekusi
def success():
print("\nPerintah berhasil dijalankan.")
# function cancel sebagai pemberitahuan
# bila perintah gagal dieksekusi
def cancel():
print("\nPerintah dibatalkan.")
returnMenu()
# function invalid sebagai error status
# bila perintah yang dimasukkan tidak valid
def invalid():
print("\nError:\nInput tidak valid. Masukkan ulang !")
cancel()
# function returnMenu sebagai pembatas untuk kembali ke menu awal
def returnMenu():
input("Tekan ENTER untuk melanjutkan...\n")
spotiplay(playlist)