WeniVooks

검색

견고한 파이썬

산술연산

1. 산술연산자

1.1 덧셈

덧셈 연산자는 Python의 가장 기본적인 연산자 중 하나입니다. 주로 숫자를 더하는 데 사용되지만, 문자열, 리스트, 튜플 등 다양한 자료형에서도 사용됩니다.

1.1.1 숫자 덧셈

정수와 정수의 덧셈은 정수를 반환합니다. 정수와 실수의 덧셈은 실수를 반환합니다.

print(5 + 3) # 결과: 8 print(3 + 2.5) # 결과: 5.5
1.1.2 문자열 덧셈

문자열에서 덧셈 연산자는 두 문자열을 연결하는 역할을 합니다.

s1 = "Hello" s2 = "World" result = s1 + " " + s2 print(result) # Hello World
1.1.3 리스트와 튜플의 덧셈

리스트와 튜플에서 덧셈 연산자는 두 객체를 연결합니다.

list1 = [1, 2, 3] list2 = [4, 5, 6] combined_list = list1 + list2 print(combined_list) # [1, 2, 3, 4, 5, 6]
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) combined_tuple = tuple1 + tuple2 print(combined_tuple) # (1, 2, 3, 4, 5, 6)
1.1.4 나아가기

서로 다른 자료형 간의 덧셈은 지원되지 않습니다. 예를 들어, 문자열과 숫자를 직접 더할 수 없습니다.

result = "Hello" + 5

또한 덧셈이 지원되지 않는 자료형도 있습니다. 딕셔너리와 셋이 그러합니다.

{'one':1} + {'two':2} # error {5} + {6} # error

딕셔너리와 셋은 +대신 |를 사용하여 결합할 수 있습니다.

print({'one':1} | {'two':2}) # 결과: {'one': 1, 'two': 2} print({5} | {6}) # 결과: {5, 6}
1.2 뺄셈
1.2.1 숫자 뺄셈

정수와 정수의 뺄셈은 정수를, 정수와 실수의 뺄셈은 실수를 반환합니다. -기호는 음수를 표현하는 데도 사용됩니다.

print(7 - 4) # 결과: 3 print(10 - 3.5) # 결과: 6.5 print(5 - (-3)) # 결과: 8
1.2.2 셋의 뺄셈

셋은 +기호는 지원하지 않지만 -기호로 차집합을 지원합니다.

{3, 4, 5} - {4} # 결과: {3, 5}

이는 아래 메서드와 동일한 결과를 가집니다.

{3, 4, 5}.difference({4}) # 결과: {3, 5}
1.2.3 나아가기

서로 다른 자료형 간의 뺄셈은 지원되지 않습니다. 예를 들어, 문자열에서 숫자를 뺄 수 없습니다.

result = "Hello" - 3 # error

파이썬에서 문자열, 리스트, 튜플 등에서 뺄셈 연산자를 사용하는 것은 지원되지 않습니다. 이러한 데이터 유형에서 항목을 제거하려면 메서드나 슬라이싱 등 다른 방법을 사용해야 합니다.

뺄셈 기호인 대쉬(-)는 음의 정수를 표현하는 것에도 사용하니 표현에 유의해주세요. 예를 들어 아래와 같은 표현은 유효한 표현입니다.

print(7 - 4) # 결과: 3 print(7 -- 4) # 결과: 11 print(7 --- 4) # 결과: 3
1.3 곱셈

곱셈 연산자는 주로 숫자에서 사용되지만, 문자열이나 리스트, 튜플에서는 값을 연결시킬 수 있도록 합니다. 딕셔너리나 셋은 지원하지 않습니다. 그 특성을 살펴보면 이해할 수 있습니다. 딕셔너리는 키의 중복이 안되고, 셋은 값에 중복이 안되기 때문에 곱셈 연산을 하는 것이 의미가 없습니다.

1.3.1 숫자의 곱셈

정수와 정수의 곱셈은 정수를, 정수와 실수의 곱셈은 실수를 반환합니다.

print(3 * 4) # 결과: 12 print(5 * 2.5) # 결과: 12.5
1.3.2 문자열과 곱셈

문자열과 정수를 곱하면 해당 문자열이 정수만큼 반복됩니다. 다만 문자열과 실수를 곱하는 것은 지원되지 않습니다.

print("Ha" * 3) # 출력: "HaHaHa" # print("Ha" * 3.1) # Error
1.3.3 리스트와 곱셈

리스트와 정수를 곱하면 리스트 내의 요소들이 정수만큼 반복됩니다. 다만 리스트와 실수를 곱하는 것, 리스트와 리스트를 곱하는 것은 지원되지 않습니다.

