Вызов функции с неограниченным возрастанием одного аргумента и циклическим повторением другого по конечному набору значений - PullRequest
0 голосов
/ 17 июня 2020

Я пробовал свою первую программу в Python и в основном смог найти существующие ответы на свои вопросы, но теперь я действительно застрял.

Код выглядит следующим образом:

from shapely import geometry, ops

main_condition = True
line = geometry.LineString(((0,0),(5,5)))

while main_condition:
   # do some geometry stuff with line

   if second_condition:
      return line
      main_condition = False

   else:
      line_parallel = line.parallel_offset(«arg1»,«arg2»)
      line = line_parallel
      #loop again

Итак, у меня есть строка, которую я хочу смещать, пока не будет выполнено условие. Моя проблема в том, что параметры, которые я хочу изменить, являются аргументом функции shapely line_parallel. Теперь аргументы, которые я хочу изменить, следующие:

«arg1»: этот параметр является плавающим и представляет собой смещение для новой параллельной линии. Я бы хотел, чтобы это было 0,001, 0,001, 0,002, 0,002, 0,003, 0,003 и т. Д., Повторение один раз и затем переход к следующему числу.

«arg2»: этот параметр является строкой и если смещение, если влево или вправо. Я хочу, чтобы это изменялось между «левым» и «правым» каждый раз при запуске основного l oop.

Надеюсь, это не слишком запутанно, но, по сути, идея состоит в том, что линия сначала смещается на 0,001 «влево» , затем 0,001 «вправо», затем 0,002 «влево», затем 0,002 «вправо» и так далее каждый раз, смещаясь на все более и более удаленную позицию в любую сторону от исходной линии, пока условие не будет выполнено.

Любая идея о том, что может быть лучшим способом использования переменного аргумента функции внутри while l oop?

1 Ответ

0 голосов
/ 17 июня 2020

Простое решение

import itertools

def my_loop():
  for i in itertools.count():
    for dir in ['right', 'left']:
      arg1 = i * 0.001
      arg2 = dir
      # rest
      if condition:
        return
my_loop()

Однако, на мой взгляд, использование генераторов было бы лучшим решением. Но, поскольку вы все еще новичок, я воздержусь от публикации этого решения.

...