Re: True of False

2007-09-27 Thread Bruno Desthuilliers
[EMAIL PROTECTED] a écrit :
> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
> 
> a = ["a", "b", "c", "d", "e", "f"]
> 
> if "c" in a == True:
>  Print "Yes"
> 
> When I run this, it runs, but nothing prints.  What am I doing wrong?

See other answers for the details. Anyway, since '"c" in a' is already a 
boolean expression, testing the result of the evaluation of this 
expression against a boolean is a pure waste of time. The usual idiom - 
and this is definitively not Python-specific - is:

if "c" in a:
   print "Yes"

Also, in Python (and in some other languages too), there's a notion of 
"something" vs "nothing" - where, in a boolean context, "something" 
evals to true and "nothing" to false. wrt/ Python, the empty string, an 
empty container (list, tuple, dict, set etc), numerical zero's (int or 
float), and of course the None object all eval to false, and most other 
objects eval to true.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: True of False

2007-09-27 Thread Marc Christiansen
Casey <[EMAIL PROTECTED]> wrote:
> I would recommend the OP try this:
> 
> run the (I)python shell and try the following:
> 
 a = [x for x in "abcdefg"]
 a
> ['a','b','c','d','e','f','g']
 "c" in a
> True
 "c" in a == True
> False
 ("c" in a) == True
> True
> 
> The reason your conditional failed is that it was interpreted as "c"
> in (a == True) which is False.

That was my first thought, too. But watch:
  >>> a = list("abcde")
  >>> a
  ['a', 'b', 'c', 'd', 'e']
  >>> "c" in (a == True)
  Traceback (most recent call last):
File "", line 1, in 
  TypeError: argument of type 'bool' is not iterable

Then it dawned on me (is this the right phrase?): It's the same situation
as e.g. x < y >= 1, which means the same as "x < y and y >= 1" (except
that y is only evaluated once). So '"c" in a == True' gets evaluated as
'"c" in a and a == True'.

> the "==" operator binds at a higher precedence level than the "in"
> operator, just as multiplication binds higher than addition

Operator precedence plays no role in this case. It is a case of
'chained' comparisons.

Hope that clears it up
Marc
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: True of False

2007-09-27 Thread Marc 'BlackJack' Rintsch
On Thu, 27 Sep 2007 17:06:30 +, Duncan Booth wrote:

> Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote:
> 
>> In [268]: 'c' in a == True
>> Out[268]: False
>> 
>> In [269]: ('c' in a) == True
>> Out[269]: True
>> 
>> In [270]: 'c' in (a == True)
>> ---
>>  
>> Traceback (most recent call
>>last) 
>> 
>> /home/bj/ in ()
>> 
>>: argument of type 'bool' is not iterable
>> 
>> 
>> What's going on there?
> 
> See http://docs.python.org/ref/comparisons.html
> 
>> Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent
>> to x < y and y <= z, except that y is evaluated only once (but in both
>> cases z is not evaluated at all when x < y is found to be false). 
> 
> In exactly the same way:
> 
>'c' in a == True
> 
> is equivalent to:
> 
>'c' in a and a == True
> 
> which is False.

Aaah *enlightenment*, I'm using this for range checks like in the docs,
but it wasn't obvious to me in this case.  Thanks.

Ciao,
Marc 'BlackJack' Rintsch
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: True of False

2007-09-27 Thread Erik Jones

On Sep 27, 2007, at 12:29 PM, Erik Jones wrote:

>
> On Sep 27, 2007, at 11:47 AM, Marc 'BlackJack' Rintsch wrote:
>
>> On Thu, 27 Sep 2007 09:33:34 -0700, koutoo wrote:
>>
>>> I tried writing a true and false If statement and didn't get
>>> anything?  I read some previous posts, but I must be missing
>>> something.  I just tried something easy:
>>>
>>> a = ["a", "b", "c", "d", "e", "f"]
>>>
>>> if "c" in a == True:
>>>  Print "Yes"
>>>
>>> When I run this, it runs, but nothing prints.  What am I doing  
>>> wrong?
>>
>> Wow that's odd:
>>
>> In [265]: a = list('abcdef')
>>
>> In [266]: a
>> Out[266]: ['a', 'b', 'c', 'd', 'e', 'f']
>>
>> In [267]: 'c' in a
>> Out[267]: True
>>
>> In [268]: 'c' in a == True
>> Out[268]: False
>>
>> In [269]: ('c' in a) == True
>> Out[269]: True
>>
>> In [270]: 'c' in (a == True)
>> - 
>> -
>> -
>>  Traceback (most recent
>> call last)
>>
>> /home/bj/ in ()
>>
>> : argument of type 'bool' is not  
>> iterable
>>
>>
>> What's going on there?
>
> That is weird.  Given 270, what's happening in 268.
>
> Erik Jones

