Cod*_*lue 10 python comparison
我有这个简单的python程序.我跑了它打印yes,实际上我希望它不打印任何东西因为14不大于14.
我看到了这个相关的问题,但它没有多大帮助.
#! /usr/bin/python
import sys
hours = "14"
if (hours > 14):
print "yes"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
unu*_*tbu 28
将字符串转换为整数int:
hours = int("14")
if (hours > 14):
print "yes"
Run Code Online (Sandbox Code Playgroud)
在CPython2中,当比较两个不同类型的非数字对象时,通过比较类型的名称来执行比较.因为'int' < 'string',任何int都小于任何字符串.
In [79]: "14" > 14
Out[79]: True
In [80]: 14 > 14
Out[80]: False
Run Code Online (Sandbox Code Playgroud)
这是一个经典的Python陷阱.在Python3中,这个疣已被纠正 - 比较不同类型的非数字对象默认引发TypeError.
CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.