프로그래밍에서 코드의 흐름을 제어하는 문법을 제어문이라고 합니다. 이번에는 제어문 중 하나인 조건문(if문)에 대해서 알아보겠습니다.
보통 조건문이라고 하면 거의 if문을 의미합니다. try 문법도 있지만 이 부분에서는 다루지 않겠습니다. if문은 참(True)과 거짓(False)에 따라서 프로그램의 흐름이 달라지는 문법입니다.
예를 들어 수학 성적이 60점이 넘으면 합격, 60점보다 낮으면 불합격이라고 할 때 철수의 수학 성적이 85점 이라면 철수는 합격이라고 할 수 있겠습니다.
즉, 식으로 표현하면 수학 성적 > 60 이렇게 표현할 수 있습니다. 수학 시간에 했던 부등호가 프로그래밍에서도 동일하게 사용합니다.
if문을 이해하기 위해서는 조건식에 대해서 이해해야 합니다.
조건식이라는 것은 조건에 만족을 하는지 물어보는 것입니다. 물음에 대한 답은 오직 True와 False로 대답합니다.
x = 75
print(x < 100)
위의 두 코드를 넣고 실행을 하면 x라는 변수에 있는 값이 100보다 작은지 물어보는 것입니다. 실제로 75가 더 작으니 True를 반환하여 출력 결과로 True가 보이게 됩니다.
여기서 True와 False도 자료형 중에 하나입니다. 이름은 boolean이라고 합니다.(또는 bool이라고도 합니다.)
여기서 부등호 <을 비교 연산자라고 합니다. 비교 연산자의 기호는 수학 시간에 했던 것과 살짝 다릅니다. 코드를 통해서 알아보겠습니다.
3 < 3 은 3이 3보다 큰 것인지 물어보는 것이라 False
3 <= 3 은 3이 3보다 크거나 같은지 물어보는 것이라 True
3 > 4 는 3이 4 큰 것인지 물어보는 것이라 False
3 >= 4 는 3이 4보다 크거나 같은지 물어보는 것이라 False
3 == 1 은 3과 1이 같은지 물어보는 것이라 False
3 == 3 은 3과 3이 같은지 물어보는 것이라 False
3 != 4 는 3과 4가 서로 다른지 물어보는 것이라 True
3 != 3 은 3과 3이 서로 다른지 물어보는 것이라 False
이 6개의 연산자를 가지고 비교 연산자라고 합니다. 부등호는 많이 익숙하실거라 생각합니다. ==이 기호는 정말로 왼쪽과 오른쪽이 똑같은지 물어보는 것입니다. 이전에도 글을 올렸었지만 x = 1이라는 것을 'x와 1이 같다' 라고 읽으면 안된다고 했습니다. x == 1이라는 표현이 'x와 1은 같다'를 의미합니다. != 연산자는 왼쪽과 오른쪽이 서로 다른지 물어보는 것입니다. 양쪽이 서로 다르면 True 같으면 False를 반환합니다.
우선 비교 연산자를 이용하여 간단하게 if문을 만들어보겠습니다. 다음의 코드를 보겠습니다.
if문을 사용하려면 다음의 형식을 따라야합니다.
if 조건식:
조건식이 True일 경우 실행할 코드
조건식을 우선 보면 True인지 False인지 판단해야합니다. a % 2 == 1은 11을 2로 나눈 나머지가 1과 같은지 물어보는 조건식입니다. 11을 2로 나누면 몫이 5 나머지가 1이므로 조건식의 결과는 True가 나옵니다. 그래서 조건식이 참일 경우에 실행하는 코드에 해당하는 print 함수가 실행되어 '홀수입니다.' 가 출력되었습니다.
조건문의 형식을 보면 if 조건식: 다음 줄은 4칸 띄어쓰기 되어있습니다. 이를 들여쓰기라고합니다. 들여쓰기를 할 때 권장 형식이 있는데 바로 4칸을 띄어쓰는 것입니다. 들여쓰기를 함으로써 소속을 구분할 수 있습니다.
위의 print("홀수입니다.")는 if라는 구문의 소속입니다. 즉, if의 조건식이 참이 되지 않으면 절때 실행할 수 없는 코드입니다. 소속을 구분하는 행위는 누가 언제 실행하는지 구별하는 것과 같습니다.
현재 코드에서 조건이 거짓이라면 무조건 짝수입니다. 홀수를 제외한 나머지 경우들을 처리하고 싶다면 다음과 같은 코드를 사용하면됩니다.
조건의 나머지를 처리하는 형식은 다음과 같습니다.
if 조건식:
조건식이 참일 경우 실행할 코드
else:
조건식이 거짓일 경우 실행할 코드
else는 나머지를 의미합니다. a를 2로 나눈 나머지가 1이 아니라면 전부 0입니다.
이번에는 여러가지 조건을 사용해보겠습니다. 대표적으로 성적을 분류하는 문제가 있는데 90~100점은 A등급, 80~89점은 B등급, 70~79점은 C등급, 60~69점은 D등급, 60점 미만은 F등급으로 분류하는 코드를 만들어보겠습니다.
조건식을 추가로 부여하기 위해서는 elif에 조건식을 적으면 됩니다. 여러 개의 조건을 따지기 위해서 각 조건이 서로 겹치지 않게 작성해야 올바르게 작성했다고 볼 수 있습니다. 조건이 약간은 이상한 두 개의 코드를 보겠습니다.
#코드 1#과 #코드 2#는 모두 실행 결과가 동일하고 두 코드가 원하는 결과 값은 90~100점은 A등급, 80~89점은 B등급, 70~79점은 C등급, 60~69점은 D등급, 60점 미만은 F등급으로 분류하는 것이 목적입니다. #코드 1#은 1부터 100까지 모든 숫자를 넣어보면 정상적으로 동작합니다. 그러나 조건이 겹치게 되었습니다. 90, 80, 70이 겹치게되어 이렇게 작성한다면 혼란이 올 수 있습니다.
다음은 #코드 2#를 보겠습니다. 이 역시 마찬가지로 1부터 100까지의 숫자를 넣게 되면 60점은 F등급 70점은 D등급 80점은 C등급 90점은 B등급을 볼 수 있습니다. 조건을 잘못 설정한 경우입니다.
아래의 코드를 하나 더 보겠습니다.
이 코드 역시 겹치는 부분이 많이 보여서 혼란이 올 것 같지만 그렇지가 않습니다. 이미 조건을 하나씩 거쳐서 올때 자연스럽게 아래에서 알아볼 논리 연산자인 and 조건이 만들어지게 되므로 전혀 이상한 코드가 아닙니다.
결론적으로 무엇이냐면 상황에 맞게 조건을 잘 설정해야한다는 것입니다. 조건식을 잘 세우는 방법은 다른 사람이 가르쳐줄 수 있는 영역이 아닙니다. 문장을 잘 이해하면 자연스럽게 조건도 세울 수 있습니다.
다음은 논리 연산자에 대해서 알아보겠습니다.
논리 연산자는 and, or, not으로 이루어져있습니다.
and : 양쪽 피연산자의 결과가 모두 True면 True를 반환
or : 양쪽 피연산자의 결과 중 한 개라도 True면 True를 반환
not : 피연산자의 결과값을 반전, True면 False를 반환 False면 True를 반환
위의 성적을 분류하는 조건식을 잘 보면 수학시간에 부등호를 배울 때와 형식이 굉장히 비슷합니다. 다른 언어에서는 저러한 형식을 지원하는 것을 경험해보지 못하여 없는 것으로 알고 있습니다. 위의 조건식을 논리 연산을 활용하여 만들어보겠습니다.
첫 번째 조건식은 and의 왼쪽은 거짓, 오른쪽은 참이기 때문에 전체 결과는 거짓으로 첫 번째 조건이 만족할 때 실행할 코드는 실행되지 않았고 이런식으로 쭉 내려가다 보면 세 번째 조건을 모두 만족하게 되어 C등급이 나오게 됩니다.
괄호를 사용한 이유는 and or not 연산자에도 사칙 연산처럼 우선순위가 존재하기 때문입니다. not 1순위 and 2순위 or 3순위 입니다만, 쓰다보면 이를 자연스럽게 알 수 있습니다.
이번에는 or 연산자를 사용해보겠습니다. 사용하기 전에 몇 가지 가정을 해보겠습니다. 수학과 국어 시험을 보는데 수학과 국어의 시험 성적이 모두 60점 이상이거나 수학과 국어시험의 합이 140점 이면 통과라고 가정해보겠습니다.
수학과 국어의 시험 성적이 모두 60점이 이상이라는 말은 한 과목이라도 60점 아래면 과락으로 떨어지는 것을 말합니다. 이를 구제하기 위해서 시험의 성적의 합이 140점이면 합격이라고 가정했을 때 이 조건식을 만들어보겠습니다.
국어 + 수학의 결과가 140이므로 과목의 총합이 140이상의 조건을 만족하여 수학 성적이 60점을 넘지 않아도 합격이 되었습니다.
'프로그래밍 > 파이썬 문법' 카테고리의 다른 글
호기심 파이썬(유용한 method 및 함수 활용 예시) (0) | 2022.04.21 |
---|---|
호기심 파이썬(제어문 중 반복문 : for문) (0) | 2022.04.18 |
호기심 파이썬(자료형 : 리스트) (0) | 2022.04.12 |
호기심 파이썬(input 함수와 자료형 변환) (0) | 2022.04.11 |
호기심 파이썬(자료형 : 문자열) (0) | 2022.04.10 |
댓글