Cool, Richard Thomas answered this one for me.

Erik Jones

Software Developer | Emma®
[EMAIL PROTECTED]
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com


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


Re: True of False

2007-09-27 Thread Gary Herron
Richard Thomas wrote:
> On 27/09/2007, Casey <[EMAIL PROTECTED]> wrote:
>   
>> On Sep 27, 12:48 pm, "Simon Brunning" <[EMAIL PROTECTED]>
>> wrote:
>> 
>>> On 9/27/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>>>
>>>   
 I tried writing a true and false If statement and didn't get
 anything?  I read some previous posts, but I must be missing
 something.  I just tried something easy:
 
 a = ["a", "b", "c", "d", "e", "f"]
 
 if "c" in a == True:
  Print "Yes"
 
 When I run this, it runs, but nothing prints.  What am I doing wrong?
 
>>> Just use
>>>
>>> if "c" in a:
>>>
>>> and all will be well. The True object isn't the only truthy value in
>>> Python - see .
>>>   
>> I would recommend the OP try this:
>>
>> run the (I)python shell and try the following:
>>
>> 
> a = [x for x in "abcdefg"]
> a
>   
>> ['a','b','c','d','e','f','g']
>> 
> "c" in a
>   
>> True
>> 
> "c" in a == True
>   
>> False
>> 
> ("c" in a) == True
>   
>> True
>>
>> The reason your conditional failed is that it was interpreted as "c"
>> in (a == True) which is False.
>> the "==" operator binds at a higher precedence level than the "in"
>> operator, just as multiplication
>> binds higher than addition
>>
>> 
>
> Actually it evaluates '("c" in a) and (a == True)'. You can check like so:
>
> import dis
> a = list("abcdef")
> dis.dis(lambda: "c" in a == True)
>
> And just follow the bytecode operations.
>   
Yikes.  So I did that and you're correct.   I've always looked at
chained comparisons with mild suspicion.  Now I guess that suspicion is
justified.  Interpreting
a -- Richard.
>
>   
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
>> 

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


Re: True of False

2007-09-27 Thread Erik Jones

On Sep 27, 2007, at 11:47 AM, Marc 'BlackJack' Rintsch wrote:

> On Thu, 27 Sep 2007 09:33:34 -0700, koutoo wrote:
>
>> I tried writing a true and false If statement and didn't get
>> anything?  I read some previous posts, but I must be missing
>> something.  I just tried something easy:
>>
>> a = ["a", "b", "c", "d", "e", "f"]
>>
>> if "c" in a == True:
>>  Print "Yes"
>>
>> When I run this, it runs, but nothing prints.  What am I doing wrong?
>
> Wow that's odd:
>
> In [265]: a = list('abcdef')
>
> In [266]: a
> Out[266]: ['a', 'b', 'c', 'd', 'e', 'f']
>
> In [267]: 'c' in a
> Out[267]: True
>
> In [268]: 'c' in a == True
> Out[268]: False
>
> In [269]: ('c' in a) == True
> Out[269]: True
>
> In [270]: 'c' in (a == True)
> -- 
> -
>  Traceback (most recent  
> call last)
>
> /home/bj/ in ()
>
> : argument of type 'bool' is not iterable
>
>
> What's going on there?

That is weird.  Given 270, what's happening in 268.

Erik Jones

Software Developer | Emma®
[EMAIL PROTECTED]
800.595.4401 or 615.292.5888
615.292.0777 (fax)

Emma helps organizations everywhere communicate & market in style.
Visit us online at http://www.myemma.com


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


Re: True of False

2007-09-27 Thread Casey
On Sep 27, 1:12 pm, "Richard Thomas" <[EMAIL PROTECTED]> wrote:
> On 27/09/2007, Casey <[EMAIL PROTECTED]> wrote:
>
>
>
> > On Sep 27, 12:48 pm, "Simon Brunning" <[EMAIL PROTECTED]>
> > wrote:
> > > On 9/27/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> > > > I tried writing a true and false If statement and didn't get
> > > > anything?  I read some previous posts, but I must be missing
> > > > something.  I just tried something easy:
>
> > > > a = ["a", "b", "c", "d", "e", "f"]
>
> > > > if "c" in a == True:
> > > >  Print "Yes"
>
> > > > When I run this, it runs, but nothing prints.  What am I doing wrong?
>
> > > Just use
>
> > > if "c" in a:
>
> > > and all will be well. The True object isn't the only truthy value in
> > > Python - see .
>
> > I would recommend the OP try this:
>
> > run the (I)python shell and try the following:
>
> > >>> a = [x for x in "abcdefg"]
> > >>> a
> > ['a','b','c','d','e','f','g']
> > >>> "c" in a
> > True
> > >>> "c" in a == True
> > False
> > >>> ("c" in a) == True
> > True
>
> > The reason your conditional failed is that it was interpreted as "c"
> > in (a == True) which is False.
> > the "==" operator binds at a higher precedence level than the "in"
> > operator, just as multiplication
> > binds higher than addition
>
> Actually it evaluates '("c" in a) and (a == True)'. You can check like so:
>
> import dis
> a = list("abcdef")
> dis.dis(lambda: "c" in a == True)
>
> And just follow the bytecode operations.
>
> -- Richard.
>
> > --
> >http://mail.python.org/mailman/listinfo/python-list

