다중반복문에서 continue를 사용하여 맨 처음 반복문으로 가고자 할 때

조회수 73회

안녕하세요 반복문이 여러개고 어떤 조건이 됐을 때 맨 처음 반복문에서 시작하고 싶은데 어떻게 해야 할까요? 어떻게 해야 할지 모르겠습니다

# 위 code 생략
while True:
    # 돌아가고 싶은 지점
    # while code 생략

    for i, ad in zip(df, adsl):
        logger.debug('i.drop(0, axis=0, inplace=True)')
        ni = i.drop(0, axis=0)
        ni = ni.drop(0, axis=1)

        if ni.empty:
            logger.info(f'{ad}에 NOTAM 없음')
            dins[ad]
        else:
            for idx, row in ni.iterrows():
                if pd.isna(row).any() != True:
                    row.dropna(inplace=True, axis=0)
                    logger.debug("row.str.extract(r'(.*)').iloc[0].iloc[0]")
                    notam = row.str.extract(r'(.*)').iloc[0].iloc[0]
                    notam_nbr = notam[:8]  # 노탐번호
                    notam_content = notam[11:]  # 노탐본분
                    dins[ad][notam_nbr] = notam_content
                else:
                    logger.info('처음으로 돌아갑니다.')
                    continue #### 여기서 while 반목문의 처음으로 돌아가고 싶어요

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    while True:
        condition=False
    
        for i in range(10):
    
            for j in range(10):
    
                if j==5:
                    condition=True
                    break
    
            if condition==True:
                break
    

    위 코드 처럼 특정 조건(예를 들어 j==5)에서 특정 변수(condition)의 조건을 참(True)으로 바꾸고, 안쪽 루프를 하나 빠져나가고(break), 안쪽 루프를 빠져나간 직후에 그 변수(condition)가 참이라면 또 루프를 빠져나가도록 코드를 작성하시면 됩니다.

    질문에서는 continue로 물어 보았으나, break 대신 continue를 이용하여 코드를 작성할 경우 코드가 더 지저분해 지니까 break를 이용하는 것이 좋을 것 같습니다.

    # 위 code 생략
    while True:
        condition=False
        # 돌아가고 싶은 지점
        # while code 생략
    
        for i, ad in zip(df, adsl):
            logger.debug('i.drop(0, axis=0, inplace=True)')
            ni = i.drop(0, axis=0)
            ni = ni.drop(0, axis=1)
    
            if ni.empty:
                logger.info(f'{ad}에 NOTAM 없음')
                dins[ad]
            else:
                for idx, row in ni.iterrows():
                    if pd.isna(row).any() != True:
                        row.dropna(inplace=True, axis=0)
                        logger.debug("row.str.extract(r'(.*)').iloc[0].iloc[0]")
                        notam = row.str.extract(r'(.*)').iloc[0].iloc[0]
                        notam_nbr = notam[:8]  # 노탐번호
                        notam_content = notam[11:]  # 노탐본분
                        dins[ad][notam_nbr] = notam_content
                    else:
                        logger.info('처음으로 돌아갑니다.')
                        #continue #### 여기서 while 반목문의 처음으로 돌아가고 싶어요
                        condition=True
                        break
                if condition==True:
                    break
    
    
    • 답변 감사드립니다. 혹시 아랫줄 if condition==True: 이 부분을 if condition: 으로 바꿔도 같은 의미일까요? 김지용 2021.7.6 21:40
    • continue를 사용할 경우, 바로 이전 반복문으로 빠져나가서 벗어나는 코드를 또 써야 하니까 그런 거죠? 만약에 while 다음에 for 반복문 하나만 있었으면 continue를 써도 똑같은 결과를 가져오고요. 제가 맞게 이해했을까요? 김지용 2021.7.6 21:52
    • if condition==True:를 if condition:로 바꾸어도 같은 의미입니다. cheolsu 2021.7.6 21:54
    • 댓글의 두번째 질문은 애매하게 써 놓아서 무슨 말인지 모르겠습니다. cheolsu 2021.7.6 21:56
    • 두번째 질문은 제가 좀 더 생각해보겠습니다! 답변 감사합니다~ 김지용 2021.7.6 22:05

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.