▼2020년/파이썬 기초

[Python] 파이썬에서의 제어문 (if문) (1/3)

ITISIK 2020. 1. 22. 10:52
반응형
is_click_btn = True
if is_click_btn:
print('부팅을 시작합니다.')

  지난 포스트에서는 연산자에 대해서 알아보는 시간을 가졌었다. 이번 포스트에서는 본격적으로 프로그래밍을 하기 위해 제어문을 공부하려고 한다. 이전까지는 거의 대부분이 암기였다면 이제부터는 거의 대부분이 논리적 판단이라고 보면 된다.

 

  아직 프로그램을 한 줄도 짜보지 않았지만, 프로그램을 어렵게 생각하지 않았으면 좋겠다. 프로그램이란 단순히 말해서 컴퓨터를 동작시키는 어떤한 것을 말한다. 컴퓨터를 이용하기 위해서 가장 처음에 하는 부팅을 생각해보자.

 

  컴퓨터 앞에 앉은 사람이 컴퓨터 본체에 있는 파워 버튼을 누른다. 파워버튼이 눌린 컴퓨터는 여러가지 불빛이 들어오면서 안에 있는 팬도 작동하고 다양한 하드웨어 장치들에 적절한 전력을 공급하면서 제각각의 맡은 바대로 동작하게 된다.

 

자, 그러면 철저하게 컴퓨터의 입장에서 부팅과정을 바라보자. 컴퓨터는 왜 부팅이 된 것일까? 정답은 사람이 파워 버튼을 눌렀기 때문이다. 만약 파워버튼이 눌리지 않았다면 컴퓨터는 부팅되지 않았을 것이다. 그리고 마침 전원도 꺼져 있었다.(만약 전원이 켜져 있었다면 부팅이 아니라 강제종료가 되었을 것이다.)

 

  이와같이 프로그램의 입장에서는 ~~인지 아닌지를 판단해야하는 일이 굉장히 많다. "버튼이 눌렸는지, 눌리지 않았는지." "눌렸다면 몇 초 동안 눌렸는지" 등등... 이렇게 무엇 무엇인지 아닌지를 판단하는 프로그래밍 문법이 바로 if이다.

 

  이런 부팅 과정을 파이썬 문법을 이용하여 작성하면 아래와 같다.(물론 실행시 에러가 난다.)

if 사람이 스위치를 눌렀다:
    print('부팅을 시작합니다.')

  이와같이 파이썬 문법에서는 if 뒤에 참/거짓이 나타나는 문장(이하 조건문)이 오며, 이후 콜론(:)표시를 하고 줄을 바꾸어 들여쓰기를 해준뒤에 조건문이 참인 경우에 수행할 코드를 적어준다. 만약 여러줄의 코드를 수행하려 한다면, 아래와 같이 들여쓰기를 통일해주고 여러 줄에 걸쳐서 적어주면 된다.

if 사람이 스위치를 눌렀다:
    print('스위치를 누르셨군요!')
    print('부팅을 시작합니다.')
    print('좋은 하루 되세요 ^^')

 

  들여쓰기의 경우 탭이나 스페이스바 모두 가능하지만 필자의 경우 스페이스바를 추천한다. 사실 파이썬 공식 가이드 문서("Use 4 spaces per indentation level.")에서는 들여쓰기를 할 때 스페이스 바 4번을 권장하고 있다. 그러나 아직까지도 의견이 분분해서 결국 본인이 사용하기 편한 것을 사용하면 되지만, 주의할 점은 언제는 하나를 정했으면 쭉 그걸로만 이용해야 한다는 점이다. 언제는 스페이스바로 했다가 언제는 탭으로 해버리면 해당 코드를 공유하는 다른 동료들의 인생이 불행해진다. 그리고 당신에게 좋지 못한 감정을 갖게 될 것이다.

 

  위 코드를 동작 가능하게 바꾸려면 if 뒤의 조건문만 바꾸어주면 된다.

is_click_btn = True
if is_click_btn:
print('부팅을 시작합니다.')

  절대적인 법칙은 아니지만, True, False 값을 갖는 변수를 선언할 경우 변수명이 is로 시작하게끔 작성하는 프로그래머가 상당수 있다. 필자 또한 그런 경항이 있으므로 참고하기 바란다.

 

만약 부팅이 시작되지 않는 경우에도 print 함수를 통해서 알람을 주고 싶다면 문장의 뒤에 else문을 붙여주면 된다.

is_click_btn = True
if is_click_btn:
    print('부팅을 시작합니다.')
else:
    print('아무런 작동도 하지 않습니다.')

  그런데 위 프로그램에는 치명적인 단점이 있다. 현재 컴퓨터가 켜져 있는지 꺼져 있는지에 대한 판단이 빠져있다는 점이다. 왜 이게 치명적이냐면 컴퓨터의 처음 상태가 켜져있는 상태라면, 버튼을 눌렀을 시 강제종료 되는 것이 맞기 때문이다. 그러한 판단을 넣기 위해서는 조건문을 조금 수정해주면 된다.

