473,230 Members | 1,644 Online

# True of False

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

Sep 27 '07 #1
16 4433
On Sep 27, 11:33 am, kou...@hotmail.com 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"

Sep 27 '07 #2
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)
---------------------------------------------------------------------------
<type 'exceptions.TypeError' Traceback (most recent call last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: argument of type 'bool' is not iterable
What's going on there?

Ciao,
Marc 'BlackJack' Rintsch
Sep 27 '07 #3

kou...@hotmail.com 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

Sep 27 '07 #4
On 9/27/07, ko****@hotmail.com <ko****@hotmail.comwrote:
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 <http://docs.python.org/lib/truth.html>.

--
Cheers,
Simon B.
si***@brunningonline.net
Sep 27 '07 #5
On Sep 27, 12:48 pm, "Simon Brunning" <si...@brunningonline.net>
wrote:
On 9/27/07, kou...@hotmail.com <kou...@hotmail.comwrote:
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 <http://docs.python.org/lib/truth.html>.
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
Sep 27 '07 #6
Marc 'BlackJack' Rintsch <bj****@gmx.netwrote:
In [268]: 'c' in a == True
Out[268]: False

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

In [270]: 'c' in (a == True)
-----------------------------------------------------------------------
----
<type 'exceptions.TypeError' Traceback (most recent call
last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: 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.
Sep 27 '07 #7
ko****@hotmail.com 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

Sep 27 '07 #8
On 27/09/2007, Casey <Ca******@gmail.comwrote:
On Sep 27, 12:48 pm, "Simon Brunning" <si...@brunningonline.net>
wrote:
On 9/27/07, kou...@hotmail.com <kou...@hotmail.comwrote:
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 <http://docs.python.org/lib/truth.html>.

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
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
Sep 27 '07 #9
On Thu, 2007-09-27 at 16:47 +0000, 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)
---------------------------------------------------------------------------
<type 'exceptions.TypeError' Traceback (most recent call last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: 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
Sep 27 '07 #10
On Sep 27, 1:12 pm, "Richard Thomas" <R.W.Thomas...@cantab.netwrote:
On 27/09/2007, Casey <Casey...@gmail.comwrote:
On Sep 27, 12:48 pm, "Simon Brunning" <si...@brunningonline.net>
wrote:
On 9/27/07, kou...@hotmail.com <kou...@hotmail.comwrote:
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 <http://docs.python.org/lib/truth.html>.
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

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!

Sep 27 '07 #11

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)
----------------------------------------------------------------------
-----
<type 'exceptions.TypeError' Traceback (most recent
call last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: 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®
er**@myemma.com
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
Sep 27 '07 #12
Richard Thomas wrote:
On 27/09/2007, Casey <Ca******@gmail.comwrote:
>On Sep 27, 12:48 pm, "Simon Brunning" <si...@brunningonline.net>
wrote:
>>On 9/27/07, kou...@hotmail.com <kou...@hotmail.comwrote:
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 <http://docs.python.org/lib/truth.html>.
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

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<b<c
as
a<b and b<c
make perfect sense to me, but interpreting
"c" in a == True
as
("c" in a) and (a == True)
is not at all natural.

Gary Herron
-- Richard.

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

Sep 27 '07 #13

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)
---------------------------------------------------------------------
-
-----
<type 'exceptions.TypeError' Traceback (most recent
call last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: 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®
er**@myemma.com
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
Sep 27 '07 #14
On Thu, 27 Sep 2007 17:06:30 +0000, Duncan Booth wrote:
Marc 'BlackJack' Rintsch <bj****@gmx.netwrote:
>In [268]: 'c' in a == True
Out[268]: False

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

In [270]: 'c' in (a == True)
-----------------------------------------------------------------------
----
<type 'exceptions.TypeError' Traceback (most recent call
last)

/home/bj/<ipython consolein <module>()

<type 'exceptions.TypeError'>: 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
Sep 27 '07 #15
Casey <Ca******@gmail.comwrote:
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 "<stdin>", line 1, in <module>
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
Sep 27 '07 #16
ko****@hotmail.com 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.
Sep 27 '07 #17

This thread has been closed and replies have been disabled. Please start a new discussion.