Complex compound expressions

Erik Max Francis max at
Fri Aug 16 18:39:39 EDT 2002

Derek Basch wrote:

> Just a quick question. I am still a little shaky on
> using parentheses to form complex compound
> expressions. For example:
> if character in string.letters or string.digits:
>             print 'im a character'
> this prints 'im a character' for every character
> including digits and whitespaces.

That's because or is merely a logical operator.  Your expression

	c in a or b

is really equivalent to

	(c in a) or b

which will always evaluate to true, regardless of c and a, if b is a
non-empty string.

> I can get the
> desired result by using this expression:
> if character in string.letters or character in
> string.digits:
>            print 'im a character'

This is the proper approach.

> However, I know that there must be a way to use a
> parentheses on the top statement and get the same
> result. Can anyone help me out here?

Why do you think there is a way to use the shorthand you want?  It is
actually not all that common in programming languages (though some do
have it).  There _is_ a particular shorthand you can use here, since
string.letters and string.digits are both strings:  You can concatenate
them with the + operator and then test against that:

	if character in (string.letters + string.digits):

Remember, though:  Brevity is not in and of itself a good thing. 
Clarity should almost always win out over brevity.

 Erik Max Francis / max at /
 __ San Jose, CA, US / 37 20 N 121 53 W / ICQ16063900 / &tSftDotIotE
/  \ There is nothing so subject to the inconstancy of fortune as war.
\__/ Miguel de Cervantes
    Church /
 A lambda calculus explorer in Python.

More information about the Python-list mailing list