if "16" > "13": print("a")
if "8" > "15": print("b")
This code will print "a b" in the console. Why does the first statement work as intended and the second doesn't?
if "16" > "13": print("a")
if "8" > "15": print("b")
This code will print "a b" in the console. Why does the first statement work as intended and the second doesn't?
In Python, the >
and <
operators are implemented using a class's underlying __cmp__
magic function, the logic of which differs by class.
The logic for numbers is to compare the signed value, e.g. 12.6 >10
is true, and -4 > -33.02
is true, in the normal mathematical sense.
The logic for strings is to compare each character, left to right, based on the ordinal value of each character, e.g. 'apple' > 'banana'
is false because ord('a')
is 97 and ord('b')
is 98, so 97 > 98
is false. Likewise '8 > '15'
is true because ord('8')
is 56, and and ord('1')
is 49, so 56 > 49
is true.
Python doesn't convert strings-of-digits to numbers before comparing.
Because 8
(first digit) is greater than 1
(first digit)... you are comparing strings, not integers.
Do you want to compare numbers? Do the same without the quotes:
if 16 > 13: print("a")
if 8 > 15: print("b")