관리 메뉴

5. 파이썬(Python) 제어문(if) 본문

Python/Python 기본 개념

5. 파이썬(Python) 제어문(if)

ª_ª 2017. 8. 23. 10:04
728x90
반응형


제어문 이란?

제어문 이란 말 그대로 제어하는 겁니다. 어떠한 상황에서 조건에 만족하는 부분이 존재하면 그거에 맞게 실행됩니다. 예를 들어서 배가 고프면 밥을 먹고, 배가 안고프면 밥을 안 먹는다.”라는 문장이 존재 할 때 선택지는 두 개가 됩니다. (밥을 먹는다, 밥을 안 먹는다) , 조건을 판단해서 해당 조건에 맞는 상황에 따라서 쓰는 것들이 제어문입니다. 제어문의 종류는 크게 두 가지인데 참과 거짓을 판별하는 조건문, 반복적인 작업을 할 때 사용하는 반복문이 있습니다

 

1. if문의 구조


if 조건문:

if 조건에 만족하는 문장1

if 조건에 만족하는 문장2

......

else:

else 조건에 만족하는 문장1

else 조건에 만족하는 문장2

......

 

제일 처음에는 if 조건문을 테스트해서 if조건에 참(true)이면 안에 있는 문장을 출력합니다. 하지만 if조건에 거짓(false)이면 아래에 있는 else문으로 이동하게 됩니다. 그러면 else안에 있는 문장을 출력 합니다.

 

2. 들여쓰기 규칙

if문을 만들 때는 조건문 아래에 있는 문장부터 if문에 속하는 모든 문장에 들여쓰기를 해주어야 합니다. 만약 들여쓰기를 하지 않는 다면 오류가 발생합니다. 파이썬은 다른 언어와 달리 들여쓰기를 무시하면 오류가 나니까 주의 하셔야 됩니다.

 

2_1. 정상적인 들여쓰기 경우

>>> hungry = 0

>>> if hungry:

print("배가 고프니까 밥을 먹는다.")

else:

print("배가 안 고프니까 밥을 안 먹는다.")

 

배가 안 고프니까 밥을 안 먹는다.

 

제가 IDLE를 사용해서 했기 때문에 위와 같이 ifelse가 동일 선상에 있지는 않지만 >>>(프롬프트)를 제외하면 ifelse는 동일 선상에 있다고 생각하시면 됩니다. 또한 파이참 에서 사용할 때는 아래와 같이 하면 됩니다.

 

hungry = 0

if hungry:

print("배가 고프니까 밥을 먹는다.")

else:

print("배가 안 고프니까 밥을 안 먹는다.")

 

2_2. 비정상적인 들여쓰기

>>> hungry = 0

>>> if hungry:

print("밥을 먹는다.")

print("라면도 먹는다.")

SyntaxError: invalid syntax

 

이렇게 에러구문이 출력 됩니다. , 문장의 들여쓰기가 동일 선상에 없다면 에러가 발생할 수 있다는 것을 기억하시면 좋습니다.

 

들여쓰기를 할 때 어떤 방법으로 할까요?

들여쓰기를 할 때 방법은 두 가지가 있습니다. 스페이스 키(Space key)와 탭 키(Tab key)가 존재합니다. 본인이 편한 걸로 사용하시면 됩니다. 대신에 동일선상에 문장이라면 탭은 탭으로 스페이스는 스페이스로 해야 합니다. 만약에 두 가지를 혼용해서 쓰면 우리 눈에는 같아 보이지만 컴퓨터는 탭 키와 스페이스 키는 똑같은 게 아니기 때문에 에러 구문이 출력됩니다.

참고로 탭 키는 스페이스 4개를 사용한 것과 같습니다. , 들여쓰기를 스페이스와 탭을 활용해서 하려면 스페이스4개를 사용해서 동일하게 맞추면 됩니다.

 

참고사항

다른 언어에서는 if(조건문)를 이렇게 사용하지만 파이썬은 if 조건문 뒤에는 콜론(:)이 사용됩니다. 왜 언어 마다 다르지? 라고 생각할 수 있는데 그건 이 프로그램언어를 만든 개발자의 생각이기 때문에 따를 수바께 없습니다. 그리고 다른 언어는 {} 기호로 조건 안에 있는 문장을 감쌌지만 파이썬은 들여쓰기로 대신하는 것도 알고 계시면 됩니다.

 

3. 조건문의 기본 개념

자료형에 따라서 조건문의 참과 거짓은 다르게 표시됩니다.

자료형

거짓

