제어문 1
선택 제어문인 조건문과 비교 연산자, 논리 연산자를 배우는 글 입니다.
조건문 - if / elif / else
비교 연산자 - == / != / < / <= / > / >=
논리 연산자 - and / or / not
조건문
조건문은 주어진 조건에 따라 코드를 돌아가게 하는 명령문입니다.
목이 마르면 물을 마시고, 아니면 안마셔야지
분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
맥주병은 유리병에 버리고, 나머지는 일반쓰레기에 버려야지
위와 같은 문장들이 조건문에 해당합니다.
if / else
조건문에서 가장 기본이 되는 함수는 if입니다. 단어 그대로 만약이라는 뜻을 가지고 있습니다. else는 if에 나온 상황이 아닌 경우에 해당하는 함수입니다.
코딩을 할 때는 if 옆에 조건을 적어서 해당 조건에 충족하면 if문 안에 들어있는 코드를 돌아가게 하고, 해당 조건에 충족하지 못하면 else문 안에 있는 코드를 돌아가게 만들어줍니다.
위에 예시를 든 문장으로 코딩을 하자면
if 목이 마르다:
물을 마신다.
else:
물을 마시지 않는다.
이렇게 작성 할 수 있습니다.
elif
분리수거 예시를 if - else문 코드로만 표현한다면 어떻게 될까요?
item = 분리수거하는 물건
if item == 페트병:
플라스틱에 버림
else:
if item == 과자봉지:
비닐에 버림
else:
if item == 맥주병:
유리병에 버림
else:
일반쓰레기에 버림
이렇게 if - else문을 3개나 적어야 코드를 짤 수 있어서 손이 많이 갑니다.
그래서 필요한 것이 elif문 입니다. elif는 if와 같은 행동을 하지만 무조건 if 다음에만 올 수 있습니다.
위 코드를 elif를 사용하여 다시 짠다면 아래처럼 만들 수 있습니다.
item = 분리수거하는 물건
if item == 페트병:
플라스틱에 버림
elif item == 과자봉지:
비닐에 버림
elif item == 맥주병:
유리병에 버림
else:
일반쓰레기에 버림
그래서 만약 10가지 상황이 나온다면 1개의 if, 8개의 elif, 1개의 else를 이용해서 표현할 수 있겠습니다.
참고로 if - else문 말고도 if - elif문이 있습니다. if - elif문은 else가 없는 대신 elif로 코드를 짜는 것입니다. 이때 else문이 없으니 모든 조건에 충족하지 못하는 경우가 있다면 해당 케이스는 제어문을 그냥 통과할 것 입니다. 아니면 elif문을 else처럼 사용할 수도 있습니다.
분리수거 예제를 수정하여 코드를 짜봅시다.
분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
그리고 맥주병은 유리병에 버려야하고 나머지 쓰레기는 가만히 내비두자
이걸 코드로 짠다면
item = 분리수거하는 물건
if item == 페트병:
플라스틱에 버림
elif item == 과자봉지:
비닐에 버림
elif item == 맥주병:
유리병에 버림
item이 페트병, 과자 봉지, 맥주병이 아닌 경우엔 그대로 코드를 통과하게 됩니다.
이제 문제를 풀어봅시다.
문제가 간단합니다. N의 값이 주어지는데 N = 0일 때 연세대학교의 영문명을 출력하고, N = 1일 때 연세대학교의 슬로건을 출력하면 되는 문제입니다.
이 문제는 N이 0일 때와 0이 아닐 때로 나누어질 수 있으므로 if - else문으로 표현할 수 있습니다.
n = int(input())
if n == 0:
print('YONSEI')
else:
print('Leading the Way to the Future')
if - elif 문으로 표현하면 다음과 같습니다.
n = int(input())
if n == 0:
print('YONSEI')
elif n == 1:
print('Leading the Way to the Future')
또 다른 문제를 풀어봅시다.
A가 B보다 크면 >를 출력하고, A가 B보다 작으면 <를 출력하고, A와 B가 같으면 ==를 출력하라고 합니다.
총 3가지 상황이 나오기 때문에 1개의 if, 1개의 elif, 1개의 else를 이용하여 코드를 짤 수 있습니다.
A, B = map(int, input().split())
if A > B:
print('>')
elif A < B:
print('<')
else:
print('==')
혹은 elif 없이 if - else문으로만 만들고 싶으면 아래와 같이 코드를 짤 수도 있습니다.
A, B = map(int, input().split())
if A > B:
print('>')
else:
if A < B:
print('<')
else:
print('==')
풀어볼 문제
비교 연산자
비교 연산자는 2개 이상의 피연산자를 비교하여 불리언 값을 반하게 만드는 연산자 입니다.
정의만 보면 무슨 소리인지 모르겠지만, 우리는 이미 수학 문제를 풀 때 사용하고 있는 방법이라 거의 다 알고 있는 내용입니다.
비교 연산자는 총 6개가 있습니다.
비교 연산자
의미
x == y
x와 y의 값이 같다.
x != y
x와 y의 값이 다르다.
x > y
x의 값이 y의 값보다 크다.
x >= y
x의 값이 y의 값보다 크거나 같다.
x < y
x의 값이 y의 값보다 작다.
x <= y
x의 값이 y의 값보다 작거나 같다.
위의 표에서 ==, !=, >, >=, <, <=이 비교 연산자이고 x와 y를 피연산자라고 합니다.
불리언 값은 True, False로 2가지가 있습니다. 해당 식이 참이면 True, 거짓이면 False를 반환하는 것입니다. 이 식들은 불리언 값을 도출해내므로 불리언 식이라고 부르고 있습니다.
print(1 > 2)
print(3 + 4 == 5 + 2)
print(1 % 2 < 1 // 2)
이렇게 피연산자 2개와 비교 연산자를 사용하여 출력을 하면 아래와 같이 출력되는 것을 확인할 수 있습니다.
False
True
False
피연산자를 3개 이상,와 비교 연산자 2개 이상를 사용하여 만들 수도 있습니다.
print(1000 > 100 > 10) # True
print(1000 > 100 < 10) # False
print(10 >= 9 >= 8 >= 7 >= 6 >= 5 >= 4 >= 3 >= 2 >= 1) #True
그리고 당연하지만 if - else문에서 if문에 있는 불리언 식이 True일 때 if문 안의 코드가 돌아가고, False인 경우에는 else문의 코드가 들어갑니다. elif도 같습니다. elif에 있는 불리언 식이 True일 때만 elif 안에 있는 코드가 돌아갑니다. 이 부분은 지금 글에 나와있는 코드들을 보면 알 수 있습니다.
#x와 y가 1일 때 YES를 출력하고, 아니면 NO를 출력하기
x, y = map(int, input().split())
if x == y == 1: #만약 x = 1, y = 1이라면 x == y == 1은 True이기 때문에 YES를 출력함
print('YES')
else:
pirnt('NO')
참고로 False를 숫자로 표시하면 0이고, True는 0이 아닌 모든 숫자로 표현할 수 있습니다. 하지만 컴퓨터는 0과 1만 표현할 수 있기에 True를 int형으로 출력해보면 1을 출력하는 것을 알 수 있습니다.
print(int(True))
print(int(False))
이제 본격적으로 조건문과 비교 연산자를 사용하여 문제를 풀어봅시다.
정수 A, B, C를 입력 받고, 곱셈 기호와 나눗셈 기호를 각각 한 번씩 사용하여 가장 큰 값을 출력하라고 합니다. 이때 소수점은 버리라고 나와있으므로 출력할 때 int(변수)를 사용해서 출력해야 합니다.
A B C 숫자 사이에 곱셈 기호와 나눗셈 기호를 한 번만 사용하여 만들 수 있는 공식의 수는 2개 입니다.
A * B // C
A // B * C
이것은 elif 없이 if - else문으로 만들 수 있습니다.
A, B, C = map(int, input().split())
x = A * B / C
y = A / B * C
if x >= y:
print(int(x))
else:
print(int(y))
또 다른 문제를 풀어봅시다.
날짜를 뜻하는 두 개의 정수를 입력 받는데 날짜가 2월 18일 전이면 Before를 출력하고, 2월 18일 이후면 After, 2월 18일이면 Special을 출력하는 문제입니다.
코드를 짜기 전에 일단 1월 일 때, 2월 18일 이전일 때, 2월 18일인 경우, 2월 18일 이후일 때, 3월 이상일 때로 총 5가지로 나눌 수 있습니다.
코드를 짤 때는 1월 일 때, 2월 일 때, 3월 이상일 때로 if - elif - else문을 짤 수 있고, 2월 일 때 18일 이전, 18일 인 경우, 18일 이후로 elif문 안에 if - elif - else문을 작성해야 합니다.
x = int(input())
y = int(input())
if x == 1:
print('Before')
elif x == 2:
if y < 18:
print('Before')
elif y == 18:
print('Special')
else:
print('After')
else:
print('After')
풀어볼 문제
논리 연산자
논리 연산자는 비교 연산자와 비슷하게 2개 이상의 불리언 식을 비교하여 불리언 값을 반하게 만드는 연산자 입니다.
논리 연산자
의
and
그리
or
또는
not
부정
and는 '그리고'라는 의미를 지니고 있으므로 A and B가 있으면 A와 B가 둘 다 True여야 True가 나오게 됩니다. 둘 중 하나라도 False가 되면 False가 나옵니다. 둘 다 False여도 False가 나옵니다.
or는 '또는'이라는 의미를 지니고 있으므로 A or B가 있으면 A와 B 둘 중 하나라도 True라면 True가 나오게 됩니다. 둘 다 False이면 False가 나옵니다.
not은 부정이라는 의미를 지니고 있으므로 not A가 있으면 A가 True일 때 False를 반환하고, A가 False일 때 True를 반환합니다.
불리언 식
결과
True and True
True
True and False
False
False and True
False
False and False
False
불리언
결
True or True
True
True or False
True
False or True
True
False or False
False
불리언
결
not True
False
not False
True
이제 조건문, 비교 연산자, 논리 연산자를 모두 활용하는 문제들을 풀어봅시다.
세 줄에 걸쳐서 삼각형의 각의 크기가 주어지는데 조건에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력하라고 합니다.
먼저 세 각의 합이 180일 때와 180이 아닐 때로 나눌 수 있고, 세 각의 합이 180일 때는 세 각이 전부 60일 때와 두 각이 같은 경우와 하나도 같지 않은 경우로 나눠서 풀 수 있습니다. 이때 두 각이 같은 경우와 하나도 같지 않은 경우에는 논리 연산자를 이용할 수 있습니다.
먼저 세 각의 합이 180일 때와 180이 아닐 때만을 if - else문으로 짠다면 아래와 같습니다.
x = int(input())
y = int(input())
z = int(input())
if x + y + z == 180:
blah blah
else:
print("error")
그다음 blah blah 부분에 각이 전부 같은 경우, 각이 2개만 같은 경우, 각이 서로 다른 경우를 나눠서 풀면 됩니다.
z = int(input())
if x + y + z == 180:
if x == 60 and y == 60 and z == 60: # x == y == z == 60
print('Equilateral')
elif x == y or y == z or z == x:
print('Isosceles')
else:
print('Scalene')
else:
print("error")
풀어볼 문제들
Last updated
Was this helpful?