파이썬 기본 연산자와 수식 다루기 (3)
파이썬에서 연산자와 수식을 다루는 것은 프로그래밍의 기본 바탕이 됩니다. 이번 장에서는 파이썬에서 사용되는 다양한 연산자와 수식 작성 방법에 대해 자세히 알아보겠습니다. 연산자와 수식을 잘 다루면 코드를 더욱 효율적으로 작성할 수 있습니다.
산술 연산자
산술 연산자는 기본적인 수학 연산을 수행하는 데 사용됩니다. 파이썬에서 사용되는 주요 산술 연산자는 다음과 같습니다.
- + (더하기): 두 숫자를 더합니다. 5 + 3 은 8을 출력합니다.
- - (빼기): 첫 번째 숫자에서 두 번째 숫자를 뺍니다. 10 - 4 는 6을 출력합니다.
- * (곱하기): 두 숫자를 곱합니다. 3 * 7 은 21을 출력합니다.
- / (나누기): 첫 번째 숫자를 두 번째 숫자로 나눕니다. 12 / 3 은 4.0을 출력합니다.
- // (정수 나누기): 첫 번째 숫자를 두 번째 숫자로 나눈 후 소수점 이하를 버립니다. 14 // 3 은 4를 출력합니다.
- % (나머지 계산): 첫 번째 숫자를 두 번째 숫자로 나눈 후 남는 나머지를 출력합니다. 17 % 5 는 2를 출력합니다.
- * (거듭제곱): 첫 번째 숫자를 두 번째 숫자의 거듭제곱으로 계산합니다. 2 ** 3 은 8을 출력합니다.
예를 들어, 간단한 산술 연산을 수행하는 코드는 다음과 같습니다.
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.3333333333333335
print(a // b) # 3
print(a % b) # 1
print(a ** b) # 1000
할당 연산자
할당 연산자는 변수에 값을 할당하는 데 사용됩니다. 파이썬에서 가장 일반적인 할당 연산자는 =입니다. 예를 들어, x = 5는 변수 x에 값 5를 할당합니다.
파이썬에서는 복합 할당 연산자도 제공합니다. 이러한 연산자는 연산과 할당을 동시에 수행할 수 있습니다. 예를 들어, x += 3은 x = x + 3과 동일한 의미입니다. 다른 복합 할당 연산자에는 -=, *=, /=, //=, %=, **= 등이 있습니다.
x = 10
x += 5 # 같은 표현: x = x + 5
print(x) # 15
y = 20
y -= 7 # 같은 표현: y = y - 7
print(y) # 13
비교 연산자
비교 연산자는 값들을 비교하고 boolean 값(True 또는 False)을 반환합니다. 파이썬에서 사용되는 주요 비교 연산자는 다음과 같습니다.
- == (같음): 두 값이 같으면 True, 그렇지 않으면 False를 반환합니다. 5 == 5는 True를 출력합니다.
- != (같지 않음): 두 값이 다르면 True, 그렇지 않으면 False를 반환합니다. 7 != 4는 True를 출력합니다.
- > (초과): 첫 번째 값이 두 번째 값보다 크면 True, 그렇지 않으면 False를 반환합니다. 10 > 5는 True를 출력합니다.
- < (미만): 첫 번째 값이 두 번째 값보다 작으면 True, 그렇지 않으면 False를 반환합니다. 3 < 9는 True를 출력합니다.
- >= (이상): 첫 번째 값이 두 번째 값보다 크거나 같으면 True, 그렇지 않으면 False를 반환합니다. 8 >= 8은 True를 출력합니다.
- <= (이하): 첫 번째 값이 두 번째 값보다 작거나 같으면 True, 그렇지 않으면 False를 반환합니다. 6 <= 10은 True를 출력합니다.
비교 연산자는 주로 조건문이나 반복문에서 사용됩니다.
x = 10
y = 15
print(x == y) # False
print(x != y) # True
print(x > y) # False
print(x < y) # True
print(x >= y) # False
print(x <= y) # True
논리 연산자
논리 연산자는 여러 조건을 결합하여 복잡한 boolean 식을 만들 때 사용됩니다. 파이썬에서 사용되는 주요 논리 연산자는 다음과 같습니다.
- and: 두 조건이 모두 True일 때 True를 반환합니다. 그렇지 않으면 False를 반환합니다. (5 > 3) and (10 < 15)는 True를 출력합니다.
- or: 두 조건 중 하나라도 True이면 True를 반환합니다. 그렇지 않으면 False를 반환합니다. (2 < 1) or (4 > 2)는 True를 출력합니다.
- not: 조건의 boolean 값을 반전시킵니다. not True는 False를, not False는 True를 반환합니다.
논리 연산자는 프로그램의 흐름을 제어하는 데 중요한 역할을 합니다.
x = 10
y = 20
z = 30
print((x < y) and (y < z)) # True
print((x > y) or (y > z)) # False
print(not(x == y)) # True
비트 연산자
비트 연산자는 이진 비트 패턴을 직접 조작할 때 사용됩니다. 비트 연산은 저수준의 프로그래밍에서 주로 사용되지만, 때로는 고급 알고리즘에서도 활용될 수 있습니다. 파이썬에서 사용되는 주요 비트 연산자는 다음과 같습니다.
- & (비트 AND): 각 비트 위치에서 두 숫자의 비트가 모두 1이면 1을, 그렇지 않으면 0을 출력합니다.
- | (비트 OR): 각 비트 위치에서 두 숫자의 비트 중 하나라도 1이면 1을, 그렇지 않으면 0을 출력합니다.
- ^ (비트 XOR): 각 비트 위치에서 두 숫자의 비트가 다르면 1을, 같으면 0을 출력합니다.
- ~ (비트 NOT): 각 비트의 값을 반전시킵니다. 1은 0이 되고, 0은 1이 됩니다.
- << (왼쪽 시프트): 비트 패턴을 왼쪽으로 시프트합니다. 비어 있는 자리는 0으로 채웁니다.
- >> (오른쪽 시프트): 비트 패턴을 오른쪽으로 시프트합니다. 비어 있는 자리는 0으로 채웁니다.
비트 연산자는 주로 저수준의 프로그래밍이나 암호화, 압축 등의 특수한 용도로 사용됩니다.
a = 0b10111011
b = 0b11001101
print(bin(a & b)) # 0b10001001
print(bin(a | b)) # 0b11111111
print(bin(a ^ b)) # 0b1110110
print(bin(~a)) # -0b11000100
print(bin(a << 2)) # 0b1110110000
print(bin(b >> 1)) # 0b1100110
연산자 우선순위
연산자는 우선순위에 따라 계산됩니다. 파이썬의 연산자 우선순위는 다음과 같습니다(높은 우선순위부터):
- ** (거듭제곱)
- +x, -x, ~x (단항 연산자)
- *, /, //, % (곱셈, 나눗셈, 정수 나눗셈, 나머지)
- +, - (덧셈, 뺄셈)
- >>, << (비트 시프트 연산자)
- & (비트 AND)
- ^ (비트 XOR)
- | (비트 OR)
- ==, !=, >, >=, <, <=, is, is not, in, not in (비교 연산자)
- not (논리 NOT)
- and (논리 AND)
- or (논리 OR)
연산자 우선순위를 모르면 예기치 않은 결과가 발생할 수 있습니다. 따라서 괄호를 적절히 사용하여 의도한 대로 연산이 수행되도록 해야 합니다.
x = 10
y = 20
z = 30
result = x + y * z # result = 610
result = (x + y) * z # result = 900
위 예제에서 볼 수 있듯이, y * z가 먼저 계산되어 result가 610이 됩니다. 하지만 괄호를 사용하면 의도한 대로 x + y가 먼저 계산되어 result가 900이 됩니다.
수식 작성하기
파이썬에서 수식은 연산자와 피연산자(값)를 조합하여 작성할 수 있습니다. 수식은 단순한 산술 연산부터 복잡한 논리 연산까지 다양한 형태로 나타낼 수 있습니다.
result = 2 * (3 + 4) # 산술 연산
result = (x > 10) and (y < 20) # 논리 연산
result = (a & 0xFF) | (b >> 8) # 비트 연산
파이썬에서는 수식을 변수에 할당하거나 직접 출력할 수 있습니다. 또한 수식을 다른 수식의 일부로 사용할 수도 있습니다.
x = 10
y = 20
z = 30
result = x + y * z # 610
print(result)
is_valid = (x > 0) and (y < 100) and (z != 0) # True
print(is_valid)
final_value = (result + z) // 4 # 185
print(final_value)
수식을 작성할 때는 연산자 우선순위와 괄호 사용에 주의해야 합니다. 또한 변수와 상수를 적절히 조합하여 코드의 가독성과 유지보수성을 높일 수 있습니다.
증감 연산자
많은 프로그래밍 언어에서는 값을 1 증가시키거나 1 감소시키는 증감 연산자(++, --)를 제공합니다. 하지만 파이썬에서는 증감 연산자를 직접 제공하지 않습니다.
대신 파이썬에서는 다음과 같이 할당 연산자와 산술 연산자를 조합하여 증감 연산을 수행합니다.
x = 10
x += 1 # x = x + 1 (11)
x -= 1 # x = x - 1 (10)
또한 다음과 같이 복합 할당 연산자를 사용할 수도 있습니다.
x = 10
x = x + 1 # 11
x = x - 1 # 10
증감 연산은 반복문이나 특정 조건에서 값을 증가 또는 감소해야 할 때 주로 사용됩니다. 예를 들어, 다음과 같이 for 반복문에서 반복 횟수를 제어할 때 증감 연산이 유용합니다.
count = 0
for i in range(10):
count += 1 # count = count + 1
print(count)
증감 연산자가 없더라도 파이썬에서는 할당 연산자와 산술 연산자의 조합으로 값을 증가시키거나 감소시킬 수 있습니다. 이런 방식은 코드를 더 명확하게 만들어 가독성과 유지보수성을 높입니다.
삼항 연산자
삼항 연산자는 조건에 따라 값을 할당하는 간결한 방법입니다. 많은 프로그래밍 언어에서 조건 ? 값1 : 값2 형태의 삼항 연산자를 제공합니다. 하지만 파이썬에는 이런 형태의 삼항 연산자가 없습니다.
대신 파이썬에서는 다음과 같이 조건문을 사용하여 동일한 기능을 구현할 수 있습니다.
x = 10
y = 20
result = x if x > y else y
print(result) # 20
위 코드는 x가 y보다 크면 result에 x를 할당하고, 그렇지 않으면 y를 할당합니다. 이렇게 하면 조건에 따라 값을 할당할 수 있습니다.
또한 파이썬에서는 다음과 같이 조건 식을 사용할 수도 있습니다.
x = 10
y = 20
result = "x is greater" if x > y else "y is greater or equal"
print(result) # y is greater or equal
조건 식은 간결하고 가독성이 좋아 많이 사용되지만, 너무 복잡해지면 오히려 가독성이 떨어질 수 있습니다. 따라서 적절한 수준에서 사용하는 것이 좋습니다.
연산자 오버로딩
연산자 오버로딩은 사용자 정의 클래스에서 기존 연산자를 재정의하여 사용할 수 있는 기능입니다. 이를 통해 연산자를 클래스의 인스턴스에 맞게 동작하도록 할 수 있습니다.
예를 들어, + 연산자를 두 인스턴스의 값을 더하도록 오버로딩할 수 있습니다.
class Vector2D:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector2D(self.x + other.x, self.y + other.y)
v1 = Vector2D(1, 2)
v2 = Vector2D(3, 4)
v3 = v1 + v2
print(v3.x, v3.y) # 4 6
위 예제에서 Vector2D 클래스의 __add__ 메서드를 정의하여 + 연산자를 오버로딩했습니다. 이제 두 Vector2D 인스턴스를 더하면 각 성분의 값이 더해진 새로운 인스턴스가 반환됩니다.
파이썬에서는 +, -, *, /, <, > 등의 다양한 연산자를 오버로딩할 수 있습니다. 이를 통해 사용자 정의 클래스에 맞는 연산 동작을 구현할 수 있습니다.
연산자 오버로딩은 특히 수학 라이브러리나 게임 엔진 등에서 많이 사용됩니다. 하지만 오버로딩을 남용하면 코드의 가독성과 유지보수성이 떨어질 수 있으므로 적절한 수준에서 사용해야 합니다.
연산자 활용 예제
이제 파이썬에서 연산자를 활용하는 몇 가지 예제를 살펴보겠습니다.
예제 1: 계산기 프로그램
def calculate(operator, x, y):
if operator == "+":
return x + y
elif operator == "-":
return x - y
elif operator == "*":
return x * y
elif operator == "/":
if y != 0:
return x / y
else:
return "Cannot divide by zero"
else:
return "Invalid operator"
print(calculate("+", 10, 5)) # 15
print(calculate("-", 20, 7)) # 13
print(calculate("*", 4, 6)) # 24
print(calculate("/", 30, 3)) # 10.0
print(calculate("/", 25, 0)) # Cannot divide by zero
print(calculate("%", 17, 5)) # Invalid operator
이 예제에서는 간단한 계산기 프로그램을 구현했습니다. calculate 함수는 연산자와 두 개의 숫자를 입력받아 해당 연산의 결과를 반환합니다. 연산자에 따라 적절한 산술 연산이 수행되며, 0으로 나누는 경우와 잘못된 연산자가 입력된 경우를 처리합니다.
예제 2: 학점 계산기
score = 88
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Your grade is {grade}") # Your grade is B
이 예제에서는 학생의 점수를 입력받아 해당 점수에 맞는 학점을 계산합니다. 조건문과 비교 연산자를 활용하여 점수 범위에 따라 적절한 학점이 할당됩니다.
예제 3: 비트 연산 활용
# 비트 플래그 설정 및 확인
flags = 0b00000000 # 초기 플래그 값
flags |= 0b00000001 # 첫 번째 비트 설정
flags |= 0b00000100 # 세 번째 비트 설정
print(bin(flags)) # 0b101 (비트 플래그 값 출력)
# 비트 플래그 확인
first_flag_set = (flags & 0b1) != 0
third_flag_set = (flags & 0b100) != 0
print(first_flag_set) # True
print(third_flag_set) # True
이 예제에서는 비트 연산자를 활용하여 비트 플래그를 설정하고 확인합니다. 비트 플래그는 여러 상태를 단일 정수 값으로 표현하는 방법으로, 메모리 효율적입니다. 비트 OR 연산자(|=)를 사용하여 특정 비트를 설정하고, 비트 AND 연산자(&)를 사용하여 비트 값을 확인합니다.
이처럼 파이썬의 연산자는 다양한 방식으로 활용될 수 있습니다. 연산자를 잘 활용하면 코드를 더욱 간결하고 효율적으로 작성할 수 있습니다.
참고 자료
- "Python 연산자 문서" - Python 공식 문서, https://docs.python.org/3/library/operator.html
- "Python 연산자 우선순위" - Python 공식 문서, https://docs.python.org/3/reference/expressions.html#operator-precedence
- "파이썬 연산자 오버로딩" - 점프 투 파이썬, https://wikidocs.net/32061
- "Python Operators" - W3Schools, https://www.w3schools.com/python/python_operators.asp
- "파이썬 연산자" - 위키백과, https://ko.wikipedia.org/wiki/파이썬_연산자
한 고대 문서 이야기
여기 한 고대 문서가 있습니다. 이 문서는 B.C. 1,500년 부터 A.D 100년까지 약 1,600 여 년 동안 기록되었습니다. 이 문서의 저자는 약 40 명입니다. 이 문서의 고대 사본은 25,000 개가 넘으나, 사본간 오
gospel79.tistory.com
유튜브 프리미엄 월 1만원 할인받고 월 4000원에 이용하는 방법
올해 5월부터 월 8000원 정도이던 유튜브 프리미엄 요금이 15000원 정도로 인상됩니다. 각종 OTT 서비스, ChatGPT 같은 서비스들이 늘어나다보니 이런 거 몇 개만 이용하더라도 월 이용요금이 5만원을
stock79.tistory.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."