2013-08-12 4 views
1

Я пытаюсь выполнить петлю через множество точек, и если выполняются определенные условия, добавьте другую точку между текущей и следующей. Затем я хочу снова запустить цикл, пробегая как старые, так и новые точки. Например:Python: Изменение условий цикла 'for'

  • for i in range(3)

    • Если i не соответствует определенный набор условий, добавить в новую точку после i .Это изменит диапазон range(4). Завершите цикл и перезапустите с помощью for i in range(4).
    • Если я действительно отвечает условиям, по-прежнему в range(3). Если i достигает конца, не добавляя новую точку, выйдите из цикла и продолжайте с остальной частью кода.

Я пробовал различные методы, но я не могу получить что-нибудь работать. Мое понимание было бы, что вдоль линий:

b = 3 
for i in range(b): 
    if (i meets conditions): 
     pass 
    else: 
     b = b+1 
     "retry entire loop with new b" 

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

Возможно, мне не хватает чего-то простого, но я просто не вижу решения этого.

Спасибо за помощь!

+2

Я думаю, что в этом случае цикл 'while' будет лучше. – SethMMorton

+0

Вы хотите начать с начала цикла или с точки с добавленной точкой? – kindall

+0

@kindall, я хочу начать с начала цикла – FreeBixi

ответ

3

Вы должны будете использовать рекурсивную функцию для этого:

def func(l): 
    for i, el in enumerate(l): 
     if (el match the conditions): 
      l.insert(i+1, something) 
      return func(l) 
    return l 


l = [1, 2, 3] 
result = func(l) 

Или использовать время цикла:

l = [1, 2, 3] 
while True: 
    i = 0 
    if i >= len(l): 
     break 
    if (l[i] match the condition): 
     l.insert(i+1, something) 
     i = 0 
    else: 
     i += 1 
+0

Спасибо за ваш ответ. Просто попробуйте это сейчас; Я прав, думая, что оператор 'while True' является способом бесконечного цикла' while', пока вы не скажете, что он сломается? – FreeBixi

+0

Да, вы правы. –

1
b = 3 
found = False 
while True: 
    for i in range(b): 
     if (i meets conditions): 
      found = True 
      break # Done - breaks out 
    if found: 
     break 
    else: 
     b += 1 
1

Использование цикла While ...

has_change = True 
b = 3 
while has_change: 
    new_b = b 
    for i in range(b): 
     if (i meets conditions): 
      pass 
     else: 
      new_b = b+1 
      break 
    changed = new_b != b 
1

Используйте цикл while для запуска новых для петель

b = 3 

criteria_met = False 
while (criteria_met == False): 
    for i in range(b): 
     if (i == 1): 
      b = b+1 
      criteria_met = True 
      break 
print b 

В качестве примечания, обратите внимание на бесконечные петли при использовании таких петель.

Смежные вопросы