안녕하세요 여러분! 이번 시간부터는 파이썬의 제어문에 대해 살펴보려고 합니다!
if문과 for문, while문에 대해서 순차적으로 포스팅해보겠습니다!
이번 포스팅에서는 파이썬의 if문에 대해서 배워볼건데요!
if문을 시작하기에 앞서
파이썬의 3가지 기본 제어 구조에 대해서 말해보려고 합니다.
파이썬에서는 기본적으로 제어 구조만 이해해도 코딩을 해석할 수 있는 범위가 넓어지기 때문이죠!
그림을 보면서 이해해봅시다!
도로로 표현된 그림을 보니 이해가 쏙 되죠??
선택구조는 if문, 반복구조는 while, for문으로 구현되니까
이 구조들에 대한 개념을 확실히 하고 갑시다!
그럼 제어문 첫 시간으로서 본격적으로 if문에 대해서 알아볼게요!
앞서 말했듯이 이번에 다룰 if문은 선택 구조인데요, 그러면 선택 구조는 왜 필요할까요?
만약 선택 구조가 없다면 프로그램은 항상 동일한 동작만을 되풀이할 것입니다. 하지만 사회에서 벌어지는 많은 의사결정은 복잡하고 상황에 따라 변화 무쌍하죠.
이런 현상들을 프로그램으로 옮겨오려면 선택 구조는 필수적이라고 할 수 있습니다.
예를 들어 자율 주행 자동차 프로그램이 신호등이나 전방 장애물에 따라서 동작을 다르게 하지 않는다면{선택} 어떻게 될까요? 따라서 선택 구조는 꼭 필요한 구조라고 할 수 있습니다.
본격적으로 if문에 대해서 볼게요!
if-else문의 구조는 이렇습니다!
if문에서 ‘조건식’이란 참과 거짓을 판단하는 문장을 말하는데요
조건식을 쓰고는 꼭 “:” 이 콜론 기호를 찍어야 하며
조건에 영향을 받는 문장은 반드시 들여쓰기 해야 합니다.
만약에 “합격입니다.”라는 문장에 덧붙여
“수고하셨습니다”라는 문장까지 추가하여 출력하고 싶으면 어떻게 해야할까요?
이렇게 밑에 덧붙여주는데
주의할 점은 들여쓰기를 같은 크기로 해야 한다는 것입니다.
같은 크기로 들여쓰기가 되어 있으면 동일한 블록에 속합니다.
위의 예에서도 볼 수 있듯이 조건식에서는 조건이 참인지 거짓인지 판단할 때 비교 연산자를 많이 사용합니다. 우리 저번 포스팅에서 연산자가 무엇인지 배워보았죠?
위의 조건식에는 score>=60으로
‘>=’라는 연산자가 사용되었는데요
과연 이 비교 연산자의 뜻은 무엇일까요?
비교연산자(relational operator)는 두 개의 피연산자를 비교하는데 사용됩니다.
예를 들어 “변수 x가 변수 y보다 큰지”를 따지는데 사용되는 것이죠.
여러 가지 비교연산자를 표를 통해 알아봅시다!
같은지를 판단할 때는 == 연산자를 사용하죠? 우리에게는 =이 편한데 말이죠! =는 변수에 값을 할당할 때 썼기 때문에 그렇습니다!!
조건식을 작성하여 참과 거짓을 나누고자 할 때 이 비교연산자가 굉장히 많이 쓰이니
꼭 알아둡시다!
이런 관계 수식은 참이나 거짓이라는 값을 생성합니다. 그림을 통해 봅시다.
이렇게요! 비교 연산자를 사용해 두 수를 비교했더니 1(참) 또는 0(거짓)이라는 값이 나오네요!
조건식에 비교 연산자만 쓸 수 있냐구요? 아닙니다! 논리 연산자도 사용 가능한데요!
논리 연산자는 조건을 판단하기 위해 사용하는 다른 연산자입니다.
논리 연산자(logical operator)는 여러 개의 조건을 조합하여 참인지 거짓인지를 따질 때 사용하죠!
연산자 |
설명 |
x or y |
x와 y 둘 중에 하나만 참이면 참이다 |
x and y |
x와 y 모두 참이어야 참이다 |
not x |
x가 거짓이면 참이다 |
예시를 통해 확인해볼까요?
나이가 10살이 넘고 키가 130cm가 넘어야 어떤 놀이기구를 탈 수 있다고 가정해봅시다.
if 조건문의 조건식에 나이가 10살이 넘는다는 조건과 키가 130cm가 넘어야 한다는 조건을 둘 다 쓰고 싶은데 비교 연산자만으로는 다 표현할 수가 없잖아요?
이럴 때 이 논리 연산자들을 사용하는 겁니다.
and라는 논리 연산자를 사용하면
이 조건식을 잘 구현할 수가 있겠죠?
혹시 else문을 생략할 수 있을까요? 할 수 있습니다!
앞의 예제에서 else문을 없애볼게요
만약 age라는 변수에 8을 넣는다면
이 조건식을 충족하지 못해서
“탑승 가능합니다.”라는 문장이 출력되지 않겠죠??
앞선 예에서는 else에 “탑승 조건에 맞지 않습니다.”라는 문장을 출력하는 조건이 있어서
age가 8이면 “탑승 조건에 맞지 않습니다.”라는 문장이 출력됐었습니다.
그런데 이런 문장이 딱히 필요하지 않다면 그냥 else문을 생략해주셔도 됩니다.
그럴 때 결과는 어떻게 될까요?
밑에 조건식을 충족해서 “탑승 가능합니다.”라는 문장이 출력되는 예시와 반대로
조건식을 충족하지 못하면 그냥 그 조건식을 나와버리게 됩니다.
이렇게 else문을 생략할 수가 있답니다!
혹은 조건문에서 아무 일도 하지 않게 설정하고 싶다면 어떻게 해야 할까요?
가끔 조건문의 참, 거짓에 따라 실행할 행동을 정의할 때, 아무런 일도 하지 않도록 설정하고 싶을 때가 있을 수 있습니다.
예를 들어 if 옆에 있는 조건문을 만족시켰을 때 그냥 아무런 일도 하지 않게 하고 싶은 경우 말이죠!
실생활의 예를 들어보면 어떤 경우가 있을까요? 예를 들어 10000원 이상이 있으면 그냥 아무것도 하지 말고 그게 아니면 돈을 빌려라! 이런 상황을 생각해보죠
10000원 이상이 있는 경우 아무것도 실행시키고 싶지 않은 거 잖아요?
그럴 때는 pass를 써주면 됩니다.
이렇게요!
만약 money에 할당된 값이 10000이 넘는다면 아무 것도 일어나지 않고 조건문을 빠져나가게 됩니다!
이 if문을 우리 저번 포스팅에서 봤던 나머지 연산자로 짝수, 홀수를 판단하는 프로그램에 적용해보죠!
키보드에서 입력 받은 정수가 짝수인지 홀수인지를 알려주는 프로그램을 작성해봅시다!
실행해볼까요??
if문을 사용하니 깔끔하게 짝,홀수를 판별하는 프로그램을 만들 수가 있네요!
다양한 조건을 판단하는 elif
이렇게 if-else문에 대해 배웠는데 사실 우리의 삶과 경영환경은 단순히 if-else 하나의 조건문만으로는
해결할 수 없는 다양한 상황이 많습니다.
즉, 우리는 상황에 따라서 다중으로 분기되는 결정을 내려야 하는 경우가 있는데 그 때 쓰는 것이 elif입니다.
다중으로 분기되는 결정을 그림으로 이해해보죠!
이 경우 if와 else만으로는 코드를 구현하기 불가능하겠죠?
또는 이런 경우도 있습니다.
“학생들의 성적을 받아서 학점을 출력하는 프로그램으로 작성하여 실행하여 보자. 성적이 90점 이상이면 A학점, 80점 이상이고 90점 미만이면 B학점, 70점 이상이고 80점 미만이면 C학점과 같이 결정하는 것이다.”
if와 else만으로 이 프로그램을 구현할 수 있나요? 못합니다!
이 상황도 그림으로 이해해봅시다.
이렇듯 다중으로 분기될 수 있는 상황들은 if-else문 만으로는 구현 불가하며
이때 사용하는 것이 바로 elif입니다.
elif는 이전 조건문이 거짓일 때 수행되며 개수에 제한이 없습니다.
위의 두 상황을 elif를 사용하여 구현해보도록 하겠습니다.
먼저 첫번째 상황, 양수, 0, 음수를 구분하는 프로그램은
이렇게 짜볼 수가 있겠죠!
일단 음수부터 구분 짓고
음수가 아니면서 0인 것을 0으로 구분 짓고
음수가 아니면서 0이 아닌 것을 양수로 구분 짓네요!
두번째 성적을 매기는 상황을 구현해보도록 하겠습니다.
이렇게 할 수가 있습니다!
90점 이상은 A, 90점 이상은 아니지만 80점 이상은 B, 80점 이상은 아니지만 70점 이상은 C, 70점 이상은 아니지만 60점 이상은 D, 60점 이상도 아닌 경우는 F로 분류했습니다.
마지막으로 if, elif, else문을 응용한 프로그램을 하나 더 소개하고 마무리하겠습니다.
여러분들도 내용을 숙지하신 후 스스로 풀어보세요!
1년의 각 달의 일수를 출력하는 프로그램을 작성해봅시다!
즉, 이 프로그램은 특정 달이 입력되면 그 달의 일수를 출력합니다.
여러 가지 방법으로 작성할 수 있겠지만 이번에는 우리가 배운 if문을 활용해봅시다.
제가 짠 코드는
이렇습니다! 여러분도 직접 연습해보세요!!
이렇게 해서 오늘은 if문에 대해서 공부해봤습니다!!
'Data analysis story' 카테고리의 다른 글
[R프로그래밍] Factor(팩터) (0) | 2020.04.10 |
---|---|
[Python] 반복문 for문(range 함수, 응용한 여러 프로그램 예시) (0) | 2020.04.10 |
[Python] 파이썬의 연산자, 산술 연산자, 연산자 우선순위, 복합 연산자 (2) | 2020.04.10 |
[Python] 내장함수-print, input, int, float, str, abs, round, pow 함수 (0) | 2020.04.10 |
[Python] 파이썬의 변수, 상수 (1) | 2020.04.09 |