On Fri, 10 Feb 2006 09:59:43 +0000, rumours say that Ed Singleton <[EMAIL PROTECTED]> might have written:
>If speed is no issue (for example you can queue an mp3 while the >current one is playing), then Ben's solution is the classic one. >Store the total of all your scores (or calculate it on the fly if you >don't have too many files), pick a random number up to that total, and >then iterate through all your scores, subtracting each score from the >total, until the total reaches zero, and then play that file. > >However that approach gets slower and slower the more files you have >(slower to calculate the total and slower to iterate through the >files). Hm... just playing: import random, itertools scored=[('bad',1), ('not that bad',2),('ok',3),('better',4),('best',5)] def player(lst): def forever(lst): while 1: for item in lst: yield item total_score= sum(x[1] for x in lst) scanner= forever(lst) while 1: next_score= random.randrange(total_score) for item in scanner: if next_score <= item[1]: yield item[0] next_score+= random.randrange(total_score) else: next_score-= item[1] print list(itertools.islice(player(scored), 0, 20)) ['better', 'ok', 'best', 'not that bad', 'best', 'best', 'best', 'not that bad', 'ok', 'best', 'best', 'bad', 'better', 'better', 'better', 'ok', 'ok', 'not that bad', 'best', 'best'] -- TZOTZIOY, I speak England very best. "Dear Paul, please stop spamming us." The Corinthians -- http://mail.python.org/mailman/listinfo/python-list