Doh, I forgot about operator chaining here.  I'm so used to just
seeing a < b < c that I forget about arbitrary operator chaining and
think like a C++ programmer!

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


Re: True of False

2007-09-27 Thread Carsten Haese
On Thu, 2007-09-27 at 16:47 +, Marc 'BlackJack' Rintsch wrote:
> On Thu, 27 Sep 2007 09:33:34 -0700, koutoo wrote:
> 
> > I tried writing a true and false If statement and didn't get
> > anything?  I read some previous posts, but I must be missing
> > something.  I just tried something easy:
> > 
> > a = ["a", "b", "c", "d", "e", "f"]
> > 
> > if "c" in a == True:
> >  Print "Yes"
> > 
> > When I run this, it runs, but nothing prints.  What am I doing wrong?
> 
> Wow that's odd:
> 
> In [265]: a = list('abcdef')
> 
> In [266]: a
> Out[266]: ['a', 'b', 'c', 'd', 'e', 'f']
> 
> In [267]: 'c' in a
> Out[267]: True
> 
> In [268]: 'c' in a == True
> Out[268]: False
> 
> In [269]: ('c' in a) == True
> Out[269]: True
> 
> In [270]: 'c' in (a == True)
> ---
>  Traceback (most recent call last)
> 
> /home/bj/ in ()
> 
> : argument of type 'bool' is not iterable
> 
> 
> What's going on there?

What's going on here is that both 'in' and '==' are comparison
operations, and Python allows you to chain comparisons. Just like "a < x
< b" is evaluated as "a < x and x < b", "'c' in a == True" is evaluated
as "'c' in a and a == True". Obviously, since a==True is false, the
chained comparison is False.

-- 
Carsten Haese
http://informixdb.sourceforge.net


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


Re: True of False

2007-09-27 Thread Richard Thomas
On 27/09/2007, Casey <[EMAIL PROTECTED]> wrote:
> On Sep 27, 12:48 pm, "Simon Brunning" <[EMAIL PROTECTED]>
> wrote:
> > On 9/27/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> >
> > > I tried writing a true and false If statement and didn't get
> > > anything?  I read some previous posts, but I must be missing
> > > something.  I just tried something easy:
> >
> > > a = ["a", "b", "c", "d", "e", "f"]
> >
> > > if "c" in a == True:
> > >  Print "Yes"
> >
> > > When I run this, it runs, but nothing prints.  What am I doing wrong?
> >
> > Just use
> >
> > if "c" in a:
> >
> > and all will be well. The True object isn't the only truthy value in
> > Python - see .
>
> I would recommend the OP try this:
>
> run the (I)python shell and try the following:
>
> >>> a = [x for x in "abcdefg"]
> >>> a
> ['a','b','c','d','e','f','g']
> >>> "c" in a
> True
> >>> "c" in a == True
> False
> >>> ("c" in a) == True
> True
>
> The reason your conditional failed is that it was interpreted as "c"
> in (a == True) which is False.
> the "==" operator binds at a higher precedence level than the "in"
> operator, just as multiplication
> binds higher than addition
>

Actually it evaluates '("c" in a) and (a == True)'. You can check like so:

import dis
a = list("abcdef")
dis.dis(lambda: "c" in a == True)

And just follow the bytecode operations.

-- Richard.

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


Re: True of False

2007-09-27 Thread Steve Holden
[EMAIL PROTECTED] wrote:
> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
> 
> a = ["a", "b", "c", "d", "e", "f"]
> 
> if "c" in a == True:
>  Print "Yes"
> 
> When I run this, it runs, but nothing prints.  What am I doing wrong?
> Thanks.

You are unnecessarily adding a comparison with True. The correct way to 
write that is

if "c" in a:
   print "yes"

Bu of course you haven't actually told us what you really did, because 
the code you represent has syntax errors.

 >>> a = ["a", "b", "c", "d", "e", "f"]
 >>> "c" in a
True
 >>> if "c" in a == True:
...print "found it"
...
 >>> if ("c" in a) == True:
... print "At last!"
...
At last!
 >>>
-- 
Steve Holden+1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd   http://www.holdenweb.com
Skype: holdenweb  http://del.icio.us/steve.holden

Sorry, the dog ate my .sigline

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


Re: True of False

2007-09-27 Thread Duncan Booth
Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote:

