Поиск максимального числа из входного списка

#python #numbers #max

#python #числа #максимальное

Вопрос:

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

 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)
  

Комментарии:

1. как вы думаете, какой тип данных data[0] ?

2. Я ожидал, что это будет int

Ответ №1:

Оператор return находится внутри 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)
  

Ответ №2:

Вы можете изменить свой

 data = numbers.split(" ")
  

Для

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

чтобы заставить его работать. Для Python 3 вам нужно

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

Ответ №3:

Вы могли бы использовать 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)
  

Комментарии:

1. это также может помочь новому пользователю показать им, как это делается с помощью for-loop , чтобы они могли изучить логику, стоящую за этим, а не просто бросать на них map , что может сбивать с толку

2. @aws_apprentice это действительно зависит от целей операции. Но в целом вы правы, новичок должен уметь вычислять максимум без специальных функций, и в то же время он / она должен также узнать об этих специальных функциях из Python.

3. @aws_apprentice Я добавил также более всеобъемлющий / классический способ

4. Я преобразую строку в целое число, но все равно возникает логическая ошибка. Можете ли вы указать? Я добавил эту строку в функцию data1 = numbers.split(» «) data = list(map(int, data1))

5. @hurat ваш return maximum имеет слишком большой отступ, он находится в forloop, следовательно, на первой итерации forloop он вернет первый maximum , который в вашем случае является data[0]

Ответ №4:

найдена проблема. Возникли две проблемы. 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)

  

Комментарии:

1. Спасибо вам, ребята. Я ценю это