[Tutor] soundfile picker & rating system
John Fouhy
john at fouhy.net
Thu Feb 9 00:44:39 CET 2006
On 09/02/06, kevin parks <kp8 at mac.com> wrote:
> And i am not sure i want to have to go through what will be hundreds of
> sound files and scale their ratings by hand so that they all add up to
> 100%. I just want to have a long list that i can add too whenever i
> want, and assign it a grade/rating according to my whims!
Maybe something like this:
songs = [('sf001', 43), ('sf002', 81), ('sf003', 79), ...]
def pick():
total = sum(x[1] for x in songs)
choice = random.randrange(total)
# Find the song we want.
current = 0
for song, rating in songs:
if choice < current + rating:
return song
current += rating
(the basic idea of this algorithm is to replace a list [(a, 5), (b,
3), (c, 6)] by [a,a,a,a,a,b,b,b,c,c,c,c,c,c] and then pick at random
from that)
There's a lot of scope for making this more efficient --- for example,
if the list doesn't change much, you might precompute the cutoffs (eg:
make a list [('sf001', 0, 43), ('sf002', 44, 125), ...]) and then do
some kind of binary search to find the song you want.
Also, this will mean that a song ranked 50 will be fifty times more
likely to be chosen than a song ranked 1, while a song ranked 80 will
be only 1.6 times more likely to be chosen than a song ranked 50.
Maybe some kind of logarithmic transform might smooth things out a
bit..?
--
John.
More information about the Tutor
mailing list