Python Camp

Logo

Life is short. You need Python.

03장 프로그램의 구조를 쌓는다! 제어문

3-1 ) if문


「쇼핑하러 갈 때, 우유 하나 사와. 아, 계란 있으면 6개 사와」

라고 심부름을 부탁했다.

남편은 잠시 후, 우유를 6개 사왔다.

아내는 물었다.

「왜 우유를 6개나 사왔어!」

남편「계란이 있어서…」

if (계란 = true) 
    우유 6 구매 
else 
    우유 1 구매 

(1) if문은 왜 필요할까?

“돈이 있으면 택시를 타고, 돈이 없으면 걸어 간다.”

if문 : 주어진 조건을 판단한 후 그 상황에 맞게 처리해야 할 경우에 쓰이는 조건문
위와 같은 상황을 파이썬에서는 다음과 같이 표현할 수 있다.

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

(2) if문의 기본 구조 (General format)

if문은 if, elif, else 세 가지를 이용하여 구성된다.

if + 조건문
elif + 조건문
else + 조건문

조건문 뒤에는 컬럼(:)이 꼭 붙는다.

if test1: # if test
    statements1 # Associated block
elif test2: # Optional elifs
    statements2
else: # Optional else
    statements3
if 1:
    print('true')
if 0:
    print('success')
if not 1:
    print('true')
else:
    print('false')
if not 0:
    print('true')
else:
    print('false')
x = 'killer rabbit'

if x == 'bird':
    print("What a adrobale bird!")
elif x == 'bugs':
    print("Oops!")
else:
    print('Run away! Run away!')

if x == 'killer rabbit':
    print("What a adrobale bird!")
elif x == 'killer rabbit':
    print("Oops!")
else:
    print('Run away! Run away!')

if x == 'killer rabbit':
    print("What a adrobale bird!")
if x == 'killer rabbit':
    print("Oops!")
else:
    print('Run away! Run away!')
elif x=='killer rabiit':
    print('success elif')
else :
    print('fail elif')

(3) 들여쓰기 (Indentation)

if문을 만들 때는 조건문 바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기를 해야 한다.

if 조건문:
# ======================
    수행할 문장1
    수행할 문장2
    수행할 문장3
#=======================
# 조건문에 해당하는 statement bodies
if 조건문:
# ======================
    수행할 문장1
# ======================
# 조건문에 해당하는 statement bodies

# 조건문과 상관없이 수행되는 문장
수행할 문장2

# ????
    수행할 문장3
money = True

if money:
    print("택시를")
print("타고")
    print("가라")

(3-1) 들여쓰기의 깊이는 중요할까?

x = 1
if x:
    y = 2
    if y:
        print('block2')
    print('block1')
print('block0')
money = True
if money:
    print("택시를")
    print("타고")
        print("가라")
  x = 'SPAM'
if 'rubbery' in 'shrubbery':
    print(x * 8)
        x += 'NI'
        if x.endswith('NI'):
                x *= 2
            print(x) 

(3-2) 들여쓰기는 어떻게 할까? (Avoid mixing tabs and spaces)

  1. 공백 (spacebar)
  2. 탭 (Tab)
    • 탭은 한 번, 공백은 네 번을 입력한다.

혼용해서 사용하지 말 것!

Tab과 spacebar는 눈으로 확인할 수 없기 때문에 혼용해서 쓰면 error의 원인이 됨.


<Question 01>

「쇼핑하러 갈 때, 우유 하나 사와. 아, 계란 있으면 6개 사와」

라고 심부름을 부탁했다.

남편이 우유 하나와 계란을 6개 사오는 조건문을 작성해보자.

계란이 있다면 우유 하나와 계란 6개, 계란이 없다면 우유 하나만 사온다.
우유가 없다면 아무 것도 사오지 않는다.

Hint01) 우유의 변수명은 ‘milk’, 계란의 변수명은 ‘eggs’
Hint02) 우유와 계란의 유무 및 개수는 변수에 저장된 값을 바꿈으로써 지정한다.
Hint03) 우유와 계란의 개수는 print 형식으로 출력한다.
<–출력 형식–>
milk : ?
eggs : ?
No eggs (계란이 없을 시)


(4) 조건문이란 무엇인가?

앞서 “조건문”이란 참과 거짓을 판단하는 문장이다.
따라서 조건문과 반복문을 제대로 사용하기 위해서는 비교 연산자논리 연산자의 이해가 필수이다.

비교 연산자 (comparison operator)

비교 연산자 설명
<img width=100 /> <img width=300/>
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 = 7
y = 3
x > y
x < y
x == y
x!=y
x>=y
x<=y

비교 연산자를 사용하여 나온 결과값은 Boolean 형태로 출력된다.

