Мой Python немного ржавый, и у меня действительно возникают проблемы с этим супер простым алгоритмом.
Я пытаюсь написать функцию, которая принимает два параметра (цель, значения), чтобы найти, какое число в значениях ближе всего к целевому числу; если есть связь, выберите меньшее число.
Вот мой прогресс, но я когда-либо выбирал только меньшее число, фактически не сравнивая разницу значений в списке по сравнению с относительным расстоянием до цели.
Так что, по сути, моя функция фактически не выполнила задачу вообще, потому что 47 на самом деле ближе к 46, чем 31; однако, если бы числа, содержащиеся в списке, были гипотетически 45 и 47, то они были бы одинаково далеки от моего целевого числа, и поэтому должно быть напечатано 45, а не 47.
Я бы предпочел ответы, которые используют простые циклы for / if / while, чтобы я мог по-настоящему практиковать свои навыки.
Другие более сложные ответы также приветствуются с подробным объяснением.
EDIT
Несколько действительно хороших ответов от вас, ребята, высоко ценится; Я тестирую их, пока мы говорим, и выберу наиболее подходящий для моего стиля и использую остальные в качестве ссылок, даже если у вас есть лучший однострочный ответ.
target = 46
values = [1, 22, 31, 47, 87, 99]
def closest_to_target(target, values):
lower = []
for number in values:
if number < target:
lower.append(number)
if lower:
lowest = sorted(lower, reverse=True)[0]
return lowest
else:
return "Error handling array"
print closest_to_target(target, values)