On Jun 4, 9:03 am, "BEES INC" <[EMAIL PROTECTED]> wrote: > I've been awfully busy programming lately. My Django-based side > project is coming along well and I hope to have it ready for use in a > few weeks. Please don't ask more about it, that's really all I can say > for now. Anyways, I came across an interesting little math problem > today and was hoping some skilled programmers out there could come up > with a more elegant solution than mine. > Problem: Star Ratings > > People can rate cheeseburgers on my website with a star rating of 0-5 > stars (whole stars only), 5 being mighty tasty and 0 being disgusting. > I would like to show the average of everyone's ratings of a particular > cheeseburger to the nearest half star. I have already calculated the > average rating as a float (star_sum) and the total number of people > that rated the particular cheeseburger (num_raters). The result should > be stored as a float in a variable named "stars." > My Solution (in Python): > > # round to one decimal place and > # separate into whole and fractional parts > parts = str(round(star_sum/num_raters, 1)).split('.') > whole = int(parts[0]) > frac = int(parts[1]) > if frac < 3: > ___frac = 0 > elif frac > 7: > ___frac = 0 > ___whole += 1 > else: > ___frac = 5 > # recombine for a star rating rounded to the half > stars = float(str(whole)+'.'+str(frac)) > > Mmmm… In-N-Out Burgers… Please reply if you've got a better solution.
It'd be easier just to do the whole thing with ints. Represents your stars by counting half-stars (i.e. 0 = no stars, 1 = half a star, 2 = 1 star, etc). Then you just need to divide by 2 at the end. stars = round(star_sum/num_raters, 0) / 2.0 Iain -- http://mail.python.org/mailman/listinfo/python-list