2013-07-15 47 views
2

我有這個簡單的python程序。我跑它,它打印yes,實際上,我希望它不打印任何東西,因爲14不大於14如何比較python中的字符串和整數?

我看到這個related的問題,但它不是很有幫助。

#! /usr/bin/python 

import sys 

hours = "14" 

if (hours > 14): 
     print "yes" 

我在做什麼錯了?

回答

18

轉換字符串爲一個整數與int

hours = int("14") 

if (hours > 14): 
     print "yes" 

在CPython2,比較不同類型的兩個非數值對象時,該比較是通過比較名稱的類型進行。由於'int' < 'string',任何int都小於任何字符串

In [79]: "14" > 14 
Out[79]: True 

In [80]: 14 > 14 
Out[80]: False 

這是一個經典的Python陷阱。在Python3中,這個疣已經得到糾正 - 比較不同類型的非數值對象默認會引發TypeError。

由於explained in the docs

CPython的實現細節:除了 數量不同類型的對象是由它們的類型名稱排序;不支持正確比較的相同類型的對象 按其地址排序。