숫자와 산술 연산
숫자는 거의 모든 프로그램에서 등장합니다. 장바구니에서 가격을 합산하고, 게임에서 점수를 갱신하며, 스크립트로 어떤 일이 몇 번 일어났는지 셉니다. Python은 종이에 계산하듯 작동하는 산술 연산자를 제공하며, 처음부터 알아둘 가치가 있는 몇 가지가 더 있습니다.
연산자
수학의 네 가지 연산자(+, -, *, /)는 기대하는 그대로 작동합니다. Python은 여러분이 끊임없이 사용하게 될 세 가지를 추가합니다: 정수 나눗셈, 나머지, 거듭제곱.
price = 12.99
quantity = 3
print(price * quantity) # 38.97
print(price + 2) # 14.99
print(price - 1.00) # 11.99| 연산자 | 이름 | 예시 | 결과 |
|---|---|---|---|
+ | 덧셈 | 5 + 3 | 8 |
- | 뺄셈 | 5 - 3 | 2 |
* | 곱셈 | 5 * 3 | 15 |
/ | 나눗셈 | 5 / 3 | 1.6666... |
// | 정수 나눗셈 | 5 // 3 | 1 |
% | 나머지 | 5 % 3 | 2 |
** | 거듭제곱 | 5 ** 3 | 125 |
나눗셈: / 대 //
/는 결과가 정수라도 항상 정확한 소수 결과를 반환합니다. //는 정수 부분만 반환하고 소수점 이하는 잘라냅니다. 반올림이 아니라 잘라내기입니다:
10 / 2 # 5.0 (정확히 나누어 떨어져도 항상 float)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (0이 아닌 음의 무한대 방향으로 내림)-7 // 2 결과는 사람들을 놀라게 합니다. 보통은 음수가 나오지 않는 양수 상황에서 //를 사용하게 됩니다. 음수가 등장할 때를 위해 머릿속에 두기만 하면 됩니다.
나머지 연산자 %
%는 정수 나눗셈 후 남은 값을 반환합니다. 10 // 3이 3이면(3이 10에 세 번 들어가므로), 10 % 3은 1입니다(3 × 3 = 9, 10 - 9 = 1). 가장 흔한 용도는 숫자가 짝수인지 홀수인지 확인하는 것입니다.
10 % 3 # 1
10 % 2 # 0 (정확히 나누어 떨어짐)
10 % 7 # 3
6 % 2 # 0 (짝수)
7 % 2 # 1 (홀수)거듭제곱 **
**는 숫자를 거듭제곱합니다. 별표 두 개를 사용하며, ^ 기호(Python에서 다른 의미)는 사용하지 않습니다:
2 ** 10 # 1024
3 ** 3 # 27
9 ** 0.5 # 3.0 (제곱근: 0.5 지수로 거듭제곱)연산자 우선순위
Python은 표준 수학 순서를 따릅니다: 먼저 거듭제곱, 그다음 곱셈과 나눗셈, 그다음 덧셈과 뺄셈. 확실하지 않을 때는 괄호를 사용하세요. 의도를 명확하게 만들어 주고 비용도 없습니다:
2 + 3 * 4 # 14, 20이 아님
2 ** 3 + 1 # 9, 512가 아님
10 - 4 / 2 # 8.0, 3.0이 아님
(2 + 3) * 4 # 20
10 / (2 + 3) # 2.0int와 float의 상호작용
Python에는 일관된 규칙이 있습니다: /는 항상 소수를 반환하고(4 / 2도 2.0을 반환), 정수와 소수를 혼합한 연산은 소수를 반환합니다. 정수가 필요할 때는 //를 사용하거나 int()로 변환하세요.
4 / 2 # 2.0 (항상 float)
4 // 2 # 2 (int)
4 + 2 # 6 (int)
4 + 2.0 # 6.0 (float)
4 * 0.5 # 2.0 (float)Float 정밀도
거의 모든 사람을 어느 시점에 놀라게 하는 함정이 있습니다:
0.1 + 0.2 # 0.30000000000000004이 미세한 오차는 Python 버그가 아닙니다. 컴퓨터는 소수를 이진수로 저장하는데, 0.1 같은 일부 값은 정확하게 표현할 수 없습니다. 1/3을 정확한 소수로 쓸 수 없는 것과 비슷합니다. 대부분의 일상적인 계산에서는 문제가 되지 않습니다. 돈을 표시할 때는 round()나 :.2f 형식 지정자로 출력을 깔끔하게 유지할 수 있습니다.
가독성 좋은 숫자 리터럴
Python은 큰 숫자를 읽기 쉽게 하기 위해 숫자 리터럴에 밑줄을 넣을 수 있습니다. Python은 이를 완전히 무시합니다; 단지 여러분을 위한 것입니다:
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_653유용한 내장 함수
abs()
abs()는 절대값을 반환합니다: 입력의 부호와 관계없이 항상 양수입니다. 어느 방향이 아니라 숫자가 0에서 얼마나 떨어져 있는지 신경 쓸 때 사용하세요.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5round()
round()는 기본적으로 가장 가까운 정수로 반올림합니다. 특정 소수점 자릿수를 유지하려면 두 번째 인수를 전달하세요:
round(3.7) # 4
round(3.2) # 3
round(3.14159, 2) # 3.14알아둘 만한 한 가지: round(2.5)는 3이 아닌 2를 반환합니다. Python은 값이 두 옵션의 정확히 중간일 때 가장 가까운 짝수로 반올림합니다.
divmod()
divmod()는 한 번의 호출로 몫과 나머지를 모두 반환합니다. 두 이름에 한 번에 할당할 수 있는 값 쌍을 반환합니다:
divmod(10, 3) # (3, 1): 몫 3, 나머지 1
divmod(7, 2) # (3, 1)
divmod(9, 3) # (3, 0)
quotient, remainder = divmod(10, 3)
print(quotient) # 3
print(remainder) # 1(3, 1)이라는 건 뭔가요?
이는 **튜플(tuple)**입니다: 함께 반환되는 고정된 값 쌍. 튜플은 별도 장에서 다룹니다. 지금은 위에 보인 것처럼 두 이름에 한 번에 할당하여 두 값을 분리하면 됩니다.
실전에서
팁 계산기:
bill = 45.50
tip_rate = 0.18
tip = round(bill * tip_rate, 2)
total = round(bill + tip, 2)
print(f"Bill: ${bill}")
print(f"Tip: ${tip}")
print(f"Total: ${total}")round()는 긴 소수점 자릿수 대신 출력이 돈처럼 보이게 유지합니다.

