본문 바로가기

Programing/Python

[Python 입문] 7. 파이썬 제어문 - if

목차

  • if문 이란?
  • if문 기본 구조
  • 들여쓰기
  • 조건문이란?
  • 다양한 조건을 판단할 수 있는 elif
  • 조건문 한 줄로 작성

if문

1. if문 이란?

 "돈이 있으면 택시를 타고, 돈이 없으면 걸어가라."는 문장을 프로그래밍에서 조건을 판단하고 그 조건에 맞는 상황을 수행하는데 쓰이는 것이 if문이다. 아래의 소스코드와 같이 표현할 수 있다.

>>> money = 1
>>> if money:
...     print("Take a taxi")
... else:
...     print("Just walk")
... 
Take a taxi

 money에 입력된 1은 참이다. 그렇기 때문에 if문에서 명령한 print("Take taxi")가 출력된다는 뜻이다.

 

 

2. if문 기본 구조

 앞서 봤던 것처럼 if와 else를 사용한 조건문의 기본 구조는 아래와 같다. 다시 한번 상기시켜 보자.

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

 이 기본 구조를 순서도로 그리면 위와 같다. 조건문이 참이면 if문 다음의 문장들을 수행하고, 조건문이 거짓이면 else문 다음의 문장들을 수행하게 된다. 그렇기 때문에 else문은 if문 없이 독립적으로 사용할 수 없다.

 

 

3. 들여쓰기

 그리고 중요한 부분이 있다. if문을 만들 때 if 조건문: 아래의 문장부터 if문에 속하는 모든 문장은 들여쓰기(indentation)를 해야 한다.

  if 조건문:

      수행할 문장1

  수행할 문장2

      수행할 문장3

>>> money = 1
>>> if money:
...     print("Take")
... print("taxi")
  File "<stdin>", line 3
    print("taxi")
        ^
SyntaxError: invalid syntax

 위의 소스코드를 보면 print("taxi")의 문장을 들여쓰기 하지 않았기 때문에 오류가 발생한다.

  if 조건문:

      수행할 문장1

      수행할 문장2

          수행할 문장3

>>> money = 1
>>> if money:
...     print("Take")
...     print("taxi")
...         print("together")
  File "<stdin>", line 4
    print("together")
    ^
IndentationError: unexpected indent

 위의 소스코드를 보면 print("together")의 문장을 들여쓰기 했지만 다른 두 문장과 들여쓰기의 깊이가 다르기 때문에 오류가 발생한다. 그렇기 때문에 들여쓰기는 언제나 같은 깊이로 작성해야 한다.

 이런 들여쓰기는 공백(Spacebar)을 사용하는 방법과  탭(Tab)을 사용하는 방법이 있는데 소스코드를 작성할 때 두 가지를 섞어 사용하지 말고, 하나만을 통일해서 사용하는 것이 좋다. 공백과 탭을 혼용해서 사용하면 오류가 발생할 수 있기 때문에 주의해야 한다.

 

콜론(:)의 중요성

 조건문 뒤에는 무조건 콜론(:)이 붙는다. 특별한 의미가 있는 것은 아니고 파이썬의 문법 구조다. 앞으로 배울 while, for 등의 문장 끝에도 콜론(:)은 항상 들어가기 때문에 꼭 기억하자.

 

 

4. 조건문이란?

 if와 같은 조건문이란 참과 거짓을 판단하는 문장을 말한다. 자료형에서 알아봤던 참과 거짓에 대해 아래와 같이 몇 가지만 다시 보자.

자료형 거짓
숫자 (Number) 0이 아닌 숫자 0
문자열 (String) "abc" " "
리스트 (List) [1, 2, 3] [ ]
튜플 (Tuple) (1, 2, 3) ( )
딕셔너리 (Dictionary) {'a', 'b'} { }

 그렇기 때문에 앞에서 봤던 조건문 문장 택시에서는 money가 조건문이 되는 것이다. money가 1이기 때문에 참이 돼서 if문의 문장을 수행했던 것이다.

 

4.1. 비교연산자

 실제 조건문 작성 시 참인지 거짓인지 판단할 때 위와 같은 자료형 보다 비교연산자를 쓰는 경우가 많다. 아래의 표에서 비교연산자를 보자.

