2015-07-03 6 views
0

Я строю медиа-плеер для офиса, и до сих пор так хорошо, но я хочу, чтобы добавить систему голосования (вроде как Пандоры пальцы вверх/вниз), большие пальцыСлучайным Выбор строк на основе определенных критериев

Чтобы построить плейлист, в настоящее время я использую следующий код, который вытягивает 100 случайных треков, которые не были воспроизведены в последнее время (мы следим за тем, чтобы все треки находились вокруг одного и того же количества пьес), а затем гарантирует, что мы не слышим одного и того же исполнителя в течение 10 и создает плейлист из 50 песен.

max_value = Items.select(fn.Max(Items.count_play)).scalar() 

    query = (Items 
      .select() 
      .where(Items.count_play < max_value, Items.count_skip_vote < 5) 
      .order_by(fn.Rand()).limit(100)) 


    if query.count < 1: 
      max_value = max_value - 1 
      query = (Items 
      .select() 
      .where(Items.count_play < max_value, Items.count_skip_vote < 5) 
      .order_by(fn.Rand()).limit(100)) 


    artistList = [] 
    playList = [] 
    for item in query: 
      if len(playList) is 50: 
        break 

      if item.artist not in artistList: 
        playList.append(item.path) 

      if len(artistList) < 10: 
        artistList.append(item.artist) 
      else: 
        artistList.pop(0) 
        artistList.append(item.artist) 

    for path in playList: 
      client.add(path.replace("/music/Library/","")) 

Я пытаюсь разработать наилучший способ использования голосов вверх/вниз. Я хочу видеть меньше с downvotes и больше с upvotes.

Я не получил прямой код, потому что я довольно хорошо с питоном, это скорее логика, которую я не могу полностью оттолкнуть (что, если вы считаете, что мне нужно улучшить мой код, я выиграл 't остановить вас :))

ответ

0

Первоначально дайте каждой дорожке вес w, например 10 - голосование увеличивает это, уменьшает его (но никогда не 0). Затем при выборе следующего трека: Рассчитайте общее количество всех весов, сгенерируйте случайное число между 0 и этим итогом и пройдите по дорожкам с 0-49, добавив их w, пока не превысите случайное число. играть в этот трек.

Точный алгоритм взвешивания (например, насколько изменяется верхний/нижний предел w), безусловно, повлияет на то, как часто появляются дорожки (re). Разве это не Apple, которому пришлось изменить «случайный» случайный выбор своего раннего iPod, потому что он мог бы случайно воспроизвести одну и ту же дорожку дважды (или достаточно близко друг к другу для того, чтобы пользователь заметил), поэтому они должны были сделать это менее случайным, что я предполагаю означает также изменение взвешивания по тому, как недавно был воспроизведен трек, - в этом случае время, прошедшее после последнего воспроизведения, также будет учитываться во время выбора следующего трека. Удостоверьтесь, что вы закрываете торцевые случаи, когда все спускают 49 (или все 50, если они хотят тишины) треков. Или, может быть, это то, что вы хотите ...