使用isdigit for python 3的字符串中的最大数字

时间:2014-09-14 04:16:58

标签: python-2.7 python-3.x syntax syntax-error

我试图找到包含字母和数字字符的文本字符串中的最大数字。

源代码适用于Python v2,但不适用于Python v3。当我在Python 3中运行模块时,它返回错误" TypeError:unorderable类型:str()> INT()

largestdigit = 0
n = 5000

with open('pg76.txt') as file:
    sentence = file.read()

#FIND LARGEST DIGIT FOR SPECIFIED N SIZE

for i in range(0,n):
    if sentence[i].isdigit():
        if sentence[i] > largestdigit:
            largestdigit = sentence[i]

#OUTPUT

print ("loaded \"pg76.txt\" of length", len(sentence))
print ("n =", n)
if largestdigit == 0:
    print ("largest digit = None")
else:
    print ("Largest digit =", largestdigit )

2 个答案:

答案 0 :(得分:0)

声明

if sentence[i] > largestdigit:

您正在尝试将字符串值与整数值进行比较。 Python不会自动将字符串转换为整数,因此即使Python 2没有显示错误,代码也没有按照您的假设进行操作。

在Python 2中,当您尝试比较字符串和整数时,字符串ALWAYS的计算结果大于整数。因此,在你的代码中,即使你将句子[i]设置为“1”并将最大整数设置为9,句子[i]也总是大于maximumdigit。

在Python 3中,不是假设字符串总是大于整数,而是抛出错误,这就是你所看到的。

您需要使用int()方法手动将字符串转换为整数。那么,那行代码将成为:

   if int(sentence[i]) > largestdigit:
        largestdigit = int(sentence[i])

编辑:正如评论中提到的用户falsetru,另一种选择是制作所有字符串,在这种情况下,Python将根据其ASCII代码对它们进行评估,并且您的数字比较将正常工作。在这种情况下,您需要做的就是修改初始化largestdigit的行:

largestdigit = '0'

以及您在OUTPUT部分中进行的比较:

if largestdigit == '0':

答案 1 :(得分:0)

您看到的TypeError是故意改变的一部分。 Python3提供了更复杂和精确的比较运算符,因此,旧的“非自然”比较已被删除。这被记录为What's New for Python3的一部分:

  

Python 3.0简化了订购比较的规则:

     

当操作数没有有意义的自然顺序时,排序比较运算符(<,< =,> =,>)会引发TypeError异常。   因此,表达式如1< '',0>无或len< = len不再   有效,例如无< None引发TypeError而不是返回   假。一个必然结果是不再对异构列表进行排序   有道理 - 所有元素必须相互比较。注意   这不适用于==和!=运算符:对象   不同的无与伦比的类型总是比较不相等。

因此,您需要坚持使用字符或将所有数字转换为整数。如果您选择转换:

    if int(sentence[i]) > largestdigit:
        largestdigit = int(sentence[i])