#python #list #dictionary #project
Вопрос:
Я пытаюсь написать программу, в которой функция будет перемещаться по списку и выдавать мне только первые 5 песен. Затем, когда я спрашиваю пользователя, хотите ли вы увидеть больше, и пользователь отвечает «да», я хочу, чтобы он напечатал следующие 5 и продолжал до тех пор, пока не останется больше песен. Я работал над этим несколько дней и застрял. Вот мой код, если кто-нибудь может помочь.
video_id_to_title = { 5390161: "Who Want Smoke", 7736243: "INDUSTRY BABY", 8267507: "STAY", 1012930: "Style", 1109274: "bad guy", 2981023: "Blank Space", 4922599: "Love Nwantiti Remix", 4559658: "Essence (Official Video)", 9897626: "Pepas", 5610524: "Outside (Better Days)", 6980497: "Lo Siento BB:/", 4547223: "Face Off", 9086699: "Heat Waves", 3720918: "Despacito", 9086691: "Royals", 1461025: "Fancy Like", 7434914: "Way 2 Sexy", 6093037: "Corta Venas", 6438692: "Need to Know", 8117542: "MONEY", 5746821: "Wild Side ", 9566779: "Knife Talk", 1683724: "Life Support", 5718817: "Save Your Tears", 2459304: "Ghost", 6382983: "Love Yourself", 7394792: "7 rings", } top_hits_playlist = [ 5390161, 7736243, 8267507, 4922599, 4559658, 9897626, 1461025, 5746821, 9566779, 5718817, 2459304, 6382983, 7394792 ] def display_full_playlist(playlist_id: int): user_playlist_choice = input("Which playlists do you want to see? ") answer = input("Do you want to see more?") song = 5 if user_playlist_choice == "Top Hits" or "top hits": for i,x in enumerate(top_hits_playlist): print(video_id_to_title[x]) if song == x: print(answer) if answer == "yes" or answer == "Yes": print() song = 5
Комментарии:
1. В этой строке есть ошибка:
if user_playlist_choice == "Top Hits" or "top hits":
; он не делает то, что вы, вероятно, намереваетесь сделать.2. Вместо этого я предлагаю провести сравнение строк без учета регистра, например
if user_playlist_choice.upper() == "TOP HITS":
. То же самое касается и другогоif
утверждения.3. Просто для полноты, это утверждение анализируется как
if (user_playlist_choice == "Top Hits") or "top hits":
, и строка «лучшие хиты» всегда верна.
Ответ №1:
Я пытаюсь написать программу, в которой функция будет перемещаться по списку и выдавать мне только первые 5 песен. Затем, когда я спрашиваю пользователя, хотите ли вы увидеть больше, и пользователь отвечает «да», я хочу, чтобы он напечатал следующие 5 и продолжал до тех пор, пока не останется больше песен.
На основе этой проблемы, я бы предложил случайной весь список видео идентификатор в плейлист во-первых, используя что-то вроде random.shuffle
, так его более эффективным, поскольку вы только нужно перетасовать список один раз, а не генерирует случайный индекс в списке и затем переберем и удалением его из списка непрерывно, что также может сделать его более трудным для чтения. Таким образом, это должно быть проще, если цель состоит в том, чтобы перетасовать порядок самого списка воспроизведения.
Например:
import random video_id_to_title = { 5390161: "Who Want Smoke", 7736243: "INDUSTRY BABY", 8267507: "STAY", 1012930: "Style", 1109274: "bad guy", 2981023: "Blank Space", 4922599: "Love Nwantiti Remix", 4559658: "Essence (Official Video)", 9897626: "Pepas", 5610524: "Outside (Better Days)", 6980497: "Lo Siento BB:/", 4547223: "Face Off", 9086699: "Heat Waves", 3720918: "Despacito", 9086691: "Royals", 1461025: "Fancy Like", 7434914: "Way 2 Sexy", 6093037: "Corta Venas", 6438692: "Need to Know", 8117542: "MONEY", 5746821: "Wild Side ", 9566779: "Knife Talk", 1683724: "Life Support", 5718817: "Save Your Tears", 2459304: "Ghost", 6382983: "Love Yourself", 7394792: "7 rings", } video_ids = list(video_id_to_title) # Shuffle the list, so all the elements are randomized random.shuffle(video_ids) # Set chunk size, so we get x videos from the playlist at a time chunk_size = 5 # Split list into sub-lists of at most 5 elements each video_id_chunks = [video_ids[x:x chunk_size] for x in range(0, len(video_ids), chunk_size)] # Print each sub-list with randomized video ids for chunk in video_id_chunks: print(chunk)
Вывод (который каждый раз должен быть в другом порядке):
[1012930, 4547223, 7394792, 7736243, 9086691] [6980497, 2459304, 8117542, 7434914, 9566779] [5390161, 6093037, 6438692, 4559658, 2981023] [8267507, 4922599, 9086699, 5610524, 6382983] [1683724, 1461025, 9897626, 1109274, 5746821] [3720918, 5718817]
Ответ №2:
Вы можете создать итератор, который дает фрагменты по 5, и использовать функцию next (), чтобы получить следующий фрагмент, когда это необходимо:
import random top_hits_playlist = [ 5390161, 7736243, 8267507, 4922599, 4559658, 9897626, 1461025, 5746821, 9566779, 5718817, 2459304, 6382983, 7394792 ] random.shuffle(top_hits_playlist) get5 = ( top_hits_playlist[i:i 5] for i in range(0,len(top_hits_playlist),5) ) songs = next(get5,None) while songs: print(songs) songs = next(get5,None) if not songs: break input('5 more') [9566779, 7394792, 5390161, 5746821, 6382983] 5 more [7736243, 8267507, 5718817, 1461025, 2459304] 5 more [9897626, 4922599, 4559658]