수와 산술

수는 작성하는 거의 모든 프로그램에 나타납니다. 쇼핑 카트는 가격 합계를 계산합니다. 게임은 점수를 업데이트합니다. 스크립트는 어떤 일이 몇 번 발생했는지 세어봅니다. 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에 3번 들어가고 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()로 래핑하세요. 부동소수점 정밀도
어느 시점에서 거의 모든 사람을 놀라게 하는 함정이 있습니다:
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_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()는 출력이 소수점 위의 긴 실행이 아닌 돈처럼 보이게 합니다.

