Вы смотрели на заявление на перерыв? См. Python разбить и продолжить .
. В вашем условном выражении проверьте, была ли найдена точка внутри окружности, и разбейте, если истина, код ниже:
# position_data and radius_data are the properties of the circles mentioned above
for circle_position, circle_radius in zip(position_data, radius_data):
#(x, y) are the coordinates of the points mentioned above
for x, y in zip(vals1, vals2):
# Condition to check if a point was found within a circle
if point_in_circle(circle_position, circle_radius, x, y):
break
Для этого условного утверждения я бы порекомендовал вытащить проверку point_in_circle в отдельную функцию для удобства чтения и повторного использования:
def point_in_circle(cx, cy, cr, px, py):
d = math.sqrt(
(px - cx) ** 2 + (py - cy) ** 2
)
if d < cr:
return True
Здесь cx, cy и cr - это позиция x круга, позиция y и радиус
px, py - это точки x и y.
Чтобы помочь ответить на ваш следующий вопрос, я вставил приведенный ниже код, за исключением некоторых комментариев:
# NEW
pointsWithinCircles = 0
totalPoints = len(vals1)
def point_in_circle(position_data, radius_data, x, y):
in_circle = False
# Logic
return in_circle
for circle_position, circle_radius in zip(position_data, radius_data):
for x, y in zip(vals1, vals2):
if point_in_circle(circle_position, circle_radius, x, y):
# NEW - Increment counter
pointsWithinCircles += 1
break
#NEW
pointsOutsideCircles = totalPoints - pointsWithinCircles
Вы можете создать счетчик, чтобы отслеживать, сколько точек содержится в кругах. Затем вычтите pointsWithinCircles из общего количества набранных вами баллов, которое просто равно длине вашего списка vals1 (или vals2).