22

我有这个简单的 python 程序。我运行它并打印yes,而实际上我希望它不打印任何东西,因为14它不大于14.

我看到了这个相关的问题,但它不是很有帮助。

#! /usr/bin/python

import sys

hours = "14"

if (hours > 14):
        print "yes"

我究竟做错了什么?

4

2 回答 2

46

使用 将字符串转换为整数int

hours = int("14")

if (hours > 14):
        print "yes"

在CPython2中,比较两个不同类型的非数值对象时,通过比较类型的名称来进行比较。因为'int' < 'string'任何 int 都小于任何 string

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

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

这是一个经典的 Python 陷阱。在 Python3 中,这个缺陷已得到纠正——比较不同类型的非数字对象默认会引发 TypeError。

文档中所述

CPython 实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

于 2013-07-15T19:00:56.503 回答
2

我认为最好的方法是转换hours为整数,使用int(hours).

hours = "14"

if int(hours) > 14:
    print("yes")```
于 2020-01-19T04:14:58.997 回答