IT/파이썬 기초 완전 정복

파이썬 기본 연산자와 수식 다루기 (3)

지식 발전소 2024. 4. 20. 00:25
728x90
반응형

 

파이썬에서 연산자와 수식을 다루는 것은 프로그래밍의 기본 바탕이 됩니다. 이번 장에서는 파이썬에서 사용되는 다양한 연산자와 수식 작성 방법에 대해 자세히 알아보겠습니다. 연산자와 수식을 잘 다루면 코드를 더욱 효율적으로 작성할 수 있습니다.

 

 

산술 연산자

산술 연산자는 기본적인 수학 연산을 수행하는 데 사용됩니다. 파이썬에서 사용되는 주요 산술 연산자는 다음과 같습니다.

  • + (더하기): 두 숫자를 더합니다. 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

연산자 우선순위

연산자는 우선순위에 따라 계산됩니다. 파이썬의 연산자 우선순위는 다음과 같습니다(높은 우선순위부터):

  1. ** (거듭제곱)
  2. +x, -x, ~x (단항 연산자)
  3. *, /, //, % (곱셈, 나눗셈, 정수 나눗셈, 나머지)
  4. +, - (덧셈, 뺄셈)
  5. >>, << (비트 시프트 연산자)
  6. & (비트 AND)
  7. ^ (비트 XOR)
  8. | (비트 OR)
  9. ==, !=, >, >=, <, <=, is, is not, in, not in (비교 연산자)
  10. not (논리 NOT)
  11. and (논리 AND)
  12. 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 연산자(&)를 사용하여 비트 값을 확인합니다.

이처럼 파이썬의 연산자는 다양한 방식으로 활용될 수 있습니다. 연산자를 잘 활용하면 코드를 더욱 간결하고 효율적으로 작성할 수 있습니다.

참고 자료

  1. "Python 연산자 문서" - Python 공식 문서, https://docs.python.org/3/library/operator.html
  2. "Python 연산자 우선순위" - Python 공식 문서, https://docs.python.org/3/reference/expressions.html#operator-precedence
  3. "파이썬 연산자 오버로딩" - 점프 투 파이썬, https://wikidocs.net/32061
  4. "Python Operators" - W3Schools, https://www.w3schools.com/python/python_operators.asp
  5. "파이썬 연산자" - 위키백과, 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

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형