1) 제어문 (1)

다음과 같은 상상을 해 보자.

    "돈이 있으면 택시를 타고 가고 돈이 없으면 걸어 간다."

위와 같은 상황은 우리 주변에서 언제든지 일어 날 수 있는 상황중의 하나이다.

  프로그래밍이란 것도 사람이 만드는 것이라서 위와 같은 문장처럼 조건을 판단해서 그 상황에 맞게 처리해야 할 경우가 생기게 된다.

이렇듯 조건을 판단하여 해당 조건에 맞는 상황을 수행하는데 쓰이는 것이 바로 if문이다.

  위와 같은 상황을 파이썬에서는 다음과 같이 만들 수 있다.

 

>>> money = 1
>>> if money:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
택시를 타고 가라

 

if문의 기본 구조

 

다음의 구조가 if와 else를 이용한 기본적인 구조이다.

 

if <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
else:
    <수행할 문장A>
    <수행할 문장B>
    ...

 

  조건문을 테스트 해서 참이면 if문 바로 다음의 문장(if 블록)들을 수행하고 조건문이 거짓이면 else문 다음의 문장(else 블록)들을 수행하게 된다.

 

들여쓰기(indentation)

 

  if 문을 만들 때는 다음 처럼 if <조건문>: 다음의 문장부터 if문에 속하는 모든 문장들에 들여쓰기를 해 주어야 한다.

 

if <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    <수행할 문장3>

 

  위에서 보는 것과 같이 조건문이 참일 경우 <수행할 문장1>을 들여쓰기 하였고 <수행할 문장2><수행할 문장3>도 들여쓰기를 해 주었다.

이것은 파이썬을 처음 배우는 사람들에게 매우 혼동스러운 부분이기도 하니 여러번 연습을 해 보는 것이 좋다.

  다음처럼 하면 에러가 난다.

 

if <조건문>:
    <수행할 문장1>
<수행할 문장2>
    <수행할 문장3>

 

<수행할 문장2>가 들여쓰기가 되지 않았다.

  또는

 

if <조건문>:
    <수행할 문장1>
    <수행할 문장2>
      <수행할 문장3>

 

<수행할 문장3>이 들여쓰기는 되었지만 <수행할 문장1>이나 <수행할 문장2>와의 들여쓰기의 깊이가 틀리다.

  즉 들여쓰기는 언제나 같은 깊이로 해 주어야 한다.

그렇다면 들여쓰기는 공백으로 하는 것이 좋을까? 아니면 탭으로 하는 것이 좋을까?

  이것에 대한 논란은 파이썬을 사용하는 사람들 사이에서 아직도 계속되고 있는 것인데 탭으로 하자는 쪽, 공백으로 하자는 쪽 모두다 일치하는 내용은 단 하나, 둘을 혼용해서 쓰지 말자는 것이다.

공백으로 할 거면 항상 공백으로 하고 탭으로 할 거면 항상 탭으로 하자는 말이다.

  탭이나 공백은 프로그램 소스에서 눈으로 보이는 것이 아니기 때문에 혼용해서 쓰면 에러의 원인이 되기도 한다. 주의 하도록 하자.

      (※ 요새는 들여쓰기 시 스페이스만을 사용하는 것이 파이썬 프로그램 커뮤니티에서 보편적으로 권장되는 방식이다.)

[참고] ':'을 잊지 말자

if(조건문) 다음에는 반드시 콜론(':')이 오게 된다. 이것은 특별한 의미라기보다는 파이썬의 문법 구조이다. 왜 하필이면 ':'인가에 대해서 궁금하다면 파이썬을 만든 Guido에게 직접 물어보아야 할 것이다. while이나 for, def, class 에도 역시 그 문장의 끝에 ':'이 항상 들어간다. 이 ':'을 가끔 빠뜨리는 경우가 많은데 주의하도록 하자.

파이썬이 다른 언어보다 보기가 쉽고 소스코드가 간결한 이유가 바로 ':'을 사용하여 들여쓰기(indentation)를 하게끔 만들기 때문이다. 하지만 숙련된 프로그래머들이 파이썬을 접할 때 가장 혼란스러운 부분이기도 하다.

if 문을 다른 언어에서는 { } 이런 기호로 감싸지만 파이썬에서는 들여쓰기로 해결한다.

 

조건문이란 무엇인가?

 

  if <조건문>에서 사용되는 조건문이란 참과 거짓을 판단하는 문장을 말한다.

자료형의 참과 거짓에 대해서는 이미 알아 보았지만 몇가지만 다시 알아보면 다음과 같은 것들이 있다.

 

자료형의 참과 거짓

 

자료형 거짓
숫자 3 0
문자열 "abc" ""
리스트 [1,2,3] []
터플 (1,2,3) ()
딕셔너리 {"a":"b"} {}

 

 

  따라서 위의 예에서 보았던

 

>>> money = 1
>>> if money:

 

  에서 조건문은 money가 되고 money는 1이기 때문에 참이 되어 if문 다음의 문장을 수행하게 되는 것이다.

 

비교연산자

 

  조건판단을 하는 경우는 자료형보다는 비교 연산자(<, >, ==, !=, >=, <=)를 쓰는 경우가 훨씬 많다.

다음 표는 비교연산자를 잘 설명해 준다.

 

비교연산자 설명
x < y x가 y보다 작다
x > y x가 y보다 크다
x == y x와 y가 같다
x != y x와 y가 같지 않다
x >= y x가 y보다 크거나 같다
x <= y x가 y보다 작거나 같다

 

 

  예를 통해서 위의 연산자들에 대해서 알아보자.

 

>>> x = 3
>>> y = 2
>>> x > y
True
>>>

 

  x에 3을 y에 2를 대입한 다음에 x > y라는 조건문을 수행하니까 True를 리턴한다. 그 이유는 x > y라는 조건문이 참이기 때문이다.

 

>>> x < y
False

 

  위의 조건문은 거짓이기 때문에 False를 리턴한다.

 

>>> x == y
False

 

  x와 y는 같지 않다. 따라서 위의 조건문은 거짓이다.

 

>>> x != y
True

 

  x와 y는 같지 않다. 따라서 위의 조건문은 참이다.

앞의 경우를 다음처럼 바꾸어 보자.

 

    "만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 그렇지 않으면 걸어가라"

 

  위의 상황을 다음처럼 프로그래밍 할 수 있을 것이다.

 

>>> money = 2000
>>> if money >= 3000:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
걸어가라
>>>

 

  money >= 3000 이란 조건문이 거짓이 되기 때문에 else문 다음의 문장을 수행하게 된다.

예제를 연습해 봅시다