숫자

0이 아닌 모든 숫자

0

문자열

“abcde”

“”

리스트

[1,2,3,4,5]

[ ]

튜플

(1,2,3,4,5)

( )

딕셔너리

{“A” : 90}

{ }

 

따라서 2_1에서 살펴보았던 조건문을 다시 한 번 봐 보세요.

>>> hungry = 0

>>> if hungry:


hungry0이기 때문에 거짓이 되어서 if문을 지나치고 else문이 실행된걸 알 수 있습니다.

 

3_1. 비교 연산자[(<, >), (==, !=), (>=, <=)]

조건문에서는 참과 거짓을 판별할 때 자료형 보다는 비교연산자를 쓰는 경우가 더 많습니다.

비교 연산자

설명

a < b

ab보다 작습니다.

ba보다 큽니다.

a > b

ab보다 큽니다.

ba보다 작습니다.

a == b

ab와 같습니다.

ba와 같습니다.

a != b

ab와 같지 않습니다.

ba와 같지 않습니다.

a >= b

ab보다 크거나 같습니다.

ba보다 작거나 같습니다.

a <= b

ab보다 작거나 같습니다.

ba보다 크거나 같습니다.

 

3_1_1. 비교연산자 예제

>>> a = 1

>>> b = 2

>>> a < b # 1 < 2 True

True

>>> a > b # 1 > 2 False

False

>>> a == b # 1 == 2 False

False

>>> a != b # 1 != 2 True

True

>>> a >= b # 1 >= 2 False

False

>>> a <= b # 1 <= 2 True

True

 

비교 연산자를 사용해서 조건에 맞게 TrueFalse를 반환 시킵니다.

 

3_1_2. 비교연산자 활용하기

2_1에서 살펴본 예제를 다음과 같이 바꿔 볼까 합니다.


만약 배가 50이상 고프면 밥을 먹고, 그렇지 않으면 밥을 먹지 않는다.”

>>> hungry = 40

>>> if hungry >= 50:

print("밥을 먹는다.")

else:

print("밥을 안 먹는다.")

밥을 안 먹는다.

 

>>> hungry = 50

>>> if hungry >= 50:

print("밥을 먹는다.")

else:

print("밥을 안 먹는다.")

밥을 먹는다.

 

다음과 같이 조건이 만족하면 if문을 만족하지 않으면 else문을 수행하는 것을 확인 할 수 있습니다.

 

3_2 다른 연산자(and, or, not)

비교 연산자 외에 다른 연산자도 있습니다.

 

연산자

설명

a or b

ab 둘 중에 하나만 참이면 참입니다.

a and b

ab 둘 다(모두) 참이어야 참입니다.

not a

a가 거짓이면 참입니다.


3_2_1. or 연산자

>>> a = 1

>>> b = 0

>>> if a or b:    # 1 or 0 == True or False => True

print("True")

else:

print("False")

 

True

 

>>> a = 0

>>> b = 0

>>> if a or b:    # 0 or 0 == False or False => False

print("True")

else:

print("False")

 

False

 

>>> a = -1

>>> b = 0

>>> if a or b:    # -1 or 0 == True or False => True

print("True")

else:

print("False")


True

 

ab0이 아니면 모두 True가 나오는 것을 확인 할 수 있습니다.

 

3_2_2. and 연산자

>>> a = 1

>>> b = 0

>>> if a and b:    # -1 and 0 == True and False => False

print("True")

else:

print("False")


False

 

>>> a = 1

>>> b = 1

>>> if a and b:    # 1 and 1 == True and True => True

print("True")

else:

print("False")

 

True

 

>>> a = -1

>>> b = 1

>>> if a and b:    # -1 and 1 == True and True => False

print("True")

else:

print("False")

 

True

 

a b가 모두 창이어야 True가 나오는 것을 확인 할 수 있습니다. 둘 중에 0이 하나라도 있다면 False를 반환합니다.

 

3_2_3. not 연산자

not 연산자는 not 1을 하면 결과는 False입니다. not 0을 하면 결과는 True입니다.

 

>>> not 1

False

>>> not 0

True

 

4. in 조건문

파이썬은 다른 언어에서 쉽게 볼 수 없는 재미있는 조건문을 제공합니다. in라는 조건문입니다. in이라는 단어의 뜻은 “~안에라는 것을 생각하면 쉽게 사용할 수 있습니다.


in

설명

not in

설명

x in 문자열

문자열에 x가 있니?

x not in 문자열

문자열에 x가 없니?

x in 리스트

리스트에 x가 있니?

