[EMAIL PROTECTED] wrote: > I am a little bit stuck .... > > I want to play a bunch of soundfiles randomly, but i want to give each > soundfile a rating (say 0-100) and have the likelihood that the file be > chosen be tied to its rating so that the higher the rating the more > likely a file is to be chosen. Then i need some additional flags for > repetition, and some other business. I am guessing a dictionary would > be a great way to do this, with the key being the soundfile name and > the values being my ratings and other flags & associated data. > > #soundfile name : [rating, %chance it will repeat/loop] > sfiles = { ("sf001") : [85, 15], > ("sf002") : [25, 75], > ("sf003") : [95, 45], > ("sf004") : [35, 95] } > > > But i am stuck on how to do a random chooser that works according to my > idea of choosing according to rating system. It seems to me to be a bit > different that just choosing a weighted choice like so: > > def windex(lst): > '''an attempt to make a random.choose() function that makes weighted > choices > > accepts a list of tuples with the item and probability as a pair > like: >>> x = [('one', 0.25), ('two', 0.25), ('three', 0.5)] > >>> y=windex(x)''' > n = random.uniform(0, 1) > for item, weight in lst: > if n < weight: > break > n = n - weight > return item > > > 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! >
A really cheesy scheme: decide you will allocate each file a probability between 0 and 10 or 1 and 10 - whatever. 100 may be a bit much - do you really need such fine discrimination? If you have your list [(filename, prob), (filename, prob), ... ] then construct a filename list as follows: flist = [] for filename, prob in lst: flist += [filename] * prob Then choosing a filename becomes quite simple: file_to_play = random.choice(flist) The rest is up to you ... regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC www.holdenweb.com PyCon TX 2006 www.python.org/pycon/ -- http://mail.python.org/mailman/listinfo/python-list