프로그램은 항상 동일한 순서로만 실행되지 않으며, 상황에 따라 다른 명령을 실행해야 할 때가 많다. 이번 장에서는 참(True)과 거짓(False)을 판별하는 논리식을 작성하는 방법과, 그 결과에 따라 프로그램의 실행 흐름을 제어하는 if 조건문에 대해 알아본다.
4.1논리식¶
논리식은 부울값, 즉 True 또는 False로 계산되는 표현식이다.
if 조건문, while 반복문 등 프로그램의 실행 흐름을 제어하는 명령문을
작성할 때 핵심적인 역할을 한다.
파이썬에서 논리식을 구성하는 주요 연산자는 다음과 같다.
비교 연산자:
==,!=,<,>,<=,>=멤버십 연산자:
in,not in논리 연산자:
and,or,not
4.1.1기본 논리식¶
가장 단순한 논리식은 비교 연산자 또는 멤버십 연산자를 한 번 이용한 표현식이다.
3 * 2 < 17 - 9True17 - 9 >= 3 * 7False3 + 2 == 3 * 2False5 != 4 + 1False3 in [1, 2, 3, 4, 5]True'py' not in 'python'False보다 복잡한 구조의 복합 논리식은 기본 논리식과 논리 연산자의 조합으로 생성된다.
4.1.2논리 연산자¶
영어의 and, or, not 의 개념과 유사하게 작동하는 세 개의 논리 연산자를 이용하여 보다 복잡한 논리식을 구현할 수 있다.
| 논리 연산자 | 의미 | 예시 | 실행 결과 |
|---|---|---|---|
and | 그리고 | 1==2 and 3==2+1 | False |
or | 또는 | 1==2 and 3==2+1 | True |
not | 부정 | not 1==2 | True |
논리 연산자 우선 순위
not, and, or 순으로 우순순위가 높다.
예를 들어 not a > b and b > c는
(not a > b) and b > c와 동일한 값을 표현하는 반면에,
not (a > b and b > c)와는 서로 다른 값을 표현한다.
a = -23
b = -7
c = 1
print(not a > b and b > c)
print((not a > b) and b > c)
print(not (a > b and b > c))False
False
True
이런 이유로 논리 연산자를 사용하는 경우 일반적으로 적절한 괄호 활용이 권장된다.
주의사항
and 와 or 두 연산자는 영어 단어 and 와 or 와는 조금 다르게 작동한다.
예를 들어, 아래 코드를 실행하면
3/0 으로 인해 ZeroDivisionError 오류가 발생할 것으로 기대되지만 그렇지 않다.
(1 > 2) and (3/0 == None)False이유는
x and y는 x가 거짓이면 바로 False로 계산되기 때문이다.
즉 3/0이 나타내는 값을 아예 확인하지 않는다.
반면에 아래 코드는 3/0과 None 동치 여부를 판단하기 위해
3/0이 먼저 실행되어 오류를 발생시킨다.
(3/0 == None) and (1 > 2)---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Cell In[9], line 1
----> 1 (3/0 == None) and (1 > 2)
ZeroDivisionError: division by zero아래 코드는 or 연산자도 영어 단어 or와 조금 다르게 작동함을 보여준다.
이유는 x or y는 x가 참이면 y를 확인하지 않고 바로 True로 계산되기 때문이다.
즉, 3/0이 어떤 값을 나타내는지 아예 확인하지 않는다.
(1 <= 2) or (3/0 == None)True반면에 아래 코드를 실행하면 앞서 설명한 이유와 동일한 이유로 오류가 발생한다.
(3/0 == None) or (1 <= 2)---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Cell In[11], line 1
----> 1 (3/0 == None) or (1 <= 2)
ZeroDivisionError: division by zero4.1.3예제¶
(1) x = 10일 때, 아래 논리식의 결과에 대한 예측 근거를 설명하라.
x > 7x == 5x != 10
답:
TrueFalseFalse
설명:
10 > 7은 참이므로True이다.10 == 5는 거짓이므로False이다.x가 10이므로x != 10은 거짓, 즉False이다.
(2) a = 3, b = 8일 때, 아래 논리식의 결과를 예측하라.
a < 5 and b > 10a < 5 or b > 10not (a < 5)
답:
FalseTrueFalse
설명:
a < 5는 참,b > 10은 거짓이므로and결과는False이다.a < 5가 이미 참이므로or결과는True이다.a < 5가 참이고not은 참/거짓을 뒤집으므로False이다.
(3) 아래 코드가 실행중에 오류를 발생시키는 이유를 설명하라.
False or (3/0 == None)---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Cell In[14], line 1
----> 1 False or (3/0 == None)
ZeroDivisionError: division by zero답:
먼저 오류가 어디서 왜 발생했는가에 대한 정보를 확인한다. 오류 정보의 맨 마지막 줄에 있는 아래 정보는 0으로 나눗셈을 시도했음을 알려준다.
ZeroDivisionError: division by zeroFalse or (3/0 == None)은 우선 논리 연산자 or를 사용한다.
그리고 or 연산자를 사용하는 논리식의 참/거짓 여부를 계산하기 위해
먼저 첫째 인자의 참/거짓 여부를 확인한다.
그런데 첫째 인자인 False는 (항상) 거짓이다.
따라서 둘째 인자인 (3/0 == None)의 참/거짓 여부를 확인한다.
그리고 여기서 3을 0으로 나눈 결과를 확인하려할 때 문제가 발생한다.
0을 이용한 나눗셈은 허용되지 않기에 오류가 발생한다.
(4) 네 개의 변수가 다음과 같이 정의된다.
a = -2
b = -7
c = 1
d = 0아래 두 논리식이 서로 다른 값을 갖는 이유를 설명하라.
a > b or b > c and c < dTrue(a > b or b > c) and c < dFalse답:
a = -2, b = -7, c = 1, d = 0일 때:
a > b or b > c and c < d는and가 먼저 계산되므로a > b or (b > c and c < d)가 된다. 여기서a > b가True이므로 전체는True이다.(a > b or b > c) and c < d는 괄호를 먼저 계산하므로(True or False) and False = True and False = False이다.
즉, 연산자 우선순위(and가 or보다 먼저)와 괄호 위치 때문에 결과가 달라진다.
(5) 아래 두 논리식이 거짓이라고 가정하자.
a >= b and a >= cb >= a and b >= c
a < c가 참이다.
이유는 다음과 같다.
첫째 논리식이 거짓이기에
a < b가 참이거나a < c가 참이어야 한다.a < b가 참이라고 가정하자. 둘째 논리식이 거짓이기 때문에b < c가 참이어야 하며, 따라서a < c가 참이다.a < c가 참이면 결론이 바로 성립한다.
어떤 경우에도
a < c가 참이 된다.
동일한 논증을 이용하여 b < c도 참임을 설명하라.
답:
둘째 논리식이 거짓이기에
b < a가 참이거나b < c가 참이어야 한다.b < a가 참이라고 가정하자. 첫째 논리식이 거짓이기 때문에a < c가 참이어야 하며, 따라서b < c가 참이다.b < c가 참이면 결론이 바로 성립한다.
어떤 경우에도
b < c가 참이 된다.
4.1.4연습문제¶
(1) x = -3일 때 아래 논리식의 결과를 예측하라.
x < 0x == 0x != -3
(2) a = 6, b = 9일 때 아래 논리식의 결과를 예측하라.
a < 10 and b < 5a < 10 or b < 5not (b >= 9)
(3) 아래 식이 오류를 발생시키는지 판단하고 이유를 설명하라.
True or (5/0 > 1)True and (5/0 > 1)False or (5/0 > 1)False and (5/0 > 1)
(4) p = 2, q = -1, r = 0일 때 아래 두 논리식의 값을 각각 구하고, 서로 다른 값이 나오는 이유를 설명하라.
p > q or q > r and p < r(p > q or q > r) and p < r
(5) 아래 두 논리식이 거짓이라고 가정하자.
a <= b and a <= cb <= a and b <= c
a > c가 참이다.
이유는 다음과 같다.
첫째 논리식이 거짓이기에
a > b가 참이거나a > c가 참이어야 한다.a > b가 참이라고 가정하자. 둘째 논리식이 거짓이기 때문에b > c가 참이어야 하며, 따라서a > c가 참이다.a > c가 참이면 결론이 바로 성립한다.
어떤 경우에도
a > c가 참이 된다.
동일한 논증을 이용하여 b > c도 참임을 설명하라.
4.2조건문¶
컴퓨터 프로그램은 값을 저장하고 조작하여 새로운 값을 계산하여 활용하는 방법을 묘사한다. 이때 주어진 값에 따라 따라 다른 방법으로 일을 하도록 명령할 수 있다.
4.2.1if ... 명령문¶
예를 들어 아래 코드는 파이썬을 좋아하는 경우에만 '안녕!'과 ‘파이썬 좋아요.’ 두 문자열이 출력되도록 한다.
love_python = True
if love_python:
print("안녕!")
print("파이썬 좋아요.")안녕!
파이썬 좋아요.
if love_python은 love_python이 참인지 여부를 확인하도록 하는 명령문이다.
그런데 1번 줄에서 love_python = True라고 작성되어 있기에
love_python이 참으로 확인되고,
따라서 들여쓰기된 print("안녕!")와 print('파이썬 좋아요.') 두 명령문이 차례대로 실행된다.
반면에 아래 코드를 실행하면 아무 것도 출력되지 않는다.
이유는 1번 줄에서 love_python이 거짓으로 확인되어 들여쓰기된 코드 블록이 실행되지 않기 때문이다.
love_python = False
if love_python:
print("안녕!")
print("파이썬 좋아요.")4.2.2if ... else ... 명령문¶
위 코드의 if lov_python 조건문에서 love_python이 거짓이어서 들여쓰기된 코드 블록이 실행되지 않았다.
그런데 그런 경우, 즉 if 다음이 거짓으로 판정될 때 실행되는 다른 코드 블록을 else 키워드를 이용하여 지정할 수 있다.
예를 들어 아래 코드는 파이썬을 좋아하지 않는 경우에 파이썬을 사랑해주면 행복진다는 문장을 출력한다.
love_python = False
if love_python:
print("안녕!")
print("파이썬 좋아요.")
else:
print("파이썬을 사랑해주세요!")
print("그러면 행복해집니다.")파이썬을 사랑해주세요!
그러면 행복해집니다.
else 키워드 또한 콜론 기호 :로 끝나고 줄바꿈 후에 들여쓰기로 코드 블록을 지정함에 주의한다.
4.2.3if ... elif ... else ... 명령문¶
참, 거짓 여부를 판단해야 하는 경우가 세 개 이상일 때 조건문에 elif 키워드를 추가로 사용한다.
elif 키워드는 영어의 'else if’의 줄임말이며, 원하는 만큼 많이 사용할 수 있다.
예를 들어 아래 코드는 x와 y의 크기 비교를 위해 작을 때, 클 때, 같을 때 세 가지 경우로 판단한다.
x = -2
y = 3
if x < y:
print('x가 y보다 작다')
elif x > y:
print('x가 y보다 크다')
else:
print('x와 y가 같다')x가 y보다 작다
if와 elif 문에 사용된 조건은 위에서부터 차례대로 확인되어 가장 먼저
참이되는 경우의 명령문이 실행되고 나머지 경우는 무시된다.
예를 들어 위 코드의 조건문은 다음 세 경우를 위에서부터 차례대로 처리한다.
x < y가 참인 경우x < y가 거짓이면서x > y가 참인 경우x < y와x > y모두 거짓인 경우, 즉x == y가 참인 경우
이처럼 if ... elif ... else ... 에 사용된 논리식은 항상 이전의 논리식이 거짓임을 가정한다.
아래 코드는 y를 5로 나눈 나머지에 의존하여 서로 다른 명령문을 실행하도록 한다.
y = 4
x = y % 5
if x == 0:
print('나머지가 0')
elif x == 1:
print('나머지가 1')
elif x == 2:
print('나머지가 2')
else:
print('기타 등등')기타 등등
else와 elif는 용도가 다르다.
else를 사용하지 않으면서 위 코드와 동일한 결과를 내려면 다음과 같이 작성해야 한다.
y = 4
x = y % 5
if x == 0:
print('나머지가 0')
elif x == 1:
print('나머지가 1')
elif x == 2:
print('나머지가 2')
elif x == 3:
print('기타 등등')
elif x == 4:
print('기타 등등')기타 등등
반면에 아래 코드는 동일한 결과를 내는 것처럼 보이지만 사실 기능이 다르다.
y=4일 때는 결과가 동일하다.
y = 4
x = y % 5
if x == 0:
print('나머지가 0')
elif x == 1:
print('나머지가 1')
elif x == 2:
print('나머지가 2')
print('기타 등등')기타 등등
하지만 예를 들어 y=2인 경우엔 결과가 다르다.
y = 2
x = y % 5
if x == 0:
print('나머지가 0')
elif x == 1:
print('나머지가 1')
elif x == 2:
print('나머지가 2')
print('기타 등등')나머지가 2
기타 등등
이유는 마지막 줄의 print('기타 등등')이 위쪽의 if 조건문과 상관없이 항상 실행되기 때문이다.
반면에 이전 코드에서는 else 또는 elif의 경우에 해당되는 경우에만 '기타 등등’이 출력되었다.
4.2.4중첩 조건문¶
사실 elif 키워드는 없어도 된다.
예를 들어 아래 코드는 주어진 두 값을 비교할 때
크거나, 작거나, 또는 같다의 세 경우를
다음과 같이 구분해서 처리한다.
if:x < y가 참인 경우 처리else:x < y가 거짓인 경우. 따라서x > y와x == y두 경우를 처리해야 함.if:x < y가 거짓이라는 전제 하에x > y가 참인 경우 처리else:x < y가 거짓이라는 전제 하에x == y가 참인 경우 처리
x = -2
y = 3
if x < y:
print('x가 y보다 작다')
else:
if x > y:
print('x가 y보다 크다')
else:
print('x와 y가 같다')x가 y보다 작다
그리고 많은 경우 논리 연산자를 활용하면 중첩 조건문을 굳이 사용하지 않아도 된다.
예를 들어 아래 코드는 중첩 조건문을 사용하여 x가 0보다 크면서 동시에 10보다 작은 경우를 다룬다.
x = 3
if 0 < x:
if x < 10:
print('x가 0보다 크고 동시에 10보다 작다.')x가 0보다 크고 동시에 10보다 작다.
print() 함수가 0 < x와 x < 10 두 조건을 모두 만족하는 경우에만
실행되기에 아래와 같이 and 연산자를 이용할 수 있다.
x = 3
if 0 < x and x < 10:
print('x가 0보다 크고 동시에 10보다 작다.')x가 0보다 크고 동시에 10보다 작다.
참고로 0 < x and x < 10 을 0 < x < 10로 표현할 수 있다.
x = 3
if 0 < x < 10:
print('x가 0보다 크고 동시에 10보다 작다.')x가 0보다 크고 동시에 10보다 작다.
4.2.5예제¶
(1) 변수 x에 정수 17을 할당했을 때
변수 x가 가리키는 값이 짝수면 0을,
홀수면 1을 출력하는 코드를 if ... else ... 조건문을 이용하여 작성하라.
답
x = 17
if x % 2 == 0:
print(0)
else:
print(1)1
(2) 변수 lang과 second_languages가 다음과 같이 정의된다.
lang='Python'
second_languages = ['C++', 'C#', '자바스크립트', 'Node.js']가. lang 변수가 가리키는 문자열이 second_languages가 가리키는
리스트에 포함되어 있지 않으면,
리스트의 오른편 끝에 추가된 리스트를 화면에 출력하는 코드를 작성한다.
단, not in과 리스트 이어붙이기 연산자를 활용한다.
답:
if ... 명령문을 이용한다.
이때 if 다음에 오는 진리값을 표현하는 식으로 리스트를 대상으로 항목이 아닌경우에
True로 계산되는 not in 연산자를 이용한다.
또한 리스트의 + 연산을 이용한다.
예제: 새로운 언어를 사용하는 경우
if lang not in second_languages:
print(second_languages + [lang])['C++', 'C#', '자바스크립트', 'Node.js', '파이썬']
나. 아래 코드의 실행 결과를 설명하라.
lang = 'Node.js'
if lang not in second_languages:
print(second_languages + [lang])답:
lang이 가리키는 문자열이 second_languages가 가리키는 리스트에 포함되지 않기에
if 조건문의 본문이 무시된다.
즉, print() 함수가 실행되지 않는다.
(3) 변수 세 개가 다음과 같이 주어진다.
a = 3
b = 7
c = 10가. a, b, c가 가리키는 정수 중에서 최댓값을 확인하는 코드를 작성하라.
답:
세 개의 수를 비교해서 나머지 두 수보다 큰 값을 최댓값으로 정한다.
a가b와c모두 보다 같거나 큰 경우:a가 최댓값b가a와c모두 보다 같거나 큰 경우:b가 최댓값기타:
c가 최댓값
a = 3
b = 7
c = 10
if a >= b and a >= c:
print("최댓값:", a)
elif b >= a and b >= c:
print("최댓값:", b)
else:
print("최댓값:", c)나. 아래 코드에서처럼 마지막 else 명령문을 elif로 대체해도 되는 이유를 설명하라.
a = 3
b = 7
c = 10
if a >= b and a >= c:
print("최댓값:", a)
elif b >= a and b >= c:
print("최댓값:", b)
elif c > a and c > b:
print("최댓값:", c)최댓값: 10
답:
a >= b and a >= c과 b >= a and b >= c 모두 거짓인 경우 a, b 모두 c 보다 작다.
따라서 else의 의미가 c > a and c > b와 동일한 의미를 나타내기 때문이다.
(4) 윤년leap year은 1년이 366일 해를 말하며, 윤년과 평년 여부는 다음 세 가지 규칙으로 판단한다.
4의 배수인 경우 윤년,
하지만 100의 배수인 경우는 평년,
그래도 400의 배수인 경우는 무조건 윤년!
예를 들어 아래 연도는 모두 윤년이다.
1988, 2024: 4의 배수이면서 100의 배수 아님
2000: 100의 배수이지만 400의 배수임
반면에 아래 연도는 모두 윤년이 아니다.
1900: 4의 배수이지만 100의 배수임. 그리고 400의 배수 아님.
2026: 4의 배수 아님.
가. if ... elif ... else ... 명령문을 이용하여 연도가 주어졌을 때 윤년 여부를 판단하는 코드를 작성하라.
단, 아래 세 개의 논리식을 활용하지만 and, or, not 등의 논리 연산자는 절대로 사용하지 않아야 하며,
year 변수 정의를 제외한 다른 코드는 변하지 않아야 한다.
year % 400 == 0year % 100 == 0year % 4 == 0
답:
먼저 400의 배수는 100의 배수이고, 또 100의 배수는 4의 배수임에 주목한다. 이제 아래 3가지 경우를 차례대로 확인한다.
400의 배수는 무조건 윤년이기에 먼저 400의 배수 여부를 확인해서 참이면 윤년!
400의 배수가 아닌데, 100의 배수라면 평년!
400의 배수도, 100의 배수도 아닌데 4의 배수라면 평년!
나머지 경우, 즉 4의 배수도 아니라면 평년!
if ... elif ... elif ... else ... 명령문을 이용하여
앞서 언급한 경우를 정확하게 표현할 수 있다.
2024년: 윤년
year = 2024
if year % 400 == 0:
print("400의 배수이기에 윤년!")
elif year % 100 == 0:
print("400의 배수는 아니지만 100의 배수이기에 평년")
elif year % 4 == 0:
print("100의 배수가 아니면서 4의 배수이기에 윤년")
else:
print("4의 배수가 아니기에 평년")100의 배수가 아니면서 4의 배수이기에 윤년
1900년: 평년
year = 1900
if year % 400 == 0:
print("400의 배수이기에 윤년!")
elif year % 100 == 0:
print("400의 배수는 아니지만 100의 배수이기에 평년")
elif year % 4 == 0:
print("100의 배수가 아니면서 4의 배수이기에 윤년")
else:
print("4의 배수가 아니기에 평년")400의 배수는 아니지만 100의 배수이기에 평년
2000년: 윤년
year = 2000
if year % 400 == 0:
print("400의 배수이기에 윤년!")
elif year % 100 == 0:
print("400의 배수는 아니지만 100의 배수이기에 평년")
elif year % 4 == 0:
print("100의 배수가 아니면서 4의 배수이기에 윤년")
else:
print("4의 배수가 아니기에 평년")400의 배수이기에 윤년!
2026년: 평년
year = 2026
if year % 400 == 0:
print("400의 배수이기에 윤년!")
elif year % 100 == 0:
print("400의 배수는 아니지만 100의 배수이기에 평년")
elif year % 4 == 0:
print("100의 배수가 아니면서 4의 배수이기에 윤년")
else:
print("4의 배수가 아니기에 평년")4의 배수가 아니기에 평년
나. 아래 세 개의 논리식을 중첩 조건문에 활용하여 year가 주저였을 때 윤년 여부를 판정하는 3중 중첩 조건문 코드를 작성하라.
year % 400 == 0year % 100 == 0year % 4 == 0
단, elif 키워드는 사용하지 않으면서 if ... else ... 명령문만 중첩해서 사용해야 한다.
답:
year = 2026
if year % 400 == 0:
print("400의 배수이기에 윤년!")
else:
if year % 100 == 0:
print("400의 배수는 아니지만 100의 배수이기에 평년")
else:
if year % 4 == 0:
print("100의 배수가 아니면서 4의 배수이기에 윤년")
else:
print("4의 배수가 아니기에 평년")4의 배수가 아니기에 평년
설명:
이 코드는 elif 없이 if ... else를 중첩하여 윤년 여부를 판정합니다.
먼저
year % 400 == 0을 확인합니다. 참이면 무조건 윤년입니다.400의 배수가 아니면, 다음으로
year % 100 == 0을 확인합니다. 참이면 평년입니다.100의 배수도 아니면,
year % 4 == 0을 확인합니다. 참이면 윤년입니다.위 조건이 모두 거짓이면 4의 배수가 아니므로 평년입니다.
즉, 판정 규칙은 다음과 같습니다.
400의 배수→ 윤년,100의 배수(단 400의 배수 아님)→ 평년,4의 배수(단 100의 배수 아님)→ 윤년,그 외 → 평년.
다. 아래 세 개의 논리식과 함께 and, or, not 등의 논리 연산자를 활용하여
year 변수가 연도를 가리킬 때 윤년 여부를 판단하는 논리식을 활용하여 if ... else ... 명령문을 작성하라.
year % 400 == 0year % 100 == 0year % 4 == 0
단, elif 키워드와 중첩 조건문은 사용하지 않아야 한다.
답:
이전 코드에서 윤년으로 판단하는 경우가 두번 발생한다.
첫째:
year % 400 == 0가 참인 경우둘째:
year % 100 == 0가 거짓이면서year % 4 == 0가 참인 경우
따라서 (year % 400 == 0) or (year % 100 != 0 and year % 4 == 0)이 year가 윤년일 때 참이된다.
윤년인 경우
year = 2000
is_leap = (year % 400 == 0) or (year % 100 != 0 and year % 4 == 0)
if is_leap:
print("윤년")
else:
print("평년")윤년
평년인 경우
year = 2026
is_leap = (year % 400 == 0) or (year % 100 != 0 and year % 4 == 0)
if is_leap:
print("윤년")
else:
print("평년")평년
4.2.6연습문제¶
(1) 변수 greetings가 다음과 같이 정의된다.
greetings = '파이썬, 안녕!'변수 char가 가리키는 문자열이 !또는 !!일 때,
greetings가 가리키는 문자열에 포함되어 있는 경우에는
‘파이썬 너무 좋아!!!’ 문장을 출력하고,
아니면 ‘파이썬을 부탁해^^’ 라는 문장을 출력하는 코드를 작성한다.
단, char 변수 이외에는 동일한 코드를 사용해야 한다.
힌트: if ... else ... 명령문과 in 연산자 활용
(2) 변수 세 개가 다음과 같이 주어진다.
a = 3
b = 7
c = 10가. a, b, c가 가리키는 정수 중에서 최솟값을 확인하는 코드를 작성하라.
나. 아래 코드에서처럼 마지막 else 명령문을 elif로 대체해도 되는 이유를 설명하라.
a = 3
b = 7
c = 10
if a <= b and a <= c:
print("최솟값:", a)
elif b <= a and b <= c:
print("최솟값:", b)
elif c < a and c < b:
print("최솟값:", c)최솟값: 3
(3) 세 막대이가 주어졌을 때 세 막대를 이용하여 삼각형을 만들 수 있는지 여부를 판단하는 코드를 작성하라. 단, 다음 조건을 만족해야 한다.
세 막대의 길이가 다음과 같다고 가정한다.
a = 11.3 b = 25.7 c = 18.8또는
a = 11.7 b = 32.9 c = 20.1삼각형을 만들 수 있으면
True, 아니면False를 반환한다.
단, a, b, c 세 변수의 정의를 제외한 다른 코드는 변하지 않아야 하며,
if ... else ... 명령문을 활용한다.
힌트: 막대 하나의 길이가 다른 두 막대의 길이의 합보다 작아야 삼각형을 만들 수 있다.
(4) 직사각형 모양의 바닥에 정사각형 모양의 타일을 깔 때 타일은 온장을 그대로 사용할 수도 있고, 잘라서 일부분만 사용할 수도 있다. 타일의 크기는 가로, 세로 모두 30cm이며, 잘라서 사용한 타일의 나머지는 버린다.
가로와 세로 각각 400cm, 500cm 인 바닥을 타일로 덮기 위해 필요한 온장 타일과 잘라서 사용한 타일의 개수의 합을 계산하는 코드를 구현하라.
width: 공간의 가로 크기. 단위는 cm.height: 공간의 세로 크기. 단위는 cm.tile_length=30: 타일의 한 변의 크기. 단위는 cm. 기본 키워드 인자는 30.
힌트: 중첩 조건문 활용