передача 1 2 23 32 4 возвращает 4 в функции max в python, почему? - PullRequest
1 голос
/ 30 апреля 2019

Мои коды


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, он возвращает 4 вместо 32 в функции "checkDigit", и я не знаю почему. Передача 5 4 3 2 1 возвращает 5, так что я что-то упустил?

Я прочитал еще один пост StackOverflow и думаю, что добавление 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")

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Вы берете max из списка строк. Вам необходимо конвертировать в int.

Чтобы продемонстрировать, вот что вы делаете:

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

Вот что вы должны делать:

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

Естественным местом для обновления вашего кода является преобразование в int при добавлении к biggest:

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")
0 голосов
/ 30 апреля 2019

В вашей функции checkDigits вы должны добавить в «самый большой» список целое число, поэтому измените его на:

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