Re: Boolean confusion

2007-05-09 Thread Greg Corradini



On 2007-05-09, Greg Corradini <[EMAIL PROTECTED]> wrote:
>
> Hello all,
> I'm having trouble understanding why the following code evaluates as it
> does:
>
>>>> string.find('020914A','.') and len('020914A') > 10
> True
>>>> len('020914A') > 10 and string.find('020914A','.')
> -1
>
> In the 2.4 Python Reference Manual, I get the following explanation for
> the
> 'and' operator in 5.10 Boolean operations:
> " The expression x and y first evaluates x; if x is false, its value is
> returned; otherwise, y is evaluated and the resulting value is returned."
>
> Based on what is said above, shouldn't my first expression (
> string.find('020914A','.') and len('020914A') > 10) evaluate to
> false b/c my 'x' is false? And shouldn't the second expression evaluate to
> True?

>The find method doesn't return a boolean, but returns the index where
>the substring was found with -1 indicating it wasn't found. If you just
>want to check wether one string is a substring of an other, use the in
>operator.

>>> '.' in '020914A' and len('020914A') > 10
False
>>> len('020914A') > 10 and  '.' in '020914A'
False

Thank you Diez and Antoon for demystifing this problem. I see where I've
been going wrong. 
-- 
View this message in context: 
http://www.nabble.com/Boolean-confusion-tf3715438.html#a10393765
Sent from the Python - python-list mailing list archive at Nabble.com.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Boolean confusion

2007-05-09 Thread Greg Corradini

Thank you Diez and Antoon for demystifing this problem. I see where I've been
going wrong.

Diez B. Roggisch-2 wrote:
> 
> Greg Corradini wrote:
> 
>> 
>> Hello all,
>> I'm having trouble understanding why the following code evaluates as it
>> does:
>> 
>>>>> string.find('020914A','.') and len('020914A') > 10
>> True
>>>>> len('020914A') > 10 and string.find('020914A','.')
>> -1
>> 
>> In the 2.4 Python Reference Manual, I get the following explanation for
>> the 'and' operator in 5.10 Boolean operations:
>> " The expression x and y first evaluates x; if x is false, its value is
>> returned; otherwise, y is evaluated and the resulting value is returned."
>> 
>> Based on what is said above, shouldn't my first expression (
>> string.find('020914A','.') and len('020914A') > 10) evaluate to
>> false b/c my 'x' is false? And shouldn't the second expression evaluate
>> to
>> True?
> 
> The first evaluates to True because len(...) > 10 will return a boolean -
> which is True, and the semantics of the "and"-operator will return that
> value.
> 
> And that precisely is the reason for the -1 in the second expression. 
> 
> y=-1
> 
> and it's just returned by the and.
> 
> in python, and is implemented like this (strict evaluation
> nonwithstanding):
> 
> def and(x, y):
> if bool(x) == True:
>return y
> return x
> 
> Diez
> -- 
> http://mail.python.org/mailman/listinfo/python-list
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Boolean-confusion-tf3715438.html#a10393705
Sent from the Python - python-list mailing list archive at Nabble.com.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Boolean confusion

2007-05-09 Thread Antoon Pardon
On 2007-05-09, Greg Corradini <[EMAIL PROTECTED]> wrote:
>
> Hello all,
> I'm having trouble understanding why the following code evaluates as it
> does:
>
 string.find('020914A','.') and len('020914A') > 10
> True
 len('020914A') > 10 and string.find('020914A','.')
> -1
>
> In the 2.4 Python Reference Manual, I get the following explanation for the
> 'and' operator in 5.10 Boolean operations:
> " The expression x and y first evaluates x; if x is false, its value is
> returned; otherwise, y is evaluated and the resulting value is returned."
>
> Based on what is said above, shouldn't my first expression (
> string.find('020914A','.') and len('020914A') > 10) evaluate to
> false b/c my 'x' is false? And shouldn't the second expression evaluate to
> True?

The find method doesn't return a boolean, but returns the index where
the substring was found with -1 indicating it wasn't found. If you just
want to check wether one string is a substring of an other, use the in
operator.

>>> '.' in '020914A' and len('020914A') > 10
False
>>> len('020914A') > 10 and  '.' in '020914A'
False

-- 
Antoon Pardon
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Boolean confusion

2007-05-09 Thread Diez B. Roggisch
Greg Corradini wrote:

> 
> Hello all,
> I'm having trouble understanding why the following code evaluates as it
> does:
> 
 string.find('020914A','.') and len('020914A') > 10
> True
 len('020914A') > 10 and string.find('020914A','.')
> -1
> 
> In the 2.4 Python Reference Manual, I get the following explanation for
> the 'and' operator in 5.10 Boolean operations:
> " The expression x and y first evaluates x; if x is false, its value is
> returned; otherwise, y is evaluated and the resulting value is returned."
> 
> Based on what is said above, shouldn't my first expression (
> string.find('020914A','.') and len('020914A') > 10) evaluate to
> false b/c my 'x' is false? And shouldn't the second expression evaluate to
> True?

The first evaluates to True because len(...) > 10 will return a boolean -
which is True, and the semantics of the "and"-operator will return that
value.

And that precisely is the reason for the -1 in the second expression. 

y=-1

and it's just returned by the and.

in python, and is implemented like this (strict evaluation nonwithstanding):

def and(x, y):
if bool(x) == True:
   return y
return x

Diez
-- 
http://mail.python.org/mailman/listinfo/python-list


Boolean confusion

2007-05-09 Thread Greg Corradini

Hello all,
I'm having trouble understanding why the following code evaluates as it
does:

>>> string.find('020914A','.') and len('020914A') > 10
True
>>> len('020914A') > 10 and string.find('020914A','.')
-1

In the 2.4 Python Reference Manual, I get the following explanation for the
'and' operator in 5.10 Boolean operations:
" The expression x and y first evaluates x; if x is false, its value is
returned; otherwise, y is evaluated and the resulting value is returned."

Based on what is said above, shouldn't my first expression (
string.find('020914A','.') and len('020914A') > 10) evaluate to
false b/c my 'x' is false? And shouldn't the second expression evaluate to
True?

Thanks for your help
Greg

-- 
View this message in context: 
http://www.nabble.com/Boolean-confusion-tf3715438.html#a10393362
Sent from the Python - python-list mailing list archive at Nabble.com.

-- 
http://mail.python.org/mailman/listinfo/python-list