Responsive Advertisement
{getContent} $results={6} $label={recent} $type={grid}

파이썬 프로그래밍 - 제어 구조와 조건문 if문 사용법

 이제 본격적인 프로그래밍을 배워볼까 합니다. 조건문과 반복문을 제어 구조라고 하는데요. 프로그래밍이 흥미진진해지는 중요한 길목입니다. 이번 글에서는 조건문에 대해 알아보겠습니다.

썸네일

제어 구조

제어 구조는 프로그램의 진행 흐름을 제어하는 구조를 말합니다. 기본적으로 명령어는 순차 구조로 진행이 되는데, 순서대로, 차례대로, 위에서 아래로, 왼쪽에서 오른쪽으로, 명령어를 실행합니다. 그런데 순차 구조만으로는 다양한 문제를 해결할 수 없어요. 어떤 부분은 조건에 따라서 실행하지 않고 건너뛰어야 하는 부분이 생길 수도 있고, 어떤 부분은 조건에 따라 다시 위에서부터 반복해야 하는 부분이 생길 수도 있습니다. 이런 구조를 각각 조건문, 반복문이라고 하고 이러한 흐름을 만드는 구조들을 제어 구조라고 합니다.

조건 구조, 조건문

조건 구조에 사용되는 명령어를 조건문이라고 합니다. 조건문은 특정 조건에 따라 어떤 동작을 수행할지 선택하는 명령어에요. 그래서 조건 구조를 선택 구조라고도 합니다. 예를 들어 사용자가 입력한 나이를 기준으로 만 14세 미만인지를 판별하여 회원가입 시 보호자의 동의가 필요한지 판별해야 합니다. 이러한 선택에 대해서도 조건문이 필요합니다. 그리고 가장 대표적인 조건문은 if문입니다. if문을 이해하는 것은 프로그래밍의 기초를 다지는 데 꼭 필요한 과정이에요.

조건식을 만드는 연산자

조건문에서 조건을 설정하는 것은 매우 중요한 절차입니다. 조건을 정확하게 설정해야, 조건문의 실행 결과가 올바르게 나오니까요. 조건은 기본적으로 참(True)인지, 거짓(False)인지를 판별하게 되는데, 이를 이용하여 프로그램이 어떻게 동작할지를 결정하게 됩니다. 연산자에는 산술 연산자, 비교 연산자, 논리 연산자가 있는데, 조건을 만들기 위해 이러한 연산자가 활용되어요. 산술 연산자는 사칙연산 등을 수행하기 위해 사용하는 연산자이고, 직접적으로 참과 거짓을 판별하는 데에는 비교 연산자나 논리 연산자가 활용됩니다.

참과 거짓

프로그래밍 과정에서 0은 거짓(False)를 의미합니다. 1은 참(True)를 의미하는데요. 사실, 0이 아닌 자연수는 참이 되는 성질을 갖고 있습니다.

  • True: 코드에서 True는 참입니다.
  • False: 코드에서 False는 거짓입니다.
  • 숫자 1: 코드에서 숫자 1은 참입니다.
  • 숫자 0: 코드에서 숫자 0은 거짓입니다.
  • 기타 자연수: 숫자 1외의 자연수도 참입니다.

비교 연산자

비교 연산자는 두 값을 비교하여 비교한 결과가 참인지 거짓인지를 판단하는 데 사용합니다. 수학 시간에 배운 등호와 부등호를 사용하게 됩니다.

  • a>b: a가 b보다 클 때 참입니다.
  • a<b: a가 b보다 작을 때 참입니다.
  • a>=b: a가 b보다 크거나 같을 때 참입니다.
  • a<=b: a가 b보다 작거나 같을 때 참입니다.
  • a==b: a와 b가 같을 때 참입니다.
  • a!=b: a와 b가 같지 않을 때 참입니다.

입력되는 기호에 독특한 면이 있습니다. 일단, 부등호만 사용할 때는 수학에서의 크기비교와 다르지 않습니다. 그런데, 부등호와 등호를 같이 쓸 때는 키보드에 마땅한 기호가 없기 때문에 두 기호를 나란히 병기합니다. 단, 부등호를 먼저 쓰고 그 다음에 등호를 입력하게 됩니다.

a>=b나 a<=b로 써야 합니다. a=>b나 a=<b는 에러가 발생합니다.(등호 하나가 변수 저장의 의미를 갖기 때문)

또, 같은지를 비교하는 기호에서도 등호를 두 개 나란히 병기합니다. 프로그래밍에서 등호를 하나만 쓰는 것은 '오른쪽의 값을 왼쪽의 변수에 저장하라.'는 의미를 갖기 때문에, 등호를 두 개 사용하여 비교의 의미를 구분하는 것입니다.

a=b 는 b값을 a변수에 저장한다는 의미입니다. a==b는 a와 b의 크기가 같은지를 확인하는 것입니다.

또한 마지막의 느낌표와 등호를 병기하는 것은 '같지 않다.'를 나타냅니다. 느낌표가 not의 의미를 가지고 있습니다.

논리 연산자

논리 연산자는 말 그대로 논리적인 조건을 확인할 때 사용합니다. 조건을 만들다 보면 두 개 이상의 조건을 만족해야 할 때가 있습니다. 예를 들어 청소년인지를 확인하기 위해서는 나이가 14세 이상인 조건과 19세 미만인 조건 두 가지를 동시에 만족해야 합니다. 반면에, 청소년이 아닌지를 판별하려면 나이가 14세 미만인 조건이나 19세 초과인 조건 중 하나라도 만족해야 합니다. 이를 논리식으로 표현하면 아래와 같이 표현할 수 있습니다.

  • 나이 >= 14 그리고 나이 < 19 이면 청소년이다.
  • 나이 < 14 또는 나이 >=19 이면 청소년이 아니다.

