python | for ~ else 구문 사용하기

2023. 4. 5. 17:46·TIL/python

소수 찾기 문제를 해결하면서 for문을 탈출하기 위한 방법을 찾다가 파이썬에만 존재하는 for ~ else 구문을 알게 되어 정리해보려 한다.

 

아래 코드는 i가 소수인지 아닌지 판별하는 코드임을 3줄만 읽어도 모두가 알 것이다.

for 문을 돌면서, i가 소수가 아닐 때도 어떤 action을 하고 싶어서 if ~ else 구문을 작성해 주었다.

for i in range(2, 11):
    for j in range(2, i):
        if i % j == 0:
            print(f'{i}는 소수 아님')
            break
        else:
            print(f'{i}는 소수')
            break

하지만 이 코드는 우리가 원하는 대로 결과를 출력하지 않는다.

우리는 i가 소수이면 'i는 소수'를, 소수가 아니면 'i는 소수 아님'을 출력하길 원한다.

하지만, i=2일 때는 두 번째 for문의 range 범위 자체가 불가능하기 때문에 어떠한 출력도 되지 않고 i=3으로 넘어갔다.

그럼 어떻게 코드를 고쳐야 우리가 원하는 대로 2를 포함하여 모든 값이 소수인지, 소수가 아닌지 출력할 수 있을까?

for i in range(2, 11):
    for j in range(2, i):
        if i % j == 0:
            print(f'{i}는 소수 아님')
            break
    else:
        print(f'{i}는 소수')

위와 같이 코드를 고쳐보았다. 달라진 점은 보통 if문과 함께 쓰이는 else를 for문과 함께 사용했다는 점이다.

어떻게 작동하는지 직접 코드를 실행시켜 보면 우리가 원하는 결과가 출력되었음을 알 수 있다.

for ~ else 문은 어떤 흐름으로 작동된 것일지 살펴보자.

else는 for문이 break 되지 않고 정상적으로 작동했을 때 실행된다.

위 코드에서 if문을 가지고 있는 두 번째 for문이 break 되지 않았으면 else문을 실행하는 것이다.

i가 2일 때 처음에는 어떠한 출력도 되지 않았다. 하지만 for~else문을 사용했을 때는 정상적으로 출력되었다.

이는, i가 2일 때 두 번째 for문이 break 되지 않았기 때문에 else문으로 넘어간 것이다.

 

만약, if문에 break가 없었으면 어떻게 되었을까?

for문을 멈추지 않았기 때문에 i가 소수일 때에도 if 아래에 있는 else문이 항상 실행된다.

 

else의 입장에서는 for문이 break 되지 않았을 때 실행되는 것이고

if의 입장에서는 break를 했기 때문에 하위 코드인 else를 실행하지 않는 것으로 볼 수 있다.

 

어떨 때 for~else문을 쓸 수 있는지 생각해 보면 다음과 같다.

for문 안에 if 조건에 따라 break를 해야 하는 경우, break를 하지 않는 때(=조건에 만족하지 않는 때)에 필요한 action이 있으면 else를 사용할 수 있다.

반응형
저작자표시 (새창열림)
'TIL/python' 카테고리의 다른 글
  • pandas | datetime 라이브러리 사용하기
  • python | 뒤에서부터 찾을 때 사용하는 rfind(), rindex()
  • python | 10진법을 n진법으로 나타내기
  • python | and, or 연산자를 return문에서 사용하기
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (43)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
python | for ~ else 구문 사용하기
상단으로

티스토리툴바