我试图找到包含字母和数字字符的文本字符串中的最大数字。
源代码适用于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 )
答案 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])