这是一个函数,它接收一个非常长的字符串并搜索其中的任何数字并返回最大的数字。我一直在TypeError: unorderable types: int() > str()
def largest_digit(s):
largest = 0
if len(s) == 0:
return 0
else:
for x in range(len(s)):
if s[x].isdigit() and if int(s[x]) > largest:
largest = s[x]
return largest`
这是追溯:
Traceback (most recent call last):
File "1.py", line 42, in <module>
main()
File "1.py", line 36, in main
x = largest_digit(s)
File "1.py", line 14, in largest_digit
if int(s[x]) > largest:
TypeError: unorderable types: int() > str()
答案 0 :(得分:3)
分配largest
后,它会引用一个字符串对象。以下谓词比较了{3.}}和int
,这在Python 3.x中是不可能的(幸运的是)。 (在Python 2中,你只是通过比较它们来默默地得到错误的答案。)
str
替换:
int(s[x]) > largest
使用:
largest = s[x]
OR
替换:
largest = int(s[x])
使用:
if s[x].isdigit() and int(s[x]) > largest:
获得正确的结果(不要避免错误)。
顺便说一句,你不需要外部 if s[x].isdigit() and int(s[x]) > int(largest):
,因为迭代一个空序列是可以的。
答案 1 :(得分:1)
strName = "This5 contai3ns numb9rs"
largest = 0
if len(strName) == 0:
print "Its empty"
else:
for x in range(len(strName)):
if strName[x].isdigit() and int(strName[x]) > largest:
largest = ***NOTE THIS*** int(strName[x])
print largest
您需要提供最大的int值而不是字符串。 如果在这里你也需要输掉第二个:
if s[x].isdigit() and if int(s[x]) > largest:
答案 2 :(得分:0)
问题的另一个解决方案是使用正则表达式:
>>> import re
>>> s = "234fflr lglrlk5674 fglh0335kdkgel"
>>> m = re.findall("\d", s) #look for all digits in the string and make list of them
>>> max(m)
'7'