> In [268]: 'c' in a == True
> Out[268]: False
> 
> In [269]: ('c' in a) == True
> Out[269]: True
> 
> In [270]: 'c' in (a == True)
> ---
>  
> Traceback (most recent call
>last) 
> 
> /home/bj/ in ()
> 
>: argument of type 'bool' is not iterable
> 
> 
> What's going on there?

See http://docs.python.org/ref/comparisons.html

> Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent
> to x < y and y <= z, except that y is evaluated only once (but in both
> cases z is not evaluated at all when x < y is found to be false). 

In exactly the same way:

   'c' in a == True

is equivalent to:

   'c' in a and a == True

which is False.


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


Re: True of False

2007-09-27 Thread Casey
On Sep 27, 12:48 pm, "Simon Brunning" <[EMAIL PROTECTED]>
wrote:
> On 9/27/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> > I tried writing a true and false If statement and didn't get
> > anything?  I read some previous posts, but I must be missing
> > something.  I just tried something easy:
>
> > a = ["a", "b", "c", "d", "e", "f"]
>
> > if "c" in a == True:
> >  Print "Yes"
>
> > When I run this, it runs, but nothing prints.  What am I doing wrong?
>
> Just use
>
> if "c" in a:
>
> and all will be well. The True object isn't the only truthy value in
> Python - see .

I would recommend the OP try this:

run the (I)python shell and try the following:

>>> a = [x for x in "abcdefg"]
>>> a
['a','b','c','d','e','f','g']
>>> "c" in a
True
>>> "c" in a == True
False
>>> ("c" in a) == True
True

The reason your conditional failed is that it was interpreted as "c"
in (a == True) which is False.
the "==" operator binds at a higher precedence level than the "in"
operator, just as multiplication
binds higher than addition


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


Re: True of False

2007-09-27 Thread Shriphani

[EMAIL PROTECTED] wrote:
> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
>
> a = ["a", "b", "c", "d", "e", "f"]
>
> if "c" in a == True:
>  Print "Yes"
>
> When I run this, it runs, but nothing prints.  What am I doing wrong?
> Thanks.
>
> Kou

Hello,
Just try :

a = ["a","b","c","d","e","f"]
if "c" in a:
print "yes"

That is going to work as the statement '"c" in a' itself is true. You
could try that by typing "c" in a at the interpreter.

regards,
Shriphani Palakodety

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


Re: True of False

2007-09-27 Thread Marc 'BlackJack' Rintsch
On Thu, 27 Sep 2007 09:33:34 -0700, koutoo wrote:

> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
> 
> a = ["a", "b", "c", "d", "e", "f"]
> 
> if "c" in a == True:
>  Print "Yes"
> 
> When I run this, it runs, but nothing prints.  What am I doing wrong?

Wow that's odd:

In [265]: a = list('abcdef')

In [266]: a
Out[266]: ['a', 'b', 'c', 'd', 'e', 'f']

In [267]: 'c' in a
Out[267]: True

In [268]: 'c' in a == True
Out[268]: False

In [269]: ('c' in a) == True
Out[269]: True

In [270]: 'c' in (a == True)
---
 Traceback (most recent call last)

/home/bj/ in ()

: argument of type 'bool' is not iterable


What's going on there?

Ciao,
Marc 'BlackJack' Rintsch
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: True of False

2007-09-27 Thread skulka3
On Sep 27, 11:33 am, [EMAIL PROTECTED] wrote:
> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
>
> a = ["a", "b", "c", "d", "e", "f"]
>
> if "c" in a == True:
>  Print "Yes"
>
> When I run this, it runs, but nothing prints.  What am I doing wrong?
> Thanks.
>
> Kou

,
You may want to include paren around ("c" in a) and a lower case p for
Print, i.e. print, and  it should work

so eg:
a = ["a", "b", "c", "d", "e", "f"]

 if ("c" in a) == True:
  print "Yes"

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


Re: True of False

2007-09-27 Thread Simon Brunning
On 9/27/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> I tried writing a true and false If statement and didn't get
> anything?  I read some previous posts, but I must be missing
> something.  I just tried something easy:
>
> a = ["a", "b", "c", "d", "e", "f"]
>
> if "c" in a == True:
>  Print "Yes"
>
> When I run this, it runs, but nothing prints.  What am I doing wrong?

Just use

if "c" in a:

and all will be well. The True object isn't the only truthy value in
Python - see .

-- 
Cheers,
Simon B.
[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list


True of False

2007-09-27 Thread koutoo
I tried writing a true and false If statement and didn't get
anything?  I read some previous posts, but I must be missing
something.  I just tried something easy:

a = ["a", "b", "c", "d", "e", "f"]

if "c" in a == True:
 Print "Yes"

When I run this, it runs, but nothing prints.  What am I doing wrong?
Thanks.

Kou

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