본문 바로가기
프로그래밍/파이썬 문법

호기심 파이썬(제어문 중 조건문 : if문)

by 인성패밀리 2022. 4. 14.
반응형

프로그래밍에서 코드의 흐름을 제어하는 문법을 제어문이라고 합니다. 이번에는 제어문 중 하나인 조건문(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이라고도 합니다.)

 

여기서 부등호 <을 비교 연산자라고 합니다. 비교 연산자의 기호는 수학 시간에 했던 것과 살짝 다릅니다. 코드를 통해서 알아보겠습니다.

이 코드의 실행 결과는?
조건식의 결과는 무조건 True또는 False가 나온다.

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문을 만들어보겠습니다. 다음의 코드를 보겠습니다.

이 코드의 실행 결과는?
a에 10을 저장했다면 이 문장은 출력되지 않았을 겁니다.

if문을 사용하려면 다음의 형식을 따라야합니다.

if 조건식:

    조건식이 True일 경우 실행할 코드

 

조건식을 우선 보면 True인지 False인지 판단해야합니다. a % 2 == 1은 11을 2로 나눈 나머지가 1과 같은지 물어보는 조건식입니다. 11을 2로 나누면 몫이 5 나머지가 1이므로 조건식의 결과는 True가 나옵니다. 그래서 조건식이 참일 경우에 실행하는 코드에 해당하는 print 함수가 실행되어 '홀수입니다.' 가 출력되었습니다.

 

조건문의 형식을 보면 if 조건식: 다음 줄은 4칸 띄어쓰기 되어있습니다. 이를 들여쓰기라고합니다. 들여쓰기를 할 때 권장 형식이 있는데 바로 4칸을 띄어쓰는 것입니다. 들여쓰기를 함으로써 소속을 구분할 수 있습니다.

 

위의 print("홀수입니다.")는 if라는 구문의 소속입니다. 즉, if의 조건식이 참이 되지 않으면 절때 실행할 수 없는 코드입니다. 소속을 구분하는 행위는 누가 언제 실행하는지 구별하는 것과 같습니다.

 

현재 코드에서 조건이 거짓이라면 무조건 짝수입니다. 홀수를 제외한 나머지 경우들을 처리하고 싶다면 다음과 같은 코드를 사용하면됩니다.

이 코드의 결과는?
10은 짝수이므로 짝수가 나왔습니다.

조건의 나머지를 처리하는 형식은 다음과 같습니다.

if 조건식:

    조건식이 참일 경우 실행할 코드

else:

    조건식이 거짓일 경우 실행할 코드

 

else는 나머지를 의미합니다. a를 2로 나눈 나머지가 1이 아니라면 전부 0입니다. 

 

이번에는 여러가지 조건을 사용해보겠습니다. 대표적으로 성적을 분류하는 문제가 있는데 90~100점은 A등급, 80~89점은 B등급, 70~79점은 C등급, 60~69점은 D등급, 60점 미만은 F등급으로 분류하는 코드를 만들어보겠습니다.

이 코드의 실행 결과는?
점수가 75점 이므로 C등급입니다.

조건식을 추가로 부여하기 위해서는 elif에 조건식을 적으면 됩니다. 여러 개의 조건을 따지기 위해서 각 조건이 서로 겹치지 않게 작성해야 올바르게 작성했다고 볼 수 있습니다. 조건이 약간은 이상한 두 개의 코드를 보겠습니다.

#코드 1#
#코드 2#
두 개의 코드 모두 동일한 실행결과입니다.

#코드 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등급을 볼 수 있습니다. 조건을 잘못 설정한 경우입니다.

 

아래의 코드를 하나 더 보겠습니다.

#코드 1#과 이 코드의 차이점을 보자

이 코드 역시 겹치는 부분이 많이 보여서 혼란이 올 것 같지만 그렇지가 않습니다. 이미 조건을 하나씩 거쳐서 올때 자연스럽게 아래에서 알아볼 논리 연산자인 and 조건이 만들어지게 되므로 전혀 이상한 코드가 아닙니다.

 

결론적으로 무엇이냐면 상황에 맞게 조건을 잘 설정해야한다는 것입니다. 조건식을 잘 세우는 방법은 다른 사람이 가르쳐줄 수 있는 영역이 아닙니다. 문장을 잘 이해하면 자연스럽게 조건도 세울 수 있습니다.

 

다음은 논리 연산자에 대해서 알아보겠습니다.

 

논리 연산자는 and, or, not으로 이루어져있습니다.

 

and : 양쪽 피연산자의 결과가 모두 True면 True를 반환

or : 양쪽 피연산자의 결과 중 한 개라도 True면 True를 반환

not : 피연산자의 결과값을 반전, True면 False를 반환 False면 True를 반환

 

위의 성적을 분류하는 조건식을 잘 보면 수학시간에 부등호를 배울 때와 형식이 굉장히 비슷합니다. 다른 언어에서는 저러한 형식을 지원하는 것을 경험해보지 못하여 없는 것으로 알고 있습니다. 위의 조건식을 논리 연산을 활용하여 만들어보겠습니다.

결과는 똑같이 C등급이 나오게 됩니다.

첫 번째 조건식은 and의 왼쪽은 거짓, 오른쪽은 참이기 때문에 전체 결과는 거짓으로 첫 번째 조건이 만족할 때 실행할 코드는 실행되지 않았고 이런식으로 쭉 내려가다 보면 세 번째 조건을 모두 만족하게 되어 C등급이 나오게 됩니다.

 

괄호를 사용한 이유는 and or not 연산자에도 사칙 연산처럼 우선순위가 존재하기 때문입니다. not 1순위 and 2순위 or 3순위 입니다만, 쓰다보면 이를 자연스럽게 알 수 있습니다.

 

이번에는 or 연산자를 사용해보겠습니다. 사용하기 전에 몇 가지 가정을 해보겠습니다. 수학과 국어 시험을 보는데 수학과 국어의 시험 성적이 모두 60점 이상이거나 수학과 국어시험의 합이 140점 이면 통과라고 가정해보겠습니다.

수학과 국어의 시험 성적이 모두 60점이 이상이라는 말은 한 과목이라도 60점 아래면 과락으로 떨어지는 것을 말합니다. 이를 구제하기 위해서 시험의 성적의 합이 140점이면 합격이라고 가정했을 때 이 조건식을 만들어보겠습니다.

이 코드의 실행 결과는?

국어 + 수학의 결과가 140이므로 과목의 총합이 140이상의 조건을 만족하여 수학 성적이 60점을 넘지 않아도 합격이 되었습니다. 

반응형

댓글