[Python] 조건문(if, elif, else)

반응형
    반응형

    앞서 보았던 리스트나 튜플, 딕셔너리, 문자열 등등은 파이썬을 수행하기 위한 기본 재료들이었다면 

    조건문과 반복문은 이 재료들을 사용해서 괜찮은 완성품을 만들어내는 방법이라고 여기면 되겠습니다. 그래서 조건문과 반복문만 할 줄 알아도 대부분의 코딩은 할 수 있습니다.

    조건문에 대해서 알아보겠습니다.

    조건문은 특정 조건을 만족하면 작업을 수행하려고 할 때 사용합니다. 그래서 모든 조건은 boolean으로 표현됩니다. 제가 boolean으로 작성하지 않아도 조건문 안에서는 boolean으로 받아들입니다. 즉, boolean 이 아님에도 boolean으로 표현되는 경우가 있습니다. 자세한 건 예를 보면서 살펴보겠습니다.

     


    IF 사용법

    조건문은 if 로 작성됩니다. 그냥 쓰는 게 아니고 몇 가지 규칙이 있습니다. 일단 if 구문을 쓴 후에는 :(콜론)을 써야 하고,

    조건문의 구체적인 작업수행을 쓰려면 들여 쓰기를 해서 써야 합니다. 들여 쓰기를 하지 않으면 if 구문에 있는 작업 수행이 아니라고 생각해 작동이 안 됩니다. 아래와 같은 코드로 작성해서 if 구문이 참이면 print로 쓰인 두 작업을 수행할 것입니다.

    if 2>=1:
        print('True')
        print('2 is greater than 1')

    그런데 아래와 같이 코드를 작성하면 print('it is true') 는 if와 상관없이 코드 수행을 하게 됩니다.

    if 2 >= 1:
        print ('2 is greater than 1')
    print ('it is true')
    

     이런 차이가 있으니 유의해서 쓰는것이 좋습니다. 보통 편집기에서는 콜론에서 엔터를 치면 자동으로 들여 쓰기를 해줍니다. 들여 쓰기 안 돼있는 걸 넣으려면 스페이스 4번이나 Tap 1번으로 맞추면 됩니다. 파이참을 쓰시는 분들은 들여 쓰기를 하면 색깔이 바뀌므로 크게 어렵지는 않을 겁니다.

     

    If 구문이 bool인 경우

    참, 거짓이 확연히 드러나는 부등식이면 bool으로 쓰여진 건데 부등식을 하나만 쓰지는 않을 때 논리 표를 알고 있으면 도움이 됩니다.

    A B And Or
    True True True True
    True False False True
    False True False True
    False False False Flase

    부정을 할 경우는 not A 로 쓰는데 항상 A의 반대니 어려울 건 없어 보입니다.

    여러 개의 조건을 넣어야 한다면 and , or, not을 적절히 씁니다. 다만, 우선순위가 있어서 주의해야 합니다.

    우선순위는 not> and> or 순입니다. 우선순위를 주려면 괄호를 사용합니다. 사칙연산하듯이 한다 생각하면 되겠습니다.

    a = 10
    b = 8
    c = 12
    if (a == 10 or b ==9) and c ==12:
        print('True')

    위와 같은 코드일 경우 a == 10 은 참이고 b ==9는 거짓이지만 or로 인해 괄호 안의 값은 참입니다. c==12 가 맞으니 if 구문은 참 and 참 이므로 True 가 나옵니다.

    괄호가 없을 경우는 and 가 먼저이므로 b== 9는 거짓이고 c==12는 참이라 거짓이 되고 그다음에 a==10 은 참이고 or에 의해 참이 됩니다. 

    컴퓨터는 우선순위에 의해 받아들이므로 괄호를 적절히 씁시다.

     

    not을 쓰려면 

    if not 6==5:
        print('True')
    
    if 6 !=5:
        print('True')

     

    같은지를 물을 때는 위의 두 가지 방법으로 씁니다. 등호 앞에! 를 붙이면 같지 않다는 의미가 되므로 위의 not과 같은 의미가 됩니다. 부등식은 부등호를 반대로 하면 되니 굳이 not을 쓸 일이 없습니다. 

     


    If 구문이 bool 이 아닌 경우

    bool 아닌 경우가 의아해 할 수도 있는데 아래와 같은 경우를 말합니다.

    a =10
    if a:
        print('10')

    a = 10인데 if에 넣으면 어떻게 받아들이는지 궁금하실 수 있을 텐데요. 왜냐하면 a는 bool 타입이 아니기 때문에 if 가 안 돼야 하는 게 맞는데 해보시면 아시겠지만 10 하고 결과가 딱 나옵니다. a를 True로 받아들인 것이지요.

    위의 예처럼 if 구문은 무조건 bool로 받아들인다는 것을 알고 계셔야 합니다. 그럼 어떨 때 False로 받아들일까요?

    초기값일 때 False 로 받아들입니다.

    즉, 다음과 같은 경우에는 False 로 받아들입니다.

    • None
    • 0
    • 0.0
    • '' 
    • [] -> 빈 리스트 
    • () -> 빈 튜플 
    • {} -> 빈 딕셔너리 
    • set() -> 빈 집합

    If, elif, else

    코딩을 짜면 참, 거짓으로 간단히 수행할 수 있는 경우가 거의 없습니다. 여러 가지 상황을 맞닥뜨리는데 그럴 때 elif와 else를 쓰면 극복할 수 있습니다. 

    예를 보겠습니다.

    a = 13
    if a % 4 == 0:
        print ('a is divisible by 4')
    elif a % 4 == 1:
        print('Range is 1')
    elif a % 4 == 2:
        print('Range is 2')
    else:
        print('Range is 3')

     

    if 가 참이면 a is divisible by 4를 출력하고 조건문을 끝냅니다. if가 참이 아니면 다음 elif를 갑니다. 위 예는 elif 가 참이라서 Range is 1을 출력했지만 만약에 아니라면 다음 elif... 이런 식으로 코드 진행을 하게 됩니다. 그리고 모두 아니라면 else를 참이라 보고 Range is 3을 출력합니다.

     

    a = 13
    if a % 4 == 0:
        print ('a is divisible by 4')
    if a % 4 == 1:
        print('Range is 1')
    if a % 4 == 2:
        print('Range is 2')
    else:
        print('Range is 3')

    if 만 쓰게 되면 방식이 약간 다릅니다. 먼저 첫 번째 if 가 참인지 아닌지를 판단하고 참이면 출력, 거짓이면 넘어갑니다.

    다음 if에서도 마찬가지로 참인지 거짓인지를 판다 하고 참이면 출력, 거짓이면 넘어갑니다. 이런 식으로 반복합니다. 

    지금 else의 값도 출력이 됐는데 그 이유는 a% 4 ==2 가 거짓이기 때문입니다. else는 무조건 나오는 것이 아니라 바로 위의 if와 상충되는 것을 유의하시기 바랍니다.

    a = 14
    if a % 4 == 0:
        print ('a is divisible by 4')
    if a % 4 == 1:
        print('Range is 1')
    if a % 4 == 2:
        print('Range is 2')
    else:
        print('Range is 3')

    a를 바꿨더니 else는 안 나왔습니다. 

     


    중첩 조건문

    if 안에 if를 반복해서 쓸 수 있습니다. 제한은 없고 하고 싶은 대로 무제한으로 할 수 있습니다.

    들여 쓰기만 주의하시면 되겠습니다.

    a = 14
    if a % 2 ==0:
        if a% 7==0:
            print(a+1)

    이런 식으로 작성이 가능합니다.

     

    'Python > 기초' 카테고리의 다른 글

    [Python] for 반복문  (0) 2020.04.03
    [Python] while 반복문 쓰기  (0) 2020.04.02
    [Python] 딕셔너리(dictionary)  (0) 2020.03.28
    [Python] 리스트 다루기(생성,추가,인덱싱)  (0) 2020.03.25
    [Python] 문자열(string) 다루기  (0) 2020.03.25

    댓글

    Designed by JB FACTORY

    ....