Нахождение максимального числа из списка ввода - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь найти максимальное число из списка, но не могу найти логическую ошибку в коде

def find_max(numbers):
    data = numbers.split(" ")
    maximum = data[0]
    for number in data:
        if number > maximum:
            maximum = number
        return maximum


number = input("Enter number with space:")
answer = find_max(number)
print(answer)

Ответы [ 4 ]

1 голос
/ 04 апреля 2019

Вы можете изменить

data = numbers.split(" ")

на

data = map(int, numbers.split(" "))

, чтобы он работал.Для Python 3 вам нужно

data = list(map(int, numbers.split(" "))
1 голос
/ 04 апреля 2019

Оператор возврата находится внутри for, поэтому он всегда будет возвращать первый введенный номер.Также вы сравниваете строки с int.Попробуйте это (это решение вашего собственного кода, есть лучшие способы сделать это)

def find_max(numbers):
    data = numbers.split(" ")
    maximum = int(data[0])
    for number in data:
        if int(number) > maximum:
            maximum = int(number)
    return maximum


number = input("Enter number with space:")
answer = find_max(number)
print(answer)
0 голосов
/ 04 апреля 2019

обнаружил проблему. Были две проблемы. 1) что мне нужно конвертировать строку в int 2) моя функция возврата должна была быть ниже цикла for. Вот исправленный код

def find_max(numbers):
    data1 = numbers.split(" ")
    data = list(map(int, data1))
    maximum = data[0]
    for number in data:
        if number > maximum:
            maximum = number
    return maximum


number = input("Enter number with space:")
answer = find_max(number)
print(answer)

0 голосов
/ 04 апреля 2019

Вы можете использовать max здесь. Причина, по которой ваш код не работает, заключается в том, что вы не преобразовали числа в целые числа, они все еще являются строками в вашем скрипте.

Классический способ:

def find_max(numbers):

    # if the list is empty return nothing
    if len(numbers) <= 0:
        return None

    # iterate to find the maximum
    maximum = numbers[0]
    for number in numbers:
        if number > maximum:
            maximum = number

    return maximum


numbers = input("Enter numbers with space:")

# transform the numbers string into a list of strings
numbers = numbers.split(" ")

# prepare numbers by converting them into integers
integers = []
for i in range(len(numbers)):
    number_as_integer = int(numbers[i])
    integers.append(number_as_integer)

# find the max
answer = find_max(integers)
print(answer)

Улучшенный способ:

def find_max(numbers):
    return max(map(int, numbers.split(" ")))


number = input("Enter numbers with space:")
answer = find_max(number)
print(answer)
...