프로그래밍의 기본적인 명령어 구조는 순차구조이다. 위에서 아래로, 왼쪽에서 오른쪽으로 차례대로 실행이 된다. 이런 단순한 흐름을 여러 조건에 따라 제어하는 것을 제어구조라고 한다. 그리고 제어구조의 가장 기초는 '조건문'이다. 조건에 따라 행동을 결정하는 명령문을 말한다. 조건문의 대표 'if문'을 살펴보자.
조건식을 만드는 연산자
제어구조에서는 조건이 중요하다. 조건을 제대로 설정해 주어야만 의도한 대로 제대로 된 결과를 도출할 수 있다. 조건을 설정할 때는 연산자를 활용해 ‘참’ 또는 ‘거짓’으로 판별되는 조건식을 구성하게 된다.
1) 참/거짓
- 코드로 True를 입력하면 항상 참이다.
- 코드로 False를 입력하면 항상 거짓이다.
- 숫자로 1은 항상 참이다.
- 숫자로 0은 항상 거짓이다.
- (1이외의 자연수도 참으로 간주합니다.)
2) 비교 연산자
-크기를 비교하여 참 거짓을 판단한다.
- a > b : a가 b보다 클 때 참이다.
- a < b : a가 b보다 작을 때 참이다.
- a >= b : a가 b보다 크거나 같을 때 참이다. (부등호와 등호를 병기할 때 등호를 오른쪽에 쓴다.)
- a <= b : a가 b보다 작거나 같을 때 참이다.
- a == b : a와 b가 서로 같을 때 참이다. (등호를 한 개 사용할 때는 대입의 의미, 두 개 사용할 때는 비교의 의미를 갖는다.)
- a != b : a와 b가 서로 다를 때 참이다. (느낌표는 'not'의 의미를 갖는다.)
3) 논리 연산자.
- 조건A and 조건B : 조건A와 조건B가 모두 참일 때 조건 전체가 참이다.
- 조건A or 조건B : 조건A와 조건B 둘 중 하나라도 참이면 조건 전체가 참이다.
- not 조건A : 조건A가 참이면 거짓으로, 거짓이면 참으로 바꾼다.
if문의 세 가지 경우
if문의 사용은 크게 세 가지 경우로 나눌 수 있다.
- 단일 조건인 경우
- 조건이 두 개인 경우
- 조건이 세 개 이상인 경우
기본적인 명령어의 뼈대를 고려하여 효율적인 명령어를 작성할 수 있어야 한다.
1. 단일 조건인 경우(if)
1) 기본 형식
- 단일 조건인 경우 특정 조건을 만족할 때만 if문 내 명령어를 실행한다.
- 조건을 만족하지 않으면 if문 내 명령어를 건너뛴다.
2) 예시
왼쪽의 코드에서 if문의 조건은 '참'이다. 그래서 프로그램 실행 결과 '안녕! 파이썬'이 출력된다. 반면에, 오른쪽 코드에서 if문의 조건은 '거짓'이다. 따라서 4번 줄의 print문은 실행되지 않고 건너뛰게 된다. 만일 5번 줄 이후에 3번 줄의 if문과 관계없이 이어지는 명령어들이 있다면 이를 실행하게 된다.
2. 조건이 두 개인 경우(else)
1) 기본 형식
조건이 딱 두 개인 경우라면 각각의 조건이 참인지를 판단할 수도 있고, 하나의 조건이 참인 경우와 그렇지 않은 경우로 나누어서 생각해 볼 수 있다. 각각의 조건을 고려해 명령어를 작성해야 하는 전자보다, 하나의 조건만 고려하면 되는 후자가 더 효율적인 코드가 된다. 이때 조건이 거짓인 경우 실행할 명령어들은 'else'라는 키워드로 구분하여 나타내면 된다.
조건A가 참인 경우 4번 줄의 자리를 차지한 명령어들을 실행하고 5번과 6번 줄의 자리는 건너뛴다. 반대로 조건A가 거짓인 경우 4번 줄의 자리를 차지한 명령어들을 건너뛰고 5번 줄 이하의 명령어들을 실행하게 된다.
2) 예시
왼쪽과 같은 코드를 생각해보면, 3번 줄에서 조건이 참이기 때문에 4번 줄을 실행하여 '후라이드 치킨을 주문하였습니다.'라는 내용을 출력한다. 이후에 menu 변수가 '양념'인지를 확인할 필요는 없는데, 5번 줄에서 이를 또다시 확인함으로써 효율적이지 않은 논리적 구조를 가지게 된다. 반대의 경우도 마찬가지이다. menu에 '양념'이 들어있는 경우에도 3번 줄의 if문과 5번 줄의 if문은 둘 다 반드시 실행되어야 한다.
반면에, 오른쪽의 코드는 menu변수에 저장된 값을 한 번만 확인함으로써 둘 중 하나의 출력문만 실행하게 된다. 훨씬 효율적인 절차로 진행이 되는 것이다. 물론, 도출할 결과가 딱 두 개인 경우에 해당된다.
조건이 세 개 이상인 경우(elif)
조건이 세 가지인 경우는 어떨까. 마찬가지로 '조건A', '조건B', '조건C'를 상정하고 각각이 참인 경우에 대해 명령어를 작성할 수도 있지만, ⓐ조건A가 참인 경우, ⓑ조건B가 참인 경우, ⓒ조건A도 거짓이고 조건B도 거짓인 경우로 나눈다면 보다 효율적인 구조로 명령어를 작성할 수 있다. 조건이 네 가지, 다섯 가지, 그 이상인 경우도 마찬가지이다. 이런 경우 중간의 조건은 'elif'라는 키워드로 구분을 하게 된다.
1) 기본 형식
처음의 조건만 if로 작성하고 이후의 조건들은 elif로 구분한다. 마지막은 이전까지의 조건을 모두 만족하지 못한 경우로 구분하여 else명령어 이하에 작성한다.
2) 예시
위 코드에서 출력될 수 있는 결과는 5가지 중 하나이다. 후라이드인 경우, 양념인 경우, 간장인 경우, 뿌링클인 경우, 참기로한 경우이다. 명령어의 효율성을 생각하면 '오늘은 참기로 했습니다.'를 출력하는 경우 선행하는 네 개의 조건을 모두 확인하게 되어 비효율적일 수 있으나, '후라이드'인 경우는 첫 출력문을 실행한 이후 나머지 명령어는 모두 건너뛰어 실행하지 않기 때문에 선행하는 조건일수록 효율적인 명령어 실행구조를 갖는다고 할 수 있다. 그렇기 때문에 경우의 수가 많은데 각 조건이 서로 다른 빈도수를 갖는다면, 빈도수가 높은 경우의 조건을 앞선 조건으로 작성해 주는 것도 좋을 것이다.
'IT일반' 카테고리의 다른 글
파이썬 프로그래밍 - 제어구조(3), 반복문, for, range (0) | 2024.12.06 |
---|---|
파이썬 프로그래밍 - 제어구조(2), 조건문, if문 예제, 홀짝 판별기, 성적 판별기 (0) | 2024.12.05 |
파이썬 프로그래밍 - 코드 스타일, 코딩 규칙의 기초 (0) | 2024.12.03 |
키크론X한컴타자 이벤트 참여 (0) | 2024.11.24 |
파이썬 프로그래밍 - 입출력(4), 여러 값 입력받기 split, map (0) | 2024.10.24 |