본문 바로가기
파이썬 팁

for else / while else 사용 방법

by 다빈치코딩 2023. 10. 16.

목차

    반응형

    알고리즘 문제를 풀다보면 이런 형태의 문제를 보게 됩니다.

    정답이 있으면 정답을 출력하고, 답이 없다면 "No"를 출력하시오.

    즉 답의 출력을 요구하면서 답이 없는 경우에 특정한 값을 출력하는 경우 입니다.

    문제 예

    입력값 리스트에 1, 9, 25, 49, 81의 숫자가 있습니다. 7의 배수가 있으면 해당 값을 출력하고, 없으면 No를 출력하세요.

    아주 간단한 문제 예 입니다. 이 문제를 풀기 위해서 이렇게 답을 작성할 수 있습니다.

    a = [1, 9, 25, 49, 81]
    
    check = True
    for i in a:
        if i % 7 == 0:
            print(i)
            check = False
            break
    
    if check:
        print("No")

    리스트 a에 있는 값들을 확인하여 출력을 합니다. 문제는 답이 없을 경우를 고려하여 check 라는 변수를 두어 값이 있을 경우 check를 False로 바꾸어 "No"가 출력되지 않게 합니다. 아니면 파이썬은 타입의 변화가 자유롭다는 것을 이용하여 이렇게 해결할 수도 있습니다.

    ans = "No"
    for i in a:
        if i % 7 == 0:
            ans = i
            break
    
    print(ans)

    이렇게만 하더라도 다른 언어를 사용하는 사람들에게는 신기하게 느껴질 수 있습니다. 보통 C, JAVA등의 언어에서는 타입의 변화가 자유롭지 않기 때문에 문자열과 숫자를 하나의 변수에 자유롭게 사용하는 것만으로도 놀랄 수 있습니다. 

    반복문에 else 사용하기

    파이썬에서는 이것보다 다 쉬운 방법이 존재합니다. 바로 반복문에 else 구문을 사용하는 것입니다. 바로 이렇게 하면 됩니다.

    for i in a:
        if i % 7 == 0:
            print(i)
            break
    else:
        print("No")

    else 구문은 주로 if 문에서 보았기 때문에 for문이 돌지 않은 경우인 부정적인 상황에서 실행되는것 아닌가라고 생각할 수 있습니다. 하지만 저 else 구문은 모든 상황에서 출력이 됩니다. else구문이 동작하지 않는 경우는 break문을 만났을 경우 입니다. 즉 for문의 else는 다음과 같다고 생각하면 이해하기 쉽습니다.

    for문의 else는 no break의 의미 입니다.

    no break 이기 때문에 continue 구문을 만나는 경우에도 else 구문은 출력됩니다. 이는 while문에서도 똑같이 동작합니다. while문에서 break를 만났다면 else 구문이 실행되지 않습니다. 따라서 while문의 조건에 의해 종료되었다면 else 구문이 실행되게 됩니다. 

    논쟁중인 주제

    반복문에 else 구문이 이상하게 생각될 수 있습니다. 외국에 커뮤니티에서는 이 주제로 논쟁이 있었던 것으로 알고 있습니다. 반복문이 아예 실행되지 않았을 때 동작해야 하는것이 맞다, else 가 아닌 no break로 명칭을 바꿔야한다 등등 다양한 의견이 있는 구문입니다.

    어렵지 않은 사용법 이기 때문에 익숙하면 편리하게 사용할 수 있습니다. 문제를 풀 다 이런 상황이 발생하면 반복문에 else구문을 한 번 사용해 보시기 바랍니다.

    반응형