결과값이 True로 나온 조건문은 이다.

결과값이 False로 나온 조건문은 거짓이다.

그렇다면 조건문이 무엇일 경우 블록 안의 문장이 수행될까?

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

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

<Question 02>

「두 가지 숫자를 비교하여 다음과 같이 출력하시오.」

  1. 두 숫자가 같으면 ‘두 숫자는 같습니다!’
  2. 크거나 작으면 ‘변수 x가 변수 y보다 큽니다 or 작습니다’

#### 비교 연산자 (comparison operator)

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

Hint01) 변수명은 자유롭게 지정한다
Hint02) if문과 비교 연산자를 사용한다
Hint03) else문은 사용하지 않는다. (only if, elif)


num1 = 20
num2 = 30

if num1 == num2:


elif num1 != num2:

논리 연산자 (logical operator) : 조건문 판단하기

| 논리 연산자 | 설명 | |:—|:—| |<img width=100 />|<img width=300/>| | x and y | x와 y 모두 참이어야 참이다 | | x or y | x와 y 둘중에 하나만 참이면 참이다 | | not x | x가 거짓이면 참이다 |

“돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 그렇지 않으면 걸어 가라”

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

money는 2000이지만 card가 True이기 때문에
money >= 3000 or card 라는 조건문이 참이 된다.

A Few Special Cases

파이썬에서만 볼 수 있는 재미있는 조건문

in not in
<img width=100 /> <img width=300/>
x in 리스트 x not in 리스트
x in 튜플 x not in 튜플
x in 문자열 x not in 문자열

in의 뜻이 “~안에” 라는 것을 생각해보면 쉽게 이해할 수 있다.

리스트

[1,2,3]이라는 리스트 안에 1이 있는가?

1 in [1, 2, 3]

[1,2,3]이라는 리스트 안에 1이 없는가?

1 not in [1, 2, 3]

튜플

'a' in ('a', 'b', 'c')
'j' not in 'python'

(5) 다양한 조건을 판단하는 elif : multiway branch

elif는 이전 조건문이 거짓일 때 수행된다
elif는 개수에 제한 없이 사용할 수 있다.

If <조건문>:
    <수행할 문장1> 
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
...
else:
   <수행할 문장1>
   <수행할 문장2>
   ... 

<Question 03>

“주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라”

Hint01) elif문을 사용하시오.

pocket = ['paper', 'cellphone', 'money']
card = True



Tip) 조건문에서 아무 일도 하지 않게 설정하고 싶다면?

가끔 조건문의 참, 거짓에 따라 실행할 행동을 정의할 때, 아무런 일도 하지 않도록 설정하고 싶을 때가 있다. 다음의 예를 보자.

“주머니에 돈이 있으면 가만히 있고 주머니에 돈이 없으면 카드를 꺼내라”

‘가만히 있으라고…?

pass
pass가 수행되면 아무런 결과값도 보여주지 않는다.

pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket:
    pass 
else:
    print("카드를 꺼내라")

Tip) if문을 한 줄로 작성하기

위의 pass를 사용한 예를 보면 if문 다음에 수행할 문장이 한 줄이고, else문 다음에 수행할 문장도 한 줄밖에 되지 않는다.
이렇게 수행할 문장이 한 줄일 때 조금 더 간략하게 코드를 작성하는 방법이 있다.

pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket: pass
else: print("카드를 꺼내라")

if문 다음의 수행할 문장을 콜론(:) 뒤에 바로 적어 주었다. else문 역시 마찬가지이다.


(6) 조건부 표현식 (Conditional expression)

The if/else Ternary Expression : statement to expression

score = 70 

if score >= 60:
    message = "success"
else:
    message = "failure"

위 코드는 score가 60 이상일 경우 message에 “success”를 아닐 경우에는 “failure”를 대입하는 코드이다.
파이썬의 조건부 표현식(conditional expression) 을 이용하면 위 코드를 다음과 같이 간단히 표현할 수 있다.

message = "success" if score >= 60 else "failure"
message
조건문이_참인_경우 if 조건문 else 조건문이_거짓인_경우

<Question 04>

다음 코드에 주석을 달아 각 조건문을 설명하고, 결과값을 확인해보자.

a = "Life is too short, you need python"
if 'wife' in a:
    print('wife')
elif 'python' in a and 'you' not in a:
    print('python')
elif 'shirt' not in a:
    print('shirt')
elif 'need' in a:
    print('need')
else:
    print('none')
a = "Life is too short, you need python"

# 'wife'라는 단어가 a 안에 존재한다면
if 'wife' in a:
# wife를 출력
    print('wife')

To Home
To Lecture List