숫자와 산술
거의 모든 프로그램에서 숫자를 다룹니다. 쇼핑 카트는 총액을 계산하고, 게임은 점수를 업데이트하고, 스크립트는 어떤 일이 몇 번 일어났는지 셉니다. 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 |
+, -, *, /는 종이 수학처럼 작동합니다. 세 개의 추가 연산자는 초반에 배울 가치가 있습니다. //는 정수로 나누고, %는 나머지를 주고, **는 거듭제곱합니다. 저는 예상했던 것보다 %를 훨씬 자주 사용합니다. 나눗셈: / vs //
/는 정확한 십진 결과를 제공하며, 답이 정수일 때도 그렇습니다. //는 소수 부분을 버리고 음의 무한대 방향으로 내립니다. 양수의 경우 십진 부분을 자르는 것과 같지만, 음수의 경우 0에서 더 멀어집니다.
10 / 2 # 5.0 (항상 float, 정확히 나누어도)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (음의 무한대 방향으로 내림, 0 방향이 아님)대부분 양수에서 //를 사용할 것입니다. 음수가 나타날 때를 대비해 음수 동작을 염두에 두세요.
/는 항상 소수를 반환합니다. 4 / 2가 2.0이어도 그렇습니다. //는 소수 부분을 버리지만 음수를 주의하세요. -7 // 2는 -3이 아닌 -4입니다. 내림하기 때문입니다. 처음 해봤을 때 저를 당황하게 했어요. 나머지 연산자 %
%는 정수 나눗셈 후 남은 것을 제공합니다. 10 // 3이 3이면(3이 10에 3번 들어가므로), 10 % 3은 1입니다(3 × 3 = 9이고 10 - 9 = 1이므로). 가장 흔한 사용처는 숫자가 짝수인지 홀수인지 확인하는 것입니다.
10 % 3 # 1
10 % 2 # 0 (정확히 나누어짐)
10 % 7 # 3
6 % 2 # 0 (짝수)
7 % 2 # 1 (홀수)%는 정수 나눗셈 후 남은 것입니다. 10 % 3은 1인데 3이 10에 세 번 들어가고 1이 남기 때문입니다. 대부분 짝수/홀수 확인으로 만날 것입니다. n % 2는 짝수일 때 0, 홀수일 때 1입니다. 거듭제곱 **
**는 숫자를 거듭제곱합니다. Python에서는 ^ 기호가 다른 의미이므로 두 개의 별표를 사용하세요.
2 ** 10 # 1024
3 ** 3 # 27
9 ** 0.5 # 3.0 (제곱근: 0.5의 거듭제곱으로 올림)**는 숫자를 거듭제곱하므로 2 ** 10은 1024입니다. 분수 거듭제곱은 제곱근을 줍니다. 9 ** 0.5는 3.0입니다. 한 가지 함정은 기호입니다. ^가 아닌 **를 사용하세요. Python에서는 ^가 다른 의미입니다. 연산자 우선순위
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)/는 항상 소수를 주므로 4 / 2는 2가 아닌 2.0입니다. 정수와 소수를 어디서든 섞으면 소수가 나옵니다. 정수가 필요할 때 //를 사용하거나 int()로 감싸세요. Float 정밀도
거의 모든 사람을 어느 시점에서 놀라게 하는 함정이 있습니다.
0.1 + 0.2 # 0.30000000000000004그 작은 오류는 Python 버그가 아닙니다. 컴퓨터는 십진수를 이진수로 저장하며, 0.1 같은 일부 값은 정확히 표현할 수 없습니다. 이는 1/3을 십진수로 정확히 쓸 수 없는 것과 유사합니다. 대부분의 일상적인 계산에는 중요하지 않습니다. 돈을 표시할 때 round() 또는 :.2f 형식 지정자가 출력을 깔끔하게 유지합니다.
0.1 같은 일부 값은 정확한 이진 형태가 없으므로 0.1 + 0.2는 0.30000000000000004가 됩니다. 이는 Python 버그가 아니며 모든 언어가 이를 합니다. 일상적인 출력의 경우 round() 또는 :.2f가 깔끔하게 유지합니다. 읽기 쉬운 숫자 리터럴
Python은 긴 숫자를 더 읽기 쉽게 만들기 위해 숫자 리터럴에 밑줄을 넣을 수 있습니다. Python은 이를 완전히 무시합니다. 이는 당신을 위한 것입니다.
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_6538_100_000_000은 8100000000과 같은 값입니다. Python은 이를 완전히 무시하며, 해석기가 아닌 당신의 눈을 위한 것입니다. 유용한 내장 함수
abs()
abs()는 절댓값을 반환합니다. 항상 양수이며, 입력의 부호와 상관없습니다. 숫자가 0에서 얼마나 멀리 떨어져 있는지, 어느 방향인지 신경 쓸 때 사용하세요.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5abs()는 부호를 제거하고 양수 크기를 반환합니다. abs(-5)는 5이고, abs(3.7)은 3.7입니다. 숫자가 0에서 얼마나 멀리 떨어져 있는지, 어느 방향인지 신경 쓸 때 사용하세요. round()
round()는 기본적으로 가장 가까운 정수로 반올림합니다. 두 번째 인수를 전달하여 특정 십진 자릿수를 유지하세요.
round(3.7) # 4
round(3.2) # 3
round(3.14159, 2) # 3.14알아두면 좋은 한 가지: round(2.5)는 3이 아닌 2입니다. Python은 값이 두 옵션의 정확히 중간일 때 가장 가까운 짝수로 반올림합니다.
round(x)는 가장 가까운 정수로 가고, round(x, n)은 n 십진 자릿수를 유지합니다. 놀라움: 정확히 중간에 앉은 값이 가장 가까운 짝수로 반올림되므로 round(2.5)는 3이 아닌 2입니다. 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) # 1divmod(a, b)는 몫과 나머지를 함께 반환합니다. divmod(10, 3)은 (3, 1)입니다. quotient, remainder = divmod(10, 3)으로 한 번에 둘을 언팩할 수 있습니다. 실제로
팁 계산기:
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()는 긴 십진 자릿수 실행이 아닌 돈처럼 출력을 보이게 합니다.