is_power_on = False
is_click_btn = True
if (not is_power_on) & is_click_btn:
    print('부팅을 시작합니다.')
else:
    print('아무런 작동도 하지 않습니다.')

  위 프로그램은 컴퓨터 전원은 꺼져있었는데, 사람이 버튼을 누른경우에만 부팅을 시작하는 코드이다. 그런데 이 프로그램에서도 결함이 있다. 컴퓨터 전원이 켜져 있는 경우에는 컴퓨터를 강제종료 해야하는데 그런 조건이 없는 것이다. 이런 경우에는 두 가지 경우의 수를 넘어서기 때문에(부팅 하는 경우, 강제종료 하는 경우, 아무런 작동도 하지 않는 경우) 최대 2가지 경우의 수만 제어할 수 있는 if-else문으로는 프로그램을 완전히 제어할 수 없다. 그래서 생겨난 또하나의 키워드가 elif이다. 아래 코드 예제를 통해서 익히도록 하자.

is_power_on = False
is_click_btn = True

if (not is_power_on) & is_click_btn:
    print('부팅을 시작합니다.')
elif is_power_on & is_click_btn:
    print('컴퓨터를 강제종료 합니다.')
else:
    print('아무런 작동도 하지 않습니다.')


is_power_on = True

if (not is_power_on) & is_click_btn:
    print('부팅을 시작합니다.')
elif is_power_on & is_click_btn:
    print('컴퓨터를 강제종료 합니다.')
else:
    print('아무런 작동도 하지 않습니다.')

  이로써 전원이 나가 있을 때 버튼을 누르면 부팅이 되고, 전원이 들어와 있는 상태에서 버튼을 누르면 강제종료가 되며 버튼을 누르지 않을 때에는 아무런 작동도 하지 않는 프로그램을 만들었다. 이렇게 우리 손으로 하나의 프로그램을 만든 것이다!

 

  이렇게 상황에 따라서 if문, if-else문, if-elif-else문을 적절하게 사용해주는 것이 필요하다. 아래에 유사코드로 주석과 함께 여러가지 상황에 대한 if문을 작성해둘테니 if문에 대해서 충분히 이해하고 넘어가기를 추천한다.

if 조건문:
    조건문이 True일 경우 수행할 문장.

# 조건문이 True이면 적어둔 문장이 수행되고, 조건문이 False이면 적어둔 문장이 수행되지 않는다.
# 적어둔 문장이 수행되거나, 수행되지 않거나 둘 중 하나이다.
if 조건문:
    조건문이 True일 경우 수행할 문장.
else:
    조건문이 False일 경우 수행할 문장.

# 조건문이 True이면 위에 적어둔 문장이 수행되고, 조건문이 False이면 아래에 적어둔 문장이 수행된다.
# 두 문장 중 한 가지 문장은 반드시 수행된다는 특징이 있다.(조건문이 True아니면 False이기 때문에.)
if 조건문1:
    조건문1이 True일 경우 수행할 문장.
elif 조건문2:
    조건문1은 False이면서, 조건문2가 True인 경우 수행할 문장.

# 조건문1이 True이면 위에 있는 문장이 수행되고, 조건문1이 False이면 조건문2가 True인지 확인한 뒤,
# True인 경우 아래에 적어둔 문장이 수행되고, 조건문2 조차도 False인 경우 아무런 문장도 수행되지 않는다.

# elif는 else if의 줄임말이기 때문에, 위에 적어둔 조건문이 모두 False인 경우에만 수행하는 문장이다.
if 조건문1:
    조건문1이 True일 경우 수행할 문장.
elif 조건문2:
    조건문1은 False이면서, 조건문2가 True인 경우 수행할 문장.
elif 조건문3:
    조건문1과 조건문2가 모두 False이면서, 조건문3가 True인 경우 수행할 문장.

# 바로 위 코드에서 elif문이 한 줄 더 추가되었을 뿐이다.

# elif는 else if의 줄임말이기 때문에, 위에 적어둔 조건문이 모두 False인 경우에만 수행하는 문장이다.
# 이러한 elif에는 개수의 제한이 없다.
if 조건문1:
    조건문1이 True일 경우 수행할 문장.
elif 조건문2:
    조건문1은 False이면서, 조건문2가 True인 경우 수행할 문장.
elif 조건문3:
    조건문1과 조건문2가 모두 False이면서, 조건문3가 True인 경우 수행할 문장.
else:
    조건문1, 조건문2, 조건문3 모두 True가 아닌경우. 즉 모두 False인 경우에 수행할 문장.

# else문은 그 위에 적어둔 모든 조건문이 True가 아닌 경우, 즉 모두 False인 경우에만 수행된다.

  여기까지가 if문의 전부이다. if문을 헷갈리면 이후 내용은 모두 헷갈린다는 의미이므로 완벽하게 이해할 수 있도록 해야한다. 다음 포스트에서는 제어문 2번째. 반복문 두 가지 중 하나인 while문에 대해서 포스팅하려고 한다.

반응형