[Tutor] Find out if a number is even or not

Bill Mill bill.mill at gmail.com
Sat Oct 16 15:06:55 CEST 2004


So, shouldn't that piece of code be:

return x%2 and 'Odd' or 'Even'

to make it semantically correct? As it is, it returns 'Odd' for even
numbers, and vice versa.

Peace
Bill Mill

On Sat, 16 Oct 2004 08:47:12 +0100, Alan Gauld <alan.gauld at freenet.co.uk> wrote:
> 
> > I don't quite understand the syntax of
> >
> > return x % 2 and 'Even' or 'Odd'...
> 
> This is fully exlained in my tutorial on the Functional Programming
> topic, but the short answer is:
> 
> x % 2 and 'Even' or 'Odd'...
> 
> Can be written:
> 
> ((x%2) and 'Even') or 'Odd')
> 
> This is a boolean expression.
> 
> Python works out the first term, x%2 and of it is true looks at
> the second term in the AND expression, 'Even'. Since 'Even' is true
> (only empty strings are considered false) the whole AND expression
> is True and because it is True Python doesn't need to evaluate the
> second part of the OR expression so it returns the True part of the
> AND expression.
> 
> And here is the trick. Python doesn't return an actual boolean value
> (True or False), instead it returns the actual value it last tested,
> in this case the string 'Even'.
> 
> If x%2 is 0 and thus False in boolean terms the whole AND expression
> must be false. So Python now evaluates the second part of the OR
> expression, 'Odd'. Again this string is True boolean-wise, so Python
> returns the last True value, namely the string 'Odd'.
> 
> So the actual return value from the overall expression is 'Even'
> if x%2 is true and 'Odd' if x%2 is False.
> 
> This is not intuitively obvious but the tutorial page gives several
> more examples to illustrate how it works. In this case I thing the
> functional form works quite well because it kind of makes sense
> (to me anyway!) to say the function returns 'Even' or 'Odd'
> 
> > I'm having trouble understanding conditionals, like... if x:   So if
> x
> > is... what exactly? Is it checking for a non-null or non-zero value?
> > Or if not x:....
> 
> if x:
> 
> is siply shorthand for saying
> 
> if x == True:
> 
> And the logical equivalent to True depends on the data type.
> Normally it is whatever comes closest in meaning to not
> being 'empty'. Thus for numbers it means not being zero,
> for sequences it really is not being empty, for files it
> means the file is open and readable - ie we aren't at the end.
> 
> There is a page in the Python documentation that decribes
> for each type the boolean equivalents. I think its in the
> reference manual.
> 
> HTH,
> 
> 
> 
> Alan G.
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list