2013-08-12 3 views
1

점 집합을 반복하려고 시도하고 특정 조건이 충족되면 현재 점과 다음 점 사이에 다른 점을 추가합니다. 그런 다음 루프를 다시 시작하여 이전 및 새로운 포인트를 모두 실행하려고합니다. 예를 들어 는 :파이썬 : 'for'루프 조건 변경

  • for i in range(3)

    • i 경우, 특정 조건 세트를 충족 range(4)의 범위가 변경됩니다 i .This 후 새 지점에 추가하지 않습니다. 루프를 끝내고 for i in range(4)으로 다시 시작하십시오. 내가 조건을 충족 않으면
    • , range(3)에서 계속합니다. 새 점을 추가하지 않고 i이 끝나면 루프를 종료하고 나머지 코드를 계속 진행합니다.

나는 다양한 방법을 시도,하지만 난 아무것도 동작하지 않습니다. 새로운를해야하지만 내가 첫 번째 점에서 다시 시작하려면이 얻을 수있는 방법을 볼 수 없습니다, 나는 또한 while 루프를 사용하여 시도

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) 

또는 while 루프 사용 while 루프를 사용

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

을 ...

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 루프를 사용하여 for 루프를 새로 트리거

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 

이와 같은 루프를 사용할 때 무한 루프에주의해야합니다.