"10보다 크고 20보다 작은 값이면서, 리스트 안에 존재하는지를 한 줄로 검사할 수 있을까요?" 이처럼 파이썬에서는 다양한 조건을 짧고 명확한 문장으로 표현할 수 있습니다. 그 핵심에 있는 것이 바로 연산자(operator)입니다. 파이썬은 단순한 더하기, 빼기를 넘어, 값의 관계를 비교하거나 논리적으로 연결하고, 객체의 정체성까지 판단할 수 있는 다양한 연산자를 제공합니다. 이 장에서는 **산술, 비교, 논리, 할당, 멤버, 식별 연산자**를 하나씩 살펴보며, 실전에서 어떻게 사용되는지를 예제를 통해 익혀볼 것입니다. 이제 조건을 판단하고 데이터를 다루는 똑똑한 문장을 함께 만들어봅시다.
- 산술 연산자 (+, -, *, / 등)
- 정수 나눗셈과 나머지, 거듭제곱
- 비교 연산자 (==, !=, >, < 등)
- 논리 연산자 (and, or, not)
- 할당 연산자 (=, +=, -= 등)
- 복합 할당 예제와 실습
- 멤버 연산자 (in, not in)
- 식별 연산자 (is, is not)
- 연산자 우선순위와 괄호 사용
- 실습 예제: 조건 조합으로 학생 등급 판단
산술 연산자 (+, -, *, / 등)
산술 연산자(Arithmetic Operators)는 가장 기본적인 수학 연산을 수행하는 연산자입니다. 파이썬에서도 숫자형 데이터를 다룰 때 덧셈, 뺄셈, 곱셈, 나눗셈 같은 연산을 매우 간단하게 사용할 수 있습니다. 이 연산자들은 실수와 정수 모두에 적용 가능하며, 계산 결과 역시 자동으로 형이 결정됩니다.
[기본 산술 연산자]
+
: 덧셈-
: 뺄셈*
: 곱셈/
: 나눗셈 (항상 float 결과)
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.333...
여기서 주의할 점은 /
연산자는 두 수가 정수이더라도 항상 실수(float) 결과를 반환한다는 점입니다. 정수 나눗셈은 //
연산자를 사용하는데, 이는 다음 항목에서 자세히 다룹니다.
또한 파이썬에서는 숫자뿐 아니라 문자열에도 +
와 *
연산자를 사용할 수 있습니다:
print("Hi " + "there") # Hi there
print("Hi! " * 3) # Hi! Hi! Hi!
이처럼 연산자는 숫자뿐 아니라 다양한 자료형에서도 의미 있게 작동할 수 있습니다.
학습 포인트
- 기본 산술 연산자의 기능과 결과 타입을 이해한다.
- 정수와 실수의 연산 결과 차이를 파악하고 주의한다.
정수 나눗셈과 나머지, 거듭제곱
파이썬에서는 일반적인 나눗셈 외에도 정수 나눗셈(//), 나머지 연산자(%), 거듭제곱 연산자(**)를 제공하여 수학 연산을 보다 다양하게 표현할 수 있습니다. 이 연산자들은 특히 반복문, 조건문, 알고리즘 구현 시 자주 사용됩니다.
[정수 나눗셈 //]
정수 나눗셈은 나눗셈 결과에서 소수점 이하를 버린 몫을 반환합니다.
print(10 // 3) # 3
print(20 // 4) # 5
print(7 // 2) # 3
주의할 점은 결과가 int
가 아닌 float
일 수 있다는 점입니다:
print(7.0 // 2) # 3.0 (float)
[나머지 %]%
연산자는 나눗셈 후 나머지만 반환합니다. 짝수/홀수 판별, 주기 계산 등에 유용하게 사용됩니다.
print(10 % 3) # 1
print(7 % 2) # 1
print(6 % 2) # 0
[거듭제곱 **]**
연산자는 지수 연산으로, a의 b제곱을 계산합니다.
print(2 ** 3) # 8 (2의 3제곱)
print(5 ** 2) # 25
print(9 ** 0.5) # 3.0 (제곱근)
**
연산자는 제곱은 물론, 루트 연산에도 사용할 수 있어 수학 계산에 매우 유용합니다.
학습 포인트
//
,%
,**
연산자의 동작 방식과 쓰임새를 구분하여 이해한다.- 정수, 실수 간의 계산 결과 형(type)의 차이도 함께 인식한다.
비교 연산자 (==, !=, >, < 등)
비교 연산자
는 두 값을 비교하여 참(True) 또는 거짓(False)을 반환하는 연산자입니다. 조건문에서 가장 많이 사용되며, 숫자뿐 아니라 문자열, 리스트, 논리값 등 다양한 자료형에서도 사용할 수 있습니다.
[주요 비교 연산자]
==
: 같음!=
: 같지 않음>
: 왼쪽이 큼<
: 왼쪽이 작음>=
: 왼쪽이 크거나 같음<=
: 왼쪽이 작거나 같음
x = 10
y = 7
print(x == y) # False
print(x != y) # True
print(x > y) # True
print(x <= 10) # True
파이썬에서는 문자열도 사전 순서로 비교할 수 있습니다:
print("apple" == "apple") # True
print("banana" > "apple") # True ('b' > 'a')
또한 파이썬에서는 여러 비교 연산을 연달아 사용할 수 있는 체인 연산이 가능합니다:
x = 5
print(1 < x < 10) # True (1보다 크고 10보다 작다)
이런 표현은 조건문을 더 직관적이고 간결하게 만들어주며, 다른 언어에서는 보기 힘든 파이썬만의 특징입니다.
학습 포인트
- 비교 연산자가 반환하는 불(boolean) 값을 이해하고 조건문에 활용할 수 있다.
- 체인 형태의 비교식 사용법을 익힌다.
논리 연산자 (and, or, not)
논리 연산자(Logical Operators)는 여러 조건을 동시에 판단하거나, 조건을 반대로 뒤집을 때 사용됩니다. 조건문에서 두 개 이상의 비교를 연결할 때 매우 자주 등장하며, 불(Boolean) 값을 다룰 때 핵심적인 역할을 합니다.
[파이썬의 주요 논리 연산자]
and
: 양쪽 조건이 모두 True일 때만 Trueor
: 둘 중 하나라도 True이면 Truenot
: 조건의 값을 반대로 뒤집음 (True → False, False → True)
a = 5
b = 10
# and 예제
print(a > 0 and b > 0) # True
print(a > 0 and b < 0) # False
# or 예제
print(a < 0 or b > 0) # True
print(a < 0 or b < 0) # False
# not 예제
print(not a > 0) # False
print(not (b < 0)) # True
논리 연산자는 조건을 조합하거나 예외 상황을 처리할 때 자주 사용됩니다. 예를 들어, 특정 값이 어떤 범위 안에 있을 때만 실행하고 싶다면 아래처럼 표현할 수 있습니다:
score = 85
if score >= 80 and score < 90:
print("B등급입니다.")
또한 not
연산자는 조건을 반대로 만들고자 할 때 유용합니다:
is_logged_in = False
if not is_logged_in:
print("로그인이 필요합니다.")
학습 포인트
- and, or, not의 조건 판단 결과를 정확히 이해한다.
- 복합 조건식 구성에 논리 연산자를 적절히 활용하는 방법을 익힌다.
할당 연산자 (=, +=, -= 등)
할당 연산자(Assignment Operators)는 변수에 값을 저장하거나, 기존 값에 연산을 수행한 뒤 다시 저장할 때 사용됩니다. 기본적으로 =
은 값을 변수에 할당하는 데 사용되며, 이를 확장한 다양한 복합 할당 연산자들도 존재합니다.
[기본 할당]
x = 10 # 변수 x에 10을 할당
y = x + 5 # 변수 y에 x + 5 값을 할당
기본 할당 외에도, 변수에 특정 연산을 적용하고 그 결과를 자기 자신에게 다시 저장할 때는 다음과 같은 복합 할당 연산자를 사용할 수 있습니다.
[복합 할당 연산자]
+=
: 더한 값을 다시 할당 (x += 1
→x = x + 1
)-=
: 뺀 값을 다시 할당*=
: 곱한 값을 다시 할당/=
: 나눈 값을 다시 할당%=
: 나머지를 다시 할당//=
: 정수 나눗셈 결과 할당**=
: 거듭제곱 결과 할당
x = 5
x += 3 # x = x + 3 → 8
x *= 2 # x = x * 2 → 16
x -= 4 # x = x - 4 → 12
print(x) # 12
이러한 연산은 루프 안에서 누적 값을 계산하거나, 간단한 상태 업데이트를 표현할 때 매우 유용합니다.
참고로 =
은 '같다'가 아니라 '할당한다'는 의미입니다. 두 값이 같은지 비교할 때는 ==
을 사용해야 합니다.
a = 5 # 할당
print(a == 5) # 비교 → True
학습 포인트
- 기본 할당과 복합 할당 연산자의 차이와 쓰임을 이해한다.
- 코드 흐름을 간결하게 만드는 누적 계산 방식에 익숙해진다.
복합 할당 예제와 실습
복합 할당 연산자(+=
, -=
, *=
등)는 반복적인 연산이나 상태 변화가 필요한 상황에서 매우 유용합니다. 이 항목에서는 실제 문제 해결에 적용되는 예제를 통해 복합 할당 연산자의 사용법을 체득해 봅니다.
[예제 1] 숫자 누적합 계산
# 1부터 5까지의 합 계산
total = 0
for i in range(1, 6):
total += i # total = total + i
print("누적합:", total) # 15
이 예제에서는 +=
를 사용하여 total
에 반복적으로 값을 누적합니다. 반복 구조 안에서 복합 할당 연산자는 코드의 간결함과 가독성을 높이는 데 큰 도움이 됩니다.
[예제 2] 할인율 계산
price = 10000
discount = 0.1
price -= price * discount # 10% 할인 적용
print("할인가:", price) # 9000.0
-=
연산자를 통해 기존 값을 조건에 따라 줄이거나 증가시키는 것도 자주 사용됩니다.
[예제 3] 제곱 값 반복 적용
value = 2
value **= 3 # value = value ** 3
print("8의 결과:", value) # 8
이처럼 복합 할당 연산자는 단순한 축약이 아닌 프로그램의 흐름을 간결하고 효율적으로 제어하는 수단입니다.
학습 포인트
- 복합 할당 연산자가 실무 로직에서 어떻게 활용되는지 실제 예제로 익힌다.
- for 루프나 조건 연산 등과 함께 사용해 반복적 상태 변화를 간결하게 구현하는 법을 익힌다.
멤버 연산자 (in, not in)
멤버 연산자는 특정 값이 시퀀스 자료형(문자열, 리스트, 튜플, 딕셔너리 등)에 포함되어 있는지 여부를 판단하는 연산자입니다. 파이썬에서는 in
과 not in
두 가지 연산자를 통해 매우 직관적으로 멤버십 테스트를 할 수 있습니다.
[문법]
x in A
: x가 A 안에 있으면 Truex not in A
: x가 A 안에 없으면 True
fruits = ["apple", "banana", "orange"]
print("apple" in fruits) # True
print("grape" not in fruits) # True
text = "hello python"
print("python" in text) # True
print("java" in text) # False
이 연산자는 조건문과 함께 자주 사용됩니다. 예를 들어 다음과 같은 코드가 가능합니다:
user_input = input("과일 이름 입력: ")
if user_input in fruits:
print("리스트에 있는 과일입니다.")
else:
print("리스트에 없는 과일입니다.")
문자열에서도 부분 문자열 존재 여부를 확인할 수 있으며, 딕셔너리에서는 키의 존재 여부를 확인합니다:
info = {"name": "Alice", "age": 30}
print("name" in info) # True
print("height" not in info) # True
in
연산자는 반복 가능한 객체(iterable)라면 어디든 적용될 수 있기 때문에, 조건 판단에 매우 강력한 도구입니다.
학습 포인트
- in과 not in의 동작 원리를 다양한 자료형에서 직접 실습해본다.
- 조건문과 결합하여 멤버 확인 로직을 자연스럽게 구현할 수 있도록 연습한다.
식별 연산자 (is, is not)
파이썬에서 두 객체가 같은 값을 가지고 있는지를 비교하려면 ==
연산자를 사용합니다. 하지만 두 객체가 완전히 동일한 객체(메모리 위치 포함)인지를 확인하고 싶을 때는 is
연산자를 사용해야 합니다. 이때 사용하는 것이 바로 식별 연산자(identity operators)입니다.
[식별 연산자]
x is y
: x와 y가 같은 객체(메모리 주소)를 참조하면 Truex is not y
: x와 y가 서로 다른 객체면 True
[예제: 값은 같지만 객체는 다를 수 있음]
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (값이 같음)
print(a is b) # False (다른 객체)
c = a
print(a is c) # True (같은 객체를 참조함)
이처럼 a == b
는 두 리스트의 값이 같은지를 비교하지만, a is b
는 메모리에서 같은 객체인지 확인합니다. 변수 c
는 a
를 참조했기 때문에 a is c
는 True가 됩니다.
[예제: None 비교 시 is 사용 권장]
x = None
# 아래 두 방법 모두 가능하지만, is 사용이 더 명확함
if x is None:
print("값이 없습니다.")
if x is not None:
print("값이 존재합니다.")
None
, True
, False
같은 싱글턴 객체는 is
연산자로 비교하는 것이 권장됩니다.
학습 포인트
- == 와 is 의 차이를 명확히 이해하고 구분할 수 있다.
- 객체의 식별 비교가 필요한 상황에서 is, is not을 정확히 사용할 수 있다.
연산자 우선순위와 괄호 사용
하나의 표현식에 여러 연산자가 등장할 때, 어떤 연산이 먼저 실행될까? 이때 중요한 것이 바로 연산자 우선순위(operator precedence)입니다. 파이썬은 수학적 규칙과 유사하게 연산자의 우선순위를 적용하며, 프로그래머는 이를 정확히 이해하고 사용해야 예기치 않은 결과를 방지할 수 있습니다.
[우선순위 예시]
x = 3 + 4 * 2
print(x) # 11 (곱셈이 먼저 수행됨)
위 예제에서 4 * 2
가 먼저 계산되어 8이 되고, 그 후 3 + 8
이 수행되어 결과는 11이 됩니다. 이는 곱셈이 덧셈보다 우선순위가 높기 때문입니다.
[주요 연산자 우선순위 요약]
**
(거듭제곱)* / // %
(곱셈, 나눗셈 등)+ -
(덧셈, 뺄셈)>, <, ==, !=
(비교)not
and
or
=, +=, -=
(할당)
하지만 연산자의 우선순위를 모두 외우는 것은 비효율적일 수 있습니다. 대신 괄호()를 적극 활용해 계산 순서를 명확히 표현하는 습관을 들이는 것이 좋습니다.
result = (3 + 4) * 2
print(result) # 14
이처럼 괄호를 사용하면 코드의 의도와 결과가 일치함을 보장할 수 있습니다.
학습 포인트
- 연산자 우선순위가 결과에 영향을 줄 수 있음을 인식한다.
- 괄호를 통해 연산 순서를 명확하게 제어하는 습관을 기른다.
실습 예제: 조건 조합으로 학생 등급 판단
이제까지 배운 산술, 비교, 논리, 할당 연산자를 활용하여 하나의 프로그램을 완성해 봅시다. 이번 실습에서는 점수를 기준으로 학생의 등급을 나누는 프로그램을 작성합니다. 복합 조건문과 연산자 우선순위, 논리 연산을 모두 아우르는 종합 예제입니다.
[요구사항]
- 점수를 입력받아
- 90점 이상: A
- 80점 이상: B
- 70점 이상: C
- 그 외: F
- 단, 0~100 사이의 유효한 점수만 처리하고, 그 외는 오류 출력
score = int(input("점수를 입력하세요 (0~100): "))
if 0 <= score <= 100:
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
print("등급:", grade)
else:
print("잘못된 점수입니다. 0에서 100 사이의 값을 입력하세요.")
여기서 다음과 같은 연산자들이 함께 사용되었습니다:
int()
: 문자열 → 정수형 변환and
없이0 <= score <= 100
처럼 비교 연산 체이닝 사용=
할당 연산자,>=
비교 연산자
이와 같은 실습은 단순한 문법 암기에서 벗어나, 실제 문제 해결에 필요한 연산자들의 조합을 체험할 수 있도록 도와줍니다.
학습 포인트
- 조건문과 연산자들을 종합적으로 활용해 실전 문제를 해결하는 능력을 기른다.
- 입력 검증, 조건 분기, 변수 활용 등 프로그램의 기본 구조를 체득한다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
6장. 자료구조 ① 리스트와 튜플 (0) | 2025.05.18 |
---|---|
5장. 반복문 (for, while, break, continue) (1) | 2025.05.18 |
4장. 조건문과 흐름 제어 (if, elif, else, 중첩 조건문) (0) | 2025.05.18 |
2장. 변수와 자료형 (숫자, 문자열, 불, 타입 변환) (1) | 2025.05.18 |
1장. 파이썬 소개와 개발 환경 구축 (1) | 2025.05.18 |