이런 논리를 판별하기 위한 연산자를 논리 연산자라고 합니다. 논리 연산자에는 and, or, not 연산자가 있습니다.

  • a and b: a와 b가 둘 다 참인 경우에만 전체가 참입니다. a와 b 둘 중 하나라도 거짓이면 전체가 거짓입니다.
  • a or b: a와 b 둘 중 하나라도 참인 경우에는 전체가 참입니다. a와 b 둘 다 거짓이면 전체가 거짓입니다.
  • not a: a가 참이라면 거짓이고, 거짓이라면 참입니다.

if문

if문은 조건이 참일 때만 특정 코드를 실행하는 조건문입니다. 코드를 따라가다가 if문을 만나면 조건이 참인지 거짓인지 판별하고, 참인 경우에 if문에 포함된 코드를 실행합니다. 조건이 거짓이라면 if문에 포함된 코드를 실행하지 않고 건너뜁니다.

기본 문법

if 조건:
    실행할 코드

예시

age = 20
if age >= 18:
    print("성인입니다.")

이 코드는 age가 14세 이하인 경우 "보호자의 동의가 필요합니다."를 출력합니다. age가 14세를 초과한다면 아무것도 실행하지 않습니다.

조건이 두 개인 경우 | else

조건이 두 개인 경우에는, 첫 번째 조건이 참인 경우와 거짓인 경우로 구분하여 처리할 수 있습니다. 예를 들어, 치킨을 시키려는데 후라이드 치킨과 양념 치킨 중 고른다고 합시다. 양념 치킨을 고르는 경우는 단순히, 후라이드 치킨이 아닌 경우로 생각하여 처리할 수 있다는 것입니다. 이렇게, 조건이 참인 경우와 아닌 경우로 구분할 때는 if문과 else문을 사용합니다.

기본 문법

if 조건1:
    실행할 코드
else:
    실행할 코드

예시

menu = "후라이드"
if menu == "후라이드":
    print("후라이드 치킨을 주문하였습니다.")
else:
    print("양념 치킨을 주문하였습니다.")

위 코드는 menu가 '후리이드'일 경우 후라이드 치킨을 주문한다고 출력하고, 그렇지 않으면 양념 치킨을 주문한다고 출력합니다.

if문을 두 번 쓰면 어떨까요?

menu = "후라이드"
if menu == "후라이드":
    print("후라이드 치킨을 주문하였습니다.")
if menu == "양념": 
    print("양념 치킨을 주문하였습니다.")

위 코드와 같이 if문을 두 번 써서 해결할 수도 있습니다. 다만, if~else를 사용하는 경우의 명령어 효율이 좋습니다. if~else를 사용하면 참이냐 거짓이냐에 따라 서로 반대되는 경우의 코드를 생략할 수 있지만 if문을 두 번 사용하면, 앞에서 if문이 참으로 판별되어 코드를 실행했음에도 불구하고 다시 두 번째 if문의 조건을 확인해야 하는 자원의 소모가 발생합니다. 지금은 몇 줄 되지 않는 코드이지만, 규모가 커지면 커질수록 이런 코드들이 프로그램의 실행 속도를 떨어뜨릴 수도 있기 때문에, 명령어의 구조를 잘 활용한 효율적인 코드를 작성하기 위해 노력해야 합니다.

조건이 세 개 이상인 경우 | elif

조건이 세 개 이상인 경우도 있습니다. if~else를 중첩하여 사용하는 방법도 있지만, elif라는 명령어를 사용하면 여러 가지 경우의 수를 쉽게 처리할 수 있습니다. elif는 'else if'의 줄임말입니다.

기본 문법

if 조건1:
    실행할 코드
elif 조건2:
    실행할 코드
elif 조건3:
    실행할 코드
    ...
else:
    실행할 코드

예시

menu = "양념"
if menu == "후라이드":
    print("후라이드 치킨을 주문하였습니다.")
elif menu == "양념":
    print("양념 치킨을 주문하였습니다.")
elif manu == "파닭":
    print("파닭을 주문하였습니다.")
else:
    print("다른 종류의 치킨을 주문하였습니다.")

이 코드는 menu 값에 따라 후라이드, 양념, 파닭, 기타 네 가지 경우의 수에 대한 주문 상태를 출력합니다.

조건문 최적화

조건문을 사용할 때는 위에서 말씀드렸듯이 코드의 효율성을 고려해야 합니다. 조건이 많을 때는 조건의 순서가 중요합니다. 가장 자주 발생하는 조건을 나중에 작성하면, 앞에서 다른 경우의 조건들을 매번 검사해야 하지만, 가장 자주 발생하는 조건을 처음에 작성하면, 나머지 경우의 수는 매번 생략되어 프로그램 실행 속도를 개선할 수 있습니다. if, elif, else 문을 적절히 활용하여 코드의 중복을 줄이고, 불필요한 조건 검사나 논리 구조를 피할 수 있습니다.

마치며

파이썬의 조건문은 프로그램 흐름을 제어하는 중요한 요소입니다. if, elif, else를 적절히 활용하여 복잡한 로직을 간결하게 표현하고 해결할 수 있어요. 또한 조건문을 효율적으로 작성하면 코드의 가독성과 성능을 높일 수도 있습니다. 조건문은 매우 중요하니, 꼭 실습하고 연습해 보시기 바랍니다.

{getContent} $results={5} $label={recent} $type={block}