업데이트:

문제 63

63.
입력된 두 정수 a, b 중 큰 값을 출력하는 프로그램을 작성해보자.
단, 조건문을 사용하지 않고 3항 연산자 ‘and or’ 를 사용한다.

TIP

파이썬에서의 3항(세 개의 요소로 이루어지는) 연산자는 다른 언어와 사용 방식이 다소 다르다. 타 언어 : “조건식 ? (참일 때의 값) : (거짓일 때의 값)”

파이썬에서의 3항(ternary) 연산자는 “조건식 and (참일 때의 값) or (거짓일 때의 값)” 의 형태로 사용하는 연산자이다. 조건식의 계산 결과가 참인 경우에는 ‘and’ 오른쪽의 값 또는 식으로 바뀌고, 거짓인 경우에는 ‘or’ 오른쪽의 값 또는 식으로 바뀐다. 이것이 가능한 이유는 파이썬이 인터프리터 방식으로 동작하기 때문이다.

인터프리터 파이썬은 스크립트 언어이며, 스크립트 언어는 대부분 인터프리터 방식으로 동작한다. 인터프리터는 컴파일러와 대조되는 의미이기에 컴파일과 함께 설명이 필요하다.

컴파일은 소스 코드를 처음부터 끝까지 모두 기게어로 번역한 후에 실행 파일을 만들고, 그것을 컴퓨터가 실행하는 방식이기 때문에 실행속도가 비교적 빠르다. 인터프리트는 소스 코드를 처음부터 끝까지 전체 번역을 하는 것이 아니라, 실행되는 즉시 그 순간의 코드만을 기계어로 번역해 나아간다. 따라서 모든 소스 코드를 통으로 번역하는 컴파일에 비해 생산 속도는 빠르나, 모두 번역되기까지의 시간이 비교적 오래 걸리므로 실행 속도가 느린 것이다.

이러한 인터프리트(Interpret)를 실행하는 프로그램을 인터프리터라고 부르나, 실생활에서는 그다지 차이를 두고 얘기하진 않는다. by. 우리밋

풀이

a, b = map(int, input().split())
print(a > b and a or b)
# 파이썬은 실행되는 순간의 코드만을 기계어로 변역해 나가는 인터프리터 방식으로 동작한다.
# 첫번째 항에서 거짓(and 연산의 경우. or 연산의 경우는 참)이라 판단이 된 경우 두번째 항을 무시하게 되는 특성을 이용한 연산이다.

문제 64

64.
입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자. (단, 삼항 연산자 이용)

TIP

파이썬에서는 논리연산을 이용한 삼항 연산자 외에 if-else를 이용한 삼항 연산도 제공한다. 이러한 이유는 논리연산을 이용한 삼항연산 때 발생할 수 있는 오류가 있기 때문이다. 3항 논리 연산의 오류 : 5==5 and 5-5 or 5+5 » 10 위 연산에서는 5==5가 참이기 때문에 5-5가 실행되어 0이 출력되는 것이 맞다. 그러나 10이 출력된다. 이유는 논리 연산의 특성 때문이다. 위 구문을 크게 따져보면 (True and false) or true 로 표현할 수 있다. 따라서 앞의 (True and false)가 false가 되므로 or 오른쪽에 true 값인 10이 출력된 것이다. if-else를 이용한 삼항 연산은 “(참일 때의 값) if (조건식) else (거짓일 때의 값)”으로 나타낼 수 있다. 삼항 연산자는 중첩하여 이용할 수 있다.

풀이

a, b, c = map(int, input().split())
temp = a if a < b else b
print(temp if temp < c else c)

# and-or
# 참(0을 제외한 나머지)과 거짓(0)으로 연산을 하기 때문에
# 0과 1이 값으로 주어진 경우 결과가 다르게 나온다.
temp = a < b and a or b
print(temp < c and temp or c)

Bonus 문제

Bonus.
1개의 정수형 입력이 들어오면 삼항 연산을 이용하여 ‘홀수’와 ‘짝수’를 판별하여라

TIP

입력이 2로 나눠지면 짝수이고, 그렇지 않으면 홀수임을 이용한다. 파이썬에서의 논리연산인 AND와 OR의 특징을 이용한다. => 파이썬에서는 이러한 연산을 “삼항 연산”으로 정의한다.

입력이 2로 나눠지면 짝수이고, 그렇지 않으면 홀수임을 이용한다. 파이썬에서의 삼항 연산은 if-else로도 구현할 수 있다.

풀이

# 방법 1 : if-else
a = int(input())
print("홀수" if a % 2 else "짝수")

# 방법 2 : and-or
a = int(input())
print(a % 2 and "홀수" or "짝수")

Notice: 이 게시물은 우리밋_woorimIT님의 유튜브를 참고하였습니다.

댓글남기기