什么python概念导致这个结果?

时间:2017-11-14 05:43:09

标签: python

所以我正在学习考试,我做了一个简单的功能来回顾'顺序处理'然后我做了这个函数,将空格数字的字符串输入转换成列表并扫描以找到最高,但我的条件似乎认为8大于20和23.有人可以告诉我为什么这是? / p>

def findMax(numberlist):
maxval = numberlist[0]
for i in numberlist[1:]:
    print("The value now is:\t",i,"\nThe max value is currently\t",maxval,"\n")
    if(i > maxval):
        maxval = i
print(maxval)
return maxval

def makeList(stringput):
    print(stringput)
    stringput = stringput.split(" ")
    for i in stringput[0:]:
        print("Value is:\t",i)
    return stringput

findMax(makeList(input("\nWhat test are to be sorted\n")))

这从输入" 1 20 8 21"

返回结果8

编辑:抱歉,新用户

2 个答案:

答案 0 :(得分:2)

因此,您基本上需要使用int()将整数的每个字符串表示形式转换为整数。所以,'20' < '8'因为2以ASCII顺序出现在8之前。当检查哪个字符串更大时,比较每个字符以查看哪个更大,它不会确认'0'后面的'2'的上下文。但是int('20') < int('8')因为数字线的工作原理(过度简化)。

您可以通过列表理解来完成所有这些:

stringput = [int(val) for val in stringput]

结果:

def findMax(numberlist):
    maxval = numberlist[0]
    for i in numberlist[1:]:
        print("The value now is:\t",i,"\nThe max value is currently\t",maxval,"\n")
        if(i > maxval):
            maxval = i
    print(maxval)
    return maxval

def makeList(stringput):
    print(stringput)
    stringput = stringput.split(" ")
    stringput = [int(val) for val in stringput] #new line
    for i in stringput[0:]:
        print("Value is:\t",i)
    return stringput

findMax(makeList(input("\nWhat test are to be sorted\n")))

答案 1 :(得分:2)

您正在将字符串输入python。这意味着所有排序都按字母顺序进行 - 而不是数字排序。

例如,如果您按字母顺序对以下两个单词进行排序,您会先放哪个?

  

苹果

     

Apple对吗?因为A来自B.让我们再试一次

  

8

     

23

它将在23 - 8后面的字母表中显示为&#39;。

如果要对这些进行正确排序,请先将它们全部转换为int。或者使用natsorted等库。