Neil Webster wrote: > Hi all, > > I'm sure I'm doing something wrong but after lots of searching and > reading I can't work it out and was wondering if anybody can help? > > I've got the following block of code: > if a >= 20 and a < 100: > if c == "c": > radius = 500 > else: > radius = 250 > elif (a >= 100) and (a < 500): > radius = 500 > elif (a >= 500) and (a < 1000): > radius = 1000 > elif (a >= 1000) and (a < 3000): > radius = 1500 > elif (a >= 3000) and (a < 5000): > radius = 2000 > else: > radius = 4000 > > No matter what value goes in for 'a' the radius always comes out as > 4000. > > What am I doing wrong? > > Cheers > > Neil You might try something like:
BOUNDS = [(500, 500), (1000, 1000), (3000, 1500), (5000, 2000), (0, 4000)] if a < 20: raise ValueError('Too tiny: %r' % a) if a < 100: if c == "c": radius = 500 else: radius = 250 else: for limit, radius in bounds: if a < limit: break on the theory that it makes it easier to see what you are driving the number towards. I'd even add an upper bound check myself, so I could see other garbage coming in. -Scott -- http://mail.python.org/mailman/listinfo/python-list