x not in 리스트

리스트에 x가 없니?

x in 튜플

튜플에 x가 있니?

x not in 튜플

튜플에 x가 없니?

* 여기서 x는 알파벳이 아니라 미지의 문자 혹은 수를 의미합니다.

- in은 존재하면 True 존재하지 않으면 False

- not in은 존재하면 False 존재하지 않으면 True

 

4_1. in 사용하기(문자열)

>>> "a" in "abcdefg"

True

>>> "z" in "abcdefg"

False

>>> string = "abcdefg"

>>> "a" in string

True

>>> "z" in string

False

 

위 표와 같이 문자열 안에 단어가 존재하면 됩니다.

 

4_2. in 사용하기(리스트)

>>> 1 in [1,2,3]

True

>>> 0 in [1,2,3]

False

>>> list1 = [1,2,3]

>>> 1 in list1

True

>>> 0 in list1

False

 

4_3. in 사용하기(튜플)

>>> 1 in (1,2,3)

True

>>> 0 in (1,2,3)

False

>>> tuple1 = (1,2,3)

>>> 1 in tuple1

True

>>> 0 in tuple1

False

 

4_4. not in 사용하기(문자열)

>>> "a" not in "abcdefghijklmn" # 존재 하면 False

False

>>> "z" not in "abcdefghijklmn" # 존재 안하면 True

True

 

4_5. not in 사용하기(리스트)

>>> 1 not in [1,2,3] # 존재 하면 False

False

>>> 0 not in [1,2,3] # 존재 안하면 True

True

 

4_6. not in 사용하기(튜플)

>>> 1 not in (1,2,3) # 존재 하면 False

False

>>> 0 not in (1,2,3) # 존재 안하면 True

True

 

4_7. 예제

만약 주머니에 카드가 있으면 밥을 먹고, 없다면 안 먹는다.”

>>> pocket = ["key", "card", "phone", "garbage"]

>>> if "card" in pocket:

print("밥을 먹는다.")

else:

print("밥을 안 먹는다.")


밥을 먹는다.

 

pass 키워드

조건문에서 참, 거짓에 따라 실행되는 상황을 정의할 때, 아무 것도 하지 않도록 설정하고 싶을 때가 있습니다. 그럴 때는 pass 키워드를 사용하면 됩니다.


주머니에 돈이 없으면 가던 길을 가고 돈이 있으면 밥을 먹는다.”

>>> pocket = ["phone", "garbage", "wallet"]

>>> if "money" in pocket:

print("밥을 먹는다")

else:

pass

 

주머니에 돈이 없어서 아무것도 출력되지 않았습니다.

 

5. elif

ifelse만으로는 다양한 조건을 판별하기 어렵습니다. 그래서 elif가 있습니다. 다른언어에서는 else if로 사용되는 부분입니다.

 

주머니에 돈이 있으면 밥을 먹고, 돈은 없지만 카드가 있으면 밥을 먹고, 돈도 없고 카드도 없지만 기프트카드가 있으면 밥을 먹고, 돈도 없고 카드도 없고 기프트카드도 없으면 안 먹는다.”

>>> pocket = ["phone", "garbage"]

>>> card = 0

>>> giftcard = 1

>>> if "money" in pocket:

        print("돈으로 밥을 먹는다.")

else:

        if card:

            print("카드로 밥을 먹는다.")

        else:

            if giftcard:

                print("기프티카드로 밥을 먹는다.")

            else:

                printf("안 먹는다.")


기프티카드로 밥을 먹는다.

 

위에 예제를 보면 ifelse문으로 4개를 표현했는데 들여쓰기가 저렇게 들어갔습니다. 만약에 10개 이상으로 복잡한 조건들이 나오면 정말 어려울 겁니다. 그래서 그걸 보완하기 위해서 elif가 나왔습니다.


elif 사용

>>> pocket = ["phone", "garbage"]

>>> card = 0

>>> giftcard = 1

>>> if "money" in pocket:    # 주머니에 돈이 있으면

        print("돈으로 밥을 먹는다.")

elif card:    # 주머니에 카드가 있으면

        print("카드로 밥을 먹는다.")

elif giftcard:    # 주머니에 기프트카드가 있으면

        print("키프티카드로 밥을 먹는다.")

else:

        print("안 먹는다.")


밥을 먹는다.

 

조건이 10개 이상 늘어나도 ifelif는 동일 선상에 있기 때문에 보기가 더 편합니다.



if, while, for 연습문제 풀러 가기



728x90
반응형
Comments