숫자

숫자 에서 Python

78개의 연습 문제

숫자 소개

Python에는 세 가지 종류의 내장 숫자 타입이 있어요: 정수(int), 실수(float), 복소수(complex)예요. 분수(fractions.Fraction)와 십진수(decimal.Decimal)도 표준 라이브러리에서 import해서 사용할 수 있어요.

16진수(hex()), 8진수(oct()), 2진수(bin()) 숫자를 포함해, 소수점이 없는 정수도 모두 ints로 인식돼요:

# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>

>>> -12
-12

소수점이 있는 숫자(소수 부분이 있든 없든)는 floats로 인식돼요:

>>> 3.45
3.45
>>> type(3.45)
<class 'float'>

산술 연산

Python은 이런 서로 다른 숫자 타입 사이의 산술 연산을 완전히 지원하고, 이항 산술 연산자(+, -, *, /, //, %)를 사용할 때는 더 좁은 범위의 숫자를 더 넓은 범위의 숫자에 맞춰 변환해요.

복소수를 제외한 모든 숫자는 모든 산술 연산을 지원하며, 연산은 연산자 우선순위에 따라 평가돼요. 복소수에 대해 (+와 -를 넘어선) 수학 함수 지원은 cmath 모듈에서 찾을 수 있어요.

덧셈과 뺄셈

덧셈과 뺄셈 연산자는 일반 수학에서처럼 동작해요. 피연산자 중 하나 이상이 float이면 나머지 int들도 float로 변환돼요:

>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0

곱셈

덧셈과 뺄셈에서처럼, 곱셈도 더 좁은 범위의 숫자를 더 넓은 범위의 숫자에 맞춰 변환해요:

>>> 3 * 2
6

>>> 3 * 2.0
6.0

나눗셈

나눗셈은 결과가 정수라도 항상 float을 반환해요:

>>> 6/5
1.2

>>> 6/2
3.0

내림 나눗셈

int 결과가 필요하면 내림 나눗셈으로 결과를 잘라낼 수 있어요. 내림 나눗셈은 // 연산자로 수행해요:

>>> 6//5
1

>>> 6//2
3

나머지 연산

나머지 연산자(%)는 두 피연산자를 나눈 나머지를 반환해요:

# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0

# The result of % is 2 here, because 3 only goes into 5 once, with 2 left over
>>> 5 % 3
2

5 % 3을 다른 방식으로 살펴보면:

>>> whole_part = int(5/3)
1

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

거듭제곱

거듭제곱은 ** 연산자로 수행해요:

>>> 2 ** 3
8

>>> 4 ** 0.5
2

변환

내장 함수 int()와 float()를 사용하면 숫자를 int에서 floats로, floats에서 int로 변환할 수 있어요:

>>> int(3.45)
3

>>> float(3)
3.0

반올림

Python은 실수를 주어진 소수 자릿수로 반올림하는 내장 함수 round(<number>, <decimal_places>)를 제공해요. 소수 자릿수를 지정하지 않으면 가장 가까운 정수로 반올림하고 int를 반환해요:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

우선순위와 괄호

Python에서는 괄호로 식을 묶을 수 있어요. 기본 연산 순서를 바꾸고 싶을 때 유용해요.

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

Python은 연산자 우선순위에 대해 PEMDAS 규칙을 따라요. 즉, () 안의 계산이 가장 우선이고, 그다음이 **, 그다음이 *, /, //, %, +, - 순서예요:

>>> 2 + 3 - 4 * 4
-11

>>> (2 + 3 - 4) * 4
4

# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 256, then 2 + 768
>>> 2 + 3 * 4 ** 4
770

정밀도와 표현

Python의 정수는 임의 정밀도를 가져요. 즉, 자릿수는 호스트 시스템의 사용 가능한 메모리에 의해서만 제한돼요.

부동소수점 수는 보통 C의 double로 구현돼요(소수점 이하 15자리의 정밀도). 하지만 표현 방식은 호스트 시스템에 따라 달라져요. 복소수는 real 부분과 imaginary 부분을 가지며, 둘 다 부동소수점 수로 표현돼요.

여러 프로그래밍 언어에 걸친 부동소수점 연산의 문제점과 한계를 더 자세히 알아보려면 0.30000000000000004.com과 The Python Tutorial을 살펴봐요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요

숫자 배우기

연습이 잠겨 있어요

숫자 개념을 연습하려면 연습 문제 3개를 더 잠금 해제해요