파이썬 자료구조/알고리즘 09 : for ~ else문 응용하기

728x90

파이썬 자료구조/알고리즘 09 : for ~ else문 응용하기


 

if 조건문과 따라다니는 else구문을 파이썬에서는 반복문과 함께 사용할 수 있습니다.

 

for문이 중간에 break로 빠져나오지 않고 완전히 끝까지 실행되었을 경우 else문의 명령어가 실행됩니다. 또한 for문이 아얘 실행되지 않는 경우에도 else문이 실행됩니다.

for와 else는 같은 라인에 쓰도록 합니다.

 

다음은 for~else문을 사용하지 않은 코드입니다.

 

lst = [1, 3, 6, 4, 2]
flag = 0

for i in lst:
    if i > 5:
        flag += 1
        print('반복문 탈출')
        break

if flag != 0:
    print('5보다 큰 수 발견')
else:
    print('5보다 큰 수 없음')
반복문 탈출
5보다 큰 수 발견

 

lst리스트에 5보다 큰 수가 발견되면 flag값을 주고 반복문 밖에서 flag값이 존재하면 '5보다 큰 수를 발견'이라는 문자열을 출력하도록 합니다.

 

for~else문을 사용하면 다음과 같이 코드를 간결하게 줄일 수 있습니다.

lst = [1, 3, 2, 3, 2]

for i in lst:
    if i > 5:
        print('5보다 큰 수 있음')
        break

else:
    print('5보다 큰 수 없음')
5보다 큰 수 없음

 

for문이 중간에 break로 빠져나오지 않고 완전히 끝까지 실행되었을 경우 else문의 명령어가 실행됩니다.

i > 5를 만족하는 lst의 원소가 없기 때문에 for문은 끝까지 돌아가고, 이후에 else문의 명령어를 실행합니다.

 

 

다음은 1부터 입력받은 num까지의 소수를 출력하는 코드입니다.

num = int(input())

for n in range(2, num+1):
    for i in range(2, n):
        if n % i == 0:
            break
    else:
        print(n)
>> num : 100
2
3
5
7
(...)
83
89
97

 

소수는 1과 자기 자신을 제외한 어떤 정수로도 나눠지지 않는 숫자입니다. 따라서 첫 번째 for문에서 1을 범위에서 제외시켰습니다.

 

첫 번째 반복문에서 n이 5에 도달했을 경우, 두 번째 반복문은 n의 값을 2~n-1까지의 값으로 나누도록 합니다.(1과 자기 자신으로 나눠지는 것을 방지했습니다.) 이때 나머지가 0이 되는 값이 존재한다면 n은 합성수가 되므로 두 번째 반복문을 빠져나와 첫 번째 반복문을 이어서 진행하도록 합니다.

 

만약 두번쨰 반복문을 완전히 돌았는데도 나머지가 0이 되는 값을 찾지 못했다면 else문을 실행합니다. 이때 n은 소수이므로 print()로 출력합니다.

728x90