views:

156

answers:

4

My question is, why are these expressions False?

Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> num = raw_input("Choose a number: ")
Choose a number: 5
>>> print num
5
>>> print ( num < 18 )
False
>>> print ( num == 5 )
False

Because if i try this:

>>> print ( num > 0 )
True

The expression works fine.

Thank you for the help!

+1  A: 

Try num = float(raw_input("Choose..."))

You're evaluating a string in your boolean expressions.

Stephen
+9  A: 

This statement:

num = raw_input("Choose a number: ")

makes num a string, not a number, despite its misleading name. It so happens that Python 2 lets you compare strings with numbers, and in your version considers all strings larger than all numbers (the contents of the string play no role).

Use num = int(num) to make an integer (and be sure to use a try/except to catch possible errors when the user has typed something other than a number!) before you start comparing.

(In Python 3, the function's name changes from raw_input to input, and it still returns strings; however in Python 3 comparing a string with a number is considered an error, so you would get an exception rather than True or False in each of your comparison attempts).

Alex Martelli
+3  A: 

The variable num does not actually contain the number 5; it contains the string "5". Because Python is strongly typed, 5 == "5" is False. Try converting it to an integer first:

>>> print (int(num) < 18)
True
Thomas
+2  A: 

num is a string. You can't meaningfully compare a string to an integer and a string is never equal to an integer (so == returns false and < and > return whatever they want). The reason that < and > don't throw an error (before python 3) when you compare strings and integers is to be able to sort heterogeneous lists.

sepp2k