I need newbie help
Sean Berry
sean_berry at cox.net
Fri May 14 02:19:16 EDT 2004
Sorry for any confusion.
I didn't write this page...
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/269708
I was just trying to point out what they were trying to show.
"Andrew Bennetts" <andrew-pythonlist at puzzling.org> wrote in message
news:mailman.3.1084513865.4157.python-list at python.org...
> On Thu, May 13, 2004 at 10:16:01PM -0700, Sean Berry wrote:
> [...]
> >
> > Since Python doesn't have a switch statement, you can make your own.
> > In Python you could do something like this though:
> >
> > selector={
> > x<0 : 'return None',
> > 0<=x<1 : 'return 1',
> > 1<=x<2 : 'return 2',
> > 2<=x<3 : 'return 3',
> > 3<=x : 'return None'
> > }[a]
> >
> > if a == 1, it would "return 1".
>
> You seem to be a little bit confused, which is likely to make a newbie
> really confused.
>
> What is x in your example? Your dictionary's definition depends on
multiple
> expressions involving it -- you'd only get the result of selector ==
'return
> 1' when a is 1 if 0 <= x < 1.
>
> For instance:
>
> >>> x = 0.5
> >>> {
> ... x<0 : 'return None',
> ... 0<=x<1 : 'return 1',
> ... 1<=x<2 : 'return 2',
> ... 2<=x<3 : 'return 3',
> ... 3<=x : 'return None'
> ... }
> {False: 'return None', True: 'return 1'}
>
> But:
>
> >>> x = 2
> >>> {
> ... x<0 : 'return None',
> ... 0<=x<1 : 'return 1',
> ... 1<=x<2 : 'return 2',
> ... 2<=x<3 : 'return 3',
> ... 3<=x : 'return None'
> ... }
> {False: 'return None', True: 'return 3'}
>
> So looking up 1 in that dictionary would return whatever string was
> associated with the key True (because 1 == True), which is entirely
> dependent on the value of x when the dictionary was defined.
>
> Also, your use of strings containing python statements is misleading --
> retrieving a value from a dictionary doesn't implicitly execute it as a
> string of Python source code too. Less confusing values would have been
> 'less than 0', 'between 0 and 1', and so on, because at least that is less
> likely to confuse a newbie.
>
> Finally, as someone else pointed out, often the best way to do a switch
> statement in Python is not to be clever at all, but instead to just simply
> do:
>
> if x < 0:
> return None
> elif 0 <= x < 1:
> return 1
> elif 1 <= x < 2:
> return 2
> elif 2 <= x < 3:
> return 3
> else:
> return None
>
> Although that's a very contrived example (what's the point of doing that?)
> -- more convincing would be something like:
>
> if colour == 'red':
> r, g, b = 255, 0, 0
> elif colour == 'purple':
> r, g, b = 255, 0, 255
>
> # and so on ...
>
> Which I think turns out to be a much better candidate for the dictionary
> trick anyway:
>
> rgbValues = {
> 'red': (255, 0, 0),
> 'purple': (255, 0, 255),
> # ...
> }
>
> r, g, b = rgbValues[colour]
>
> -Andrew.
>
>
More information about the Python-list
mailing list