Как таковая, ваша функция возвращает только первое расстояние.Когда во время первой итерации цикла встречается оператор return
, функция возвращается, и все.
Более того, ваша формула для расстояния, вероятно, неверна, поскольку аргумент sqrt()
может быть отрицательным.В приведенном ниже коде я предполагаю, что вместо этого вам нужно евклидово расстояние.
Хотя вы можете получить минимум и максимум, используя выражения генератора, для этого потребуется вычислить все расстояния дважды.Основываясь на цикле, который вы написали, вы можете сделать
def distance_squared(p0, p1):
return sum((x0 - x1) ** 2 for x0, x1 in zip(p0, p1))
def makeMove(board, chest, x, y):
chest_iter = iter(chest)
min_dist = distance_squared(next(chest_iter), (x, y))
max_dist = min_dist
for c in chest_iter:
dist2 = distance_squared(c, (x, y))
min_dist = min(min_dist, dist2)
max_dist = max(max_dist, dist2)
return sqrt(min_dist), sqrt(max_dist)