비교연산자 설명
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는 y보다 크기 때문에 참
>>> x < y
False   <---- x는 y보다 작지 않기 때문에 거짓
>>> x == y
False   <---- x와 y는 같지 않기 떄문에 거짓
>>> x != y
True   <---- x와 y는 다르기 때문에 참

 이를 응용해서 프로그래밍을 하면 아래와 같다.

>>> money = 2000
>>> if money >= 3000:
...     print("Take a taxi")
... else:
...     print("Just walk")
... 
Just walk

 money = 2000인 상황에서 money >= 3000은 거짓이 되기 때문에 if가 아닌 else문의 문장을 수행한다.

 

4.2. and, or, not

 조건을 판단할 때 사용할 수 있는 다른 연사자다.

연산자 설명
x or y x와 y 둥 중 하나만 참이면 참이다.
x and y x와 y 모두 참이어야 참이다.
not x x가 거짓이면 참이다.

 

 위 연산자를 "돈이 3000원 이상 있거나 카드가 있으면 택시를 타고, 그렇지 않으면 걸어가라"의 문장에 사용해보자.

>>> money = 2000
>>> card = 1
>>> if money >= 3000 or card:   <---- money가 3000보다 크거나 같거나 또는 card가 참이면 아래 문장 출력
...     print("Take a taxi")
... else:
...     print("Just walk")
... 
Take a taxi

 money는 2000이지만 card가 1로써 money >= 3000 or card의 조건문이 참이 된다. 따라서 "Take a taxi" 문장이 수행됐다.

 

4.3. x in s, x not is x

 파이썬은 다른 프로그래밍 언어에서 볼 수 없는 재미있는 조건문을 제공한다. 아래와 같이 리스트, 튜플, 문자열 모두에 적용할 수 있다. (소스코드를 보면 쉽게 이해할 수 있다.)

# 리스트
>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False

# 튜플
>>> 'a' in ('a', 'b', 'c')
True

# 문자열
>>> 'j' not in 'python'
True

 이를 응용해 예제를 만들어 보면 아래와 같다.

>>> pocket = ['paper', 'cellphone', 'money']   <---- pocket안에 있는 내용물
>>> if 'money' in pocket:   <---- 만약 pocket안에 money가 있으면 아래 문장을 수행해라
...     print("Take a taxi")
... else:
...     print("Just walk")
... 
Take a taxi

 pocket의 리스트 안에 money가 있기 때문에 'money' in pocket은 참이 된다. 따라서 if문의 다음 문장이 수행되는 것이다.

 만약 조건문에서 아무 일도 없게 설정하고 싶다면 아래와 같이 pass를 적용하면 된다.

>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket:
...     pass   <---- if가 참이면 pass가 수행되며 아무 결과값이 없다.
... else:
...     print("Use your card")
... 

 

 

5. 다양한 조건을 판단할 수 있는 elif

 if와 else만 사용해서는 다양한 조건을 판단하기 어렵고, 소스코드를 작성하는 것 역시 복잡해질 수 있다. 이때 사용할 수 있는 것이 elif다.

"주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈과 카드 모두 없으면 걸어가라"
>>> pocket = ['paper', 'cellphone']
>>> card = 1
>>> if 'money' in pocket:   <---- pocket에 money가 있으면
...     print("Take a taxi")
... elif card:   <---- pocket에 money는 없지만 card가 있으면
...     print("Take a taxi")
... else:   <---- pocket에 money가 없고, card도 없으면
...     print("Just walk")
... 
Take a taxi

예시 문장에 elif를 적용해 표현하면 위의 소스코드와 같다. elif의 이전 조건문 if가 거짓일 때 수행된다. if, elif, else 모두를 사용할 때 기본 구조는 아래와 같다.

 

 

6. 조건문 한 줄로 작성

 앞에서 알아봤던 다양한 조건문을 한 줄로 사용할 수 있다. 아래의 소스코드를 참고하자. (소스코드를 보면 바로 이해할 수 있다.)

>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket: pass
... else: print("Use your card")
... 

 if, else뒤에 위치한 콜론(:) 뒤에 수행할 문장을 바로 작성이 가능하다. (개인적으로는 가독성이 별로....)

 

 

내용 출처: 책 '점프 투 파이썬'의 내용