在 python 中的 max 函数中传递 1 2 23 32 4 returns 4,为什么?

passing 1 2 23 32 4 returns 4 in max function in python, why?

我的代码


def validate():
    if len(sys.argv) > 6:
        print("No more than 5 arguments please")
        exit()

def printArgs():
    print("\nthe arguments are:\n")

    for arg in sys.argv[1:]:
        print (arg)

def checkDigits():
    biggest = []
    for arg in sys.argv[1:]:
        if arg.isdigit():
            biggest.append(arg)

    if len(biggest)>= 3:
        print("\nthe biggest number passed is: ", max(biggest))
    else:
        print("you did not pass 3 or more numbers")

def main():

    validate()
    printArgs()
    checkDigits()

main()

如果我传递 1 2 23 32 4,它 returns 4 而不是 "checkDigit" 函数中的 32,我不知道为什么。通过 5 4 3 2 1 returns 5,所以我错过了什么吗?

我阅读了另一个 Whosebug post 并认为将 key=int 添加到我的 max 函数应该可行,对吗?

def checkDigits():
    biggest = []
    for arg in sys.argv[1:]:
        if arg.isdigit():
            biggest.append(arg)

    if len(biggest)>= 3:
        print("\nthe biggest number passed is: ", max(biggest, key=int))
    else:
        print("you did not pass 3 or more numbers")

您正在获取字符串列表的 max。您需要转换为 int.

为了演示,这就是您正在做的事情:

max("1 2 23 32 4".split())
#'4'

这是你应该做的:

max(map(int, "1 2 23 32 4".split()))
#32

更新代码的自然位置是在附加到 biggest 时转换为 int:

def checkDigits():
    biggest = []
    for arg in sys.argv[1:]:
        if arg.isdigit():
            biggest.append(int(arg))  #THIS LINE IS CHANGED

    if len(biggest)>= 3:
        print("\nthe biggest number passed is: ", max(biggest))
    else:
        print("you did not pass 3 or more numbers")

在您的函数 checkDigits 中,您必须在 "biggest" 列表中附加整数,因此更改为:

def checkDigits():
    biggest = []
    for arg in sys.argv[1:]:
        if arg.isdigit():
            biggest.append(int(arg))