print([1, 2, 3] * 2) # 출력: [1, 2, 3, 1, 2, 3]

리스트를 행렬로 취급하여 서로 곱하게 하고 싶다면 numpy와 같은 모듈을 사용할 수 있습니다.

1.4 나눗셈

나눗셈 연산자(/, //)는 두 수를 나누는 연산자입니다. 첫번째 나눗셈 연산자는 항상 float 형식으로 반환되며, 두번째 나눗셈 연산자는 항상 int형으로 반환됩니다. //는 내림입니다. 음수의 경우 헷갈릴 수 있으니 아래 예제를 통해 확인해주세요.

1.4.1 기본 사용법
a = 10 b = 2 print(a / b) # 결과 5.0 print(a // b) # 결과 5

정수로 떨어지는 값이라 하더라도 첫번째 연산의 경우 float형으로 반환된 것을 확인할 수 있습니다. 이번에는 음수를 확인해보도록 하겠습니다.

a = -5 b = 2 print(a / b) # 결과: -2.5 print(a // b) # 결과: -3

음수의 경우 두번째 값이 -2로 나올 것이라 예상하셨겠지만 -3이 나온 것을 확인할 수 있습니다. 이는 // 연산이 내림이기 때문에 그렇습니다.

1.4.2 나아가기

나누기의 경우 0으로 나누면 아래와 같은 에러가 발생합니다. 이는 수학적으로 0으로 나누는 것이 정의되지 않았기 때문입니다.

z = 0
x / z # ZeroDivisionError 발생
z = 0
x / z # ZeroDivisionError 발생

또한 float 형으로 반환되는 경우 아래처럼 소숫점 2번째 자리까지 출력하는 구문을 많이 사용하니 기억해두세요.

a = 10 b = 3 divide = a / b print(f'{a} ÷ {b} = {divide:.2f}') # 결과: 10 ÷ 3 = 3.33
1.5 나머지 연산자

나머지 연산자(%)는 한 숫자를 다른 숫자로 나누었을 때의 나머지를 반환하는 연산자입니다. 이 연산자는 특히 비교 연산자와 함께 사용하여 값이 나누어 떨어지는지 확인할 때 많이 사용합니다.

1.5.1 기본 사용법
10 % 3 # 결과: 1

10을 3으로 나누면 몫이 3이고 나머지가 1입니다. 따라서 1을 출력합니다.

1.5.2 활용 예시
10 % 2 == 0 # 홀수, 짝수 판별
365 % 10 == 0 # 1의 자리 반환
10 % 2 == 0 # 홀수, 짝수 판별
365 % 10 == 0 # 1의 자리 반환

위와 같이 나머지 연산은 홀수와 짝수를 판별하거나 특정 자리 수를 반환하거나, 특정 주기마다 코드를 실행시킬 경우 등에 주로 사용합니다.

1.6 거듭제곱 연산자

거듭제곱 연산자(**)는 특정 숫자를 다른 숫자의 승수만큼 곱하는 연산자입니다.

1.6.1 기본 사용법
10 ** 3 # 결과: 1000

위 연산 결과는 10 * 10 * 10과 같습니다.

4 ** 0.5 # 결과: 2

위 연산 결과는 4의 1/2승과 같습니다. 제곱근을 구하는 것이고, 루트를 씌운 결과와 같습니다.

1.6.2 나아가기
-2 ** 2

위와 같은 연산은 당연히 4가 될 것 같지만 -4가 정답입니다. -부호가 나중에 붙기 때문입니다. 이를 해결하기 위해 아래와 같이 음수는 괄호로 묶어야 합니다.

(-2) ** 2

음수를 제곱할 때는 결과가 복소수가 될 수 있습니다.

2. 전/후위 연산자

다른 프로그래밍 언어에서 일반적으로 지원하는 전/후위 연산자가 파이썬에는 존재하지 않습니다. 전/후위 연산자는 아래와 같이 연산되는 것입니다. a에 1이 추가됩니다.

a = 10
++a
a++
a = 10
++a
a++

이처럼 다른 언어에 일반적으로 있는 연산자가 파이썬에서는 없는 경우가 있습니다. 이러한 용법이 없으므로 보다 간결한 문법을 지향할 수 있으며 혼란을 줄일 수 있습니다.

예를 들어 이런 전/후위 연산자가 있는 JavaScript의 경우 일부 대기업의 코딩 가이드라인에서는 혼란을 피하기 위해 사용을 권장하지 않는 경우가 있습니다. 코드의 명확성과 정확성을 위해서입니다.

airbnb/javascript: JavaScript Style Guide
{"packages":["numpy","pandas","matplotlib","lxml"]}
5장 연산과 구문5.2 비교연산