#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. Спасибо вам, ребята. Я ценю это