파이썬(python) 제어문(if, for, while)

파이썬 제어문은 다른 언어(C언어)와 비슷하지만 가지 특징이 있다. 대표적 특징은 들여쓰기를 한다는 것인데, 들여쓰기를 해서 얻는 이점은 간결함이다. 하지만 개인적으론 들여쓰기는 제어문이 복잡해지면 가독성이 낮아짐을 느낀다. 이건 C언어의 블럭구조에 익숙해져 온 프로그래밍 습관인 한 몫 하는 듯 하다. 또한 들여쓰기는 문장의 배치에 제약을 주는데, 이는 정형화된 구조를 만드는 장점이 있지만, 경우에 따라서 답답함을 느끼기도 한다. 아무튼 파이썬이란 언어 자체가 워낙 간결함을 추구하고, 아주 복잡한 제어문을 사용한다면 어짜피 포퍼먼스가 낮아지기 때문에, C로 부분적인 대체를 하면 되니 불만은 없다.

 

if문

예)

- 조건문 끝에 : (콜론)을 사용하자.

- 들여쓰기를 하자.

- C언어의 else if 문은 파이썬에서는 elif다.

 

들여쓰기의 방법은 다음 그림처럼 하면 된다.

if, elif, else는 들여쓰기를 안 한 상태로 같은 열을 맞춘 상태다. 동일 레벨의 조건문으로 인식된다. print문은 동일 레벨의 구문이므로 열을 맞춘 상태다. 열을 맞추는 방법은 spacebar, tap 두 가지 방법이 있는데 한가지 방법으로만 사용하는 것이 좋다. 에디터에 따라서 탭의 간격이 틀리기 때문에 spaecebar와 tap을 혼용하면 들여쓰기 규칙에 맞지 않게 변형될 수 있기 때문이다. space를 사용한다면 보통 4개로 맞춘다.

 

for in 문

파이썬에서 가장 활용도가 높다. C에서 몇 줄짜리 복잡한 반복문을 파이썬의 for in을 이용해 한 줄로 간단히 변형하기도 한다. for문은 기본적인 사용은range() 함수를 이용하는데 range()함수는 범위를 가진 시퀀스(sequence)자료형을 만들어준다.

range() 함수의 예

range(0,10) 은 0<= x <10 인 정수 x의 시퀀스 자료형을 돌려준다. 이는 C언어의 for(i=0;i<10;i++) 에서 0<= I <10 인 경우와 같은데 보통 이렇게 반복할 범위 값을 초기값을 포함하고 끝 값을 제외하는 형태를 사용하는 이유가 있다. 이는 제어문을 논리적으로 다루는데 매우 중요한 개념이기도 하다. C++의 STL에서도 반복자를 begin() <= iter < end() 값을 취하는 이유도 이와 같은 것이다.(자세한 설명은 생략)

이를 토대로 range(0,10)은 0<= i <10 인 i를 만들어 내는 것을 알 수 있다.

이렇게 반복되는 i를 가지고 작업을 하면 된다. 여기까지는 기본이고, 진짜 파이썬의 강력함은 이런 범위값을 모든 시퀀스 자료형에서 뽑아낼 수 있고 여러가지 응용을 할 수 있기 때문이다.

문자열을 이용한 예

리스트를 이용한 예

리스트 이용하여 for문을 돌리고 그 리스트에서 문자만 뽑아 출력한 예다. for문 이후에 좀 더 수행문들을 집어 넣고 싶다면 다음 그림처럼 else로 for 문이 끝나는 지점을 명시할 수 있다.

주의할 은 if문과 들여쓰기가 다르므로 for문에 종속된 else다. C에서는 for문과 else는 관계가 없지만, 파이썬의 else는 for, while문과 동일레벨의 else로 쓰일 수 있다.

continue, break

C를 다루었다면 이 또한 새로울 것이 없다.

break를 만나고 바로 종료되었다. 결과 b만 출력되고 else문 다음 end가 출력이 안되었는데, 이는 for문과 else문이 동일레벨이기 때문이다. 다음은 이를 설명하는 예제다.

중첩 for루프와 else

i,j루프가 있고 i루프가 j루프를 감싼다. 내부 루프와 외부루프는 레벨이 다르고 내부 루프를 빠져나오면 외부루프를 돌게 된다. else:문의 위치는 내부 루프기 때문에 break로 계속 빠져나와 inner는 출력되지 않는다. outter는 외부 루프므로 출력된다.

continue

위 예제의 break를 continue로 바꾼 예이다.

내부 for문이 끝날 때 마다 else: 다음이 실행된다.

for문의 가독성과 간결함

이전 파이썬의 형 변환에서 설명한 사전을 리스트로 바꾸는 예다. 이런 사용은 간결함과 가독성을 고루 갖추었다. 이런 간결함은 내가 파이썬을 공부하는 이유기도 하다.

2015/07/12 - [프로그래밍/python] - 파이썬(python)의 형변환


while 문

while문은 조건이 참인 동안 반복해서 실행된다. while문 또한 for와 같이 else 문을 사용한다.

else의 들여쓰기에 따라 달라지는 의미

while문 내부에 if문이 있고 else문의 들여쓰기에 따른 실행결과의 차이를 나타내는 예제다.

 

break, continue 문 또한 똑같이 적용된다.

이 댓글을 비밀 댓글로
    • 2015.07.30 00:54
    매 좋은 강좌 감사합니다. ㅎㅎ
    • 에구, 허접한 강좌 잘 봐주시니 감사할 따름입니다ㅎㅎ
  1. 전 지금 안동대학교 영재교육원 정보과학분야 학년 교육중인데요 제가 못들은 것을 잘 설명해주셔서감사합니다
    • 2015.09.01 12:38
    비밀댓글입니다
    • 안녕하세요.
      >>> numlist ="1231245"
      >>> v=0
      >>> for digit in numlist:
      (들여쓰기)if digit.isdigit():
      (들여쓰기)(들여쓰기)v+=int(digit)
      >>> v
      18
      위와 같이 하면 어떨까요?^^ 들여쓰기는 답글에 적용이 안되네요
    • 와우
    • 2019.12.24 19:50
    작성하시고 4년이 지나서 보고있지만
    개념적으로 이해가 정말 잘되네요 좋은 강좌 감사합니다. 완독하겠습니다.
    • 넵 감사합니다. 조만간 파이썬 관련 시리즈를 정리하여 더 좋은 강좌를 만들 생각입니다. 시간이 좀 걸리더라도 시중에 나온 책들의 내용 이상의 내용을 담을 생각이므로 꼭 북마크 부탁드립니다.^^