이 안내서는 파이썬에서 삼항 연산자를 활용하는 방법에 대한 상세한 설명을 제공합니다. 삼항 연산자의 문법을 살펴보고, 실제 코드 예시를 통해 작동 원리를 명확히 이해하도록 돕습니다.
먼저, if-else 조건문의 기본 작동 방식을 재검토한 후, 동일한 로직을 삼항 연산자를 사용하여 표현하는 방법을 학습합니다.
이어서, 다양한 코드 예제를 통해 삼항 연산자의 활용법을 익히고, 파이썬의 튜플과 사전을 이용하여 삼항 연산자의 기능을 모방하는 고급 기법을 소개합니다. 마지막으로, 삼항 연산자를 사용하는 것이 더욱 효율적인 몇 가지 상황을 분석하여 효과적인 활용법을 제시합니다.
자, 시작해 볼까요!
파이썬의 If-Else 구문: 복습
파이썬 REPL 환경이나 온라인 파이썬 편집기를 사용하여 코드를 작성하고 실행해볼 수 있습니다.
파이썬에서 if-else 문의 기본 형식은 다음과 같습니다:
if 조건: # 조건이 참일 때 실행할 코드 else: # 조건이 거짓일 때 실행할 코드
위 코드에서 ‘조건’은 평가될 논리식을 의미합니다. 조건이 ‘참’으로 판별되면 if 블록 안의 코드가 실행되고, ‘거짓’으로 판별되면 else 블록 안의 코드가 실행됩니다.
아래 예시는 에너지 값에 따라 ‘game_over’ 변수에 부울 값을 할당하는 방법을 보여줍니다. 에너지 값이 0 이하일 경우 ‘game_over’는 True로, 그렇지 않을 경우에는 False로 설정됩니다.
- 에너지 <= 0이면, game_over는 True가 됩니다.
- 그렇지 않으면, game_over는 False가 됩니다.
다음 코드 조각은 이러한 if-else 조건문을 실제로 구현한 예시입니다.
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
위 예시에서 에너지 값은 -1이며, 이는 0보다 작으므로 ‘game_over’ 변수는 True로 설정됩니다.
파이썬 삼항 연산자: 문법 및 실례
파이썬은 C나 C++과 같은 언어의 삼항 조건 연산자와 유사한 삼항 연산자를 제공합니다. 기본적인 사용 문법은 다음과 같습니다:
표현식1 if 조건 else 표현식2
이 구문을 자세히 살펴보겠습니다.
- 조건: 참/거짓을 판별할 논리식입니다.
- 표현식1: 조건이 참으로 평가될 경우 반환되는 값입니다.
- 표현식2: 조건이 거짓으로 평가될 경우 반환되는 값입니다.
위의 if-else 예제에서 ‘표현식1’, ‘표현식2’, 그리고 ‘조건’을 어떻게 적용해야 할지 알아보겠습니다.
삼항 연산자를 사용하여 앞선 코드를 다음과 같이 간결하게 표현할 수 있습니다:
game_over = True if energy <= 0 else False print(game_over) # True
또 다른 예를 들어보겠습니다. 서점을 운영하며, 고객의 지난 1년간 방문 횟수에 따라 구매 시 할인을 제공한다고 가정해 봅시다.
변수 ‘numVisits’는 고객의 방문 횟수를 나타냅니다.
- 만약 ‘numVisits’가 7보다 크면, 할인율 ‘discount_perc’는 20입니다.
- 그렇지 않으면, ‘discount_perc’는 5입니다.
삼항 연산자를 활용하여 ‘discount_perc’ 변수에 값을 할당해 보겠습니다.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (numVisits = 10, 이는 7보다 큼)
이제 파이썬 튜플과 사전을 사용하여 삼항 연산자를 흉내 내는 방법을 알아봅시다.
파이썬 튜플을 이용한 삼항 연산자 에뮬레이션
파이썬의 모든 이터러블 객체와 마찬가지로 튜플 역시 0부터 시작하는 인덱싱을 따릅니다. 따라서 튜플에 두 개의 요소가 있다면, ‘tuple_name[0]’은 튜플의 첫 번째 요소, ‘tuple_name[1]’은 두 번째 요소를 각각 가리킵니다.
파이썬의 기본 데이터 유형으로는 정수, 실수, 문자열 및 불리언 등이 있습니다. 또한 파이썬은 자료형 변환을 지원하여, 특정 데이터 유형을 다른 데이터 유형으로 변환할 수 있습니다.
파이썬 REPL에서 다음 예제를 실행해 봅시다. 정수를 불리언으로 변환하면 다음과 같은 결과를 확인할 수 있습니다.
- bool(0)은 False를 반환합니다.
- bool(0이 아닌 정수)는 True를 반환합니다.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
마찬가지로, 불리언을 정수로 변환하면 다음과 같은 결과가 나타납니다:
>>> int(True) 1 >>> int(False) 0
형 변환과 인덱싱을 조합하면 다음과 같은 동작을 구현할 수 있습니다:
- 튜플의 인덱스 0 요소: 조건이 False일 때 사용할 값.
- 튜플의 인덱스 1 요소: 조건이 True일 때 사용할 값.
위의 내용을 바탕으로 다음 예시를 살펴봅시다:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
여기서 ‘numVisits > 7’ 조건은 ‘numVisits’가 10이므로 True입니다. ‘int(True)’는 1이므로, ‘discount_perc’의 값은 인덱스 1의 요소인 20이 됩니다.
파이썬 사전을 이용한 삼항 연산자 에뮬레이션
True와 False를 사전의 키로 설정할 수 있습니다. 그리고 ‘표현식1’과 ‘표현식2’를 각각 True와 False 키에 해당하는 값으로 설정할 수 있습니다.
some_dict = {True: 표현식1, False: 표현식2 }
그 다음에는 무엇을 해야 할까요? ‘some_dict[조건]’을 사용하면 조건이 True일 경우 True 키에 해당하는 ‘표현식1’이, False일 경우 ‘표현식2’가 반환됩니다.
앞서 사용했던 ‘discount_perc’ 예제를 다시 코딩하되, 이번에는 파이썬 사전을 활용해 보겠습니다.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
여기서 ‘numVisits’는 10으로 7보다 큽니다. 따라서 ‘numVisits > 7’ 조건은 True입니다. 따라서 ‘discount_dict[numVisits > 7]’은 ‘discount_dict[True]’로 평가되어 값 20이 반환됩니다.
언제나 파이썬 삼항 연산자를 사용해야 할까요?
지금까지 삼항 연산자를 사용하는 방법을 배웠지만, 모든 상황에서 삼항 연산자를 사용하는 것이 최선일까요? 그렇지 않습니다. 삼항 연산자가 if-else 구문보다 더 적합한 경우와 반대로 if-else 구문을 고려해야 할 상황에 대해 자세히 알아보겠습니다.
if-else 블록보다 간결함
이미 언급했듯이 파이썬에서 삼항 연산자는 if-else 문보다 더 간결하게 코드를 작성할 수 있도록 도와줍니다. 조건을 확인하고 그에 따른 표현식을 즉시 평가해야 할 때 유용합니다.
다음 예제에서 ‘nums’는 임의로 생성된 100개의 정수 리스트입니다. 각 숫자가 홀수인지 짝수인지 확인하고, 그 결과를 f-string 내부에서 인라인으로 출력합니다.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# 출력 예시 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
삼항 연산자는 else 절을 반드시 요구합니다.
if-else 조건문을 사용할 때는 else 절이 선택 사항입니다. 예를 들어, 에너지 값이 0 이하로 떨어지면 ‘game_over’ 변수를 True로 설정하는 상황을 생각해 봅시다.
하지만 에너지 값이 0보다 크면 ‘game_over’ 변수는 초기화되지 않습니다. 따라서 ‘game_over’ 변수에 접근하려 하면 오류가 발생합니다.
energy = 5 if energy <= 0: game_over = True print(f"게임이 끝났나요? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"게임이 끝났나요? {game_over}") NameError: name 'game_over' is not defined
이 문제를 해결하는 한 가지 방법은 초기에 ‘game_over’를 False로 설정하고, 에너지 수준이 0 이하인 경우 True로 업데이트하는 것입니다.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"게임이 끝났나요? {game_over}")
그러나 위의 예시와 동일한 로직을 삼항 연산자를 사용하여 구현할 때는 else 절을 생략할 수 없습니다. 삼항 연산자는 조건이 False일 때도 반드시 표현식을 평가해야 합니다.
game_over = True if energy <= 0 else False
만약 else 부분을 생략하고 ‘game_over = True if energy <= 0’와 같이 코드를 작성하면 다음과 같이 구문 오류가 발생합니다.
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
여러 조건을 확인해야 할 때는 if-else 문을 사용하세요.
코딩 인터뷰에서 자주 등장하는 질문에는 난이도 점수가 할당되어 있다고 가정해 보겠습니다. 이 점수에 따라 각 질문의 난이도를 ‘쉬움’, ‘보통’, 또는 ‘어려움’ 중 하나로 분류할 수 있습니다. 예를 들어 다음과 같은 기준이 있다고 합시다:
점수 | 난이도 |
10 미만 | 쉬움 |
10 ~ 20 | 보통 |
20 이상 | 어려움 |
난이도 점수가 주어졌을 때 파이썬 삼항 연산자를 사용하여 난이도를 다음과 같이 얻을 수 있습니다.
score = 12 difficulty_level = "쉬움" if score < 10 else "어려움" if score > 20 else "보통" print(difficulty_level) # 보통
위 코드 블록의 삼항 연산자 표현식은 다음과 같은 형태를 가집니다:
표현식1 if 조건1 else 표현식2 if 조건2 else 표현식3
간결하지만 코드를 읽고 파악하기가 다소 어렵습니다. 다음 이미지는 이러한 상황에서 제어 흐름이 어떻게 진행되는지 보여줍니다.
다음 코드 조각은 동일한 로직을 if-else 문으로 구현한 예시입니다. 보시다시피 제어 흐름이 훨씬 이해하기 쉽고 코드를 더 쉽게 읽을 수 있습니다.
if score < 10: difficulty_level="쉬움" elif score > 20: difficulty_level="어려움" else: difficulty_level="보통" print(difficulty_level)
따라서 여러 조건을 확인해야 할 때는 삼항 연산자보다는 if-else 문을 사용하는 것이 좋습니다. 이렇게 하면 코드를 보다 쉽게 읽고 이해할 수 있습니다.
또한 조건의 참, 거짓 여부에 따라 여러 개의 코드를 실행해야 할 때도 if-else 문을 사용하는 것을 고려해야 합니다.
결론
이 튜토리얼에서 배운 내용을 요약하면 다음과 같습니다:
- 파이썬에서 삼항 연산자는 ‘표현식1 if 조건 else 표현식2’와 같은 형태로 사용할 수 있습니다.
- 파이썬 튜플과 사전을 사용하여 삼항 연산자의 동작을 모방할 수 있습니다.
- 삼항 연산자는 if-else 문을 대체하여 코드를 간결하게 만들 수 있지만, 코드의 가독성을 유지하는 것이 중요합니다. 특히 여러 조건을 연결해야 할 때는 삼항 연산자보다는 if-else 문을 사용하는 것이 좋습니다.
다음으로는 파이썬의 같음 및 같지 않음 연산자에 대한 튜토리얼을 학습해 보세요.