[파이썬 개념 2] 자료형
17과 "17"은 화면에서는 비슷해 보이지만 파이썬에게는 완전히 다른 값입니다. 하나는 계산할 수 있는 수이고, 하나는 글자입니다.
값의 종류를 자료형이라고 합니다. 자료형에 따라 할 수 있는 일이 달라지므로, 오류의 상당수는 자료형을 헷갈려서 생깁니다.
1. 기본 자료형 네 가지
| 자료형 | 이름 | 뜻 | 예 |
|---|---|---|---|
int |
정수 | 소수점이 없는 수 | 17, -3, 0 |
float |
실수 | 소수점이 있는 수 | 3.14, 0.5, 2.0 |
str |
문자열 | 글자들의 나열 | "hello", '17', "" |
bool |
논리형 | 참과 거짓 | True, False |
type() 으로 자료형을 확인할 수 있습니다.
print(type(17))
print(type(17.0))
print(type("17"))
print(type(True))
실행 결과
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
17과 17.0은 값은 같지만 자료형이 다릅니다. 소수점을 찍으면 실수입니다.
2. 정수 int
파이썬의 정수는 크기 제한이 거의 없습니다. 아주 큰 수도 그대로 계산합니다.
print(2 ** 100)
print(-7 + 3)
실행 결과
1267650600228229401496703205376
-4
3. 실수 float
나누기 / 의 결과는 나누어떨어져도 항상 실수입니다.
print(6 / 2)
print(type(6 / 2))
실행 결과
3.0
<class 'float'>
정수와 실수를 함께 계산하면 결과는 실수가 됩니다.
print(3 + 0.5)
print(2 * 1.0)
실행 결과
3.5
2.0
실수에는 아주 작은 오차가 있다
컴퓨터는 실수를 2진수로 저장하기 때문에 0.1 같은 수를 정확히 담지 못합니다.
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
실행 결과
0.30000000000000004
False
그래서 실수를 출력할 때는 자릿수를 정하고(f"{값:.2f}"), 실수끼리 == 로 비교하는 일은 되도록 피합니다.
계산 순서에 따라 결과가 미세하게 달라지기도 합니다.
n, p = 100, 57
print(n * p / 100)
print(n * (p / 100))
print(int(n * (p / 100)))
실행 결과
57.0
56.99999999999999
56
같은 계산처럼 보여도 마지막 줄은 57이 아니라 56이 되었습니다. 정수로 계산할 수 있는 것은 정수로 계산하는 편이 안전합니다(n * p // 100).
4. 문자열 str
작은따옴표나 큰따옴표로 감쌉니다. 둘 중 무엇을 써도 되지만 시작과 끝이 같아야 합니다.
a = "hello"
b = 'world'
c = "It's"
d = '그는 "안녕"이라고 말했다'
print(a, b, c, d)
실행 결과
hello world It's 그는 "안녕"이라고 말했다
글자 안에 작은따옴표가 있으면 큰따옴표로, 큰따옴표가 있으면 작은따옴표로 감싸면 됩니다.
문자열의 연산
print("3" + "4") # 이어 붙이기
print("하" * 3) # 반복
print(len("python")) # 글자 수
print("py" in "python")
실행 결과
34
하하하
6
True
숫자끼리 + 는 더하기, 문자열끼리 + 는 이어 붙이기입니다. 같은 기호가 자료형에 따라 다르게 동작합니다.
특수 문자
| 쓰는 법 | 뜻 |
|---|---|
\n |
줄바꿈 |
\t |
탭 |
\\ |
역슬래시 자체 |
\" |
큰따옴표 자체 |
print("첫 줄\n둘째 줄")
print("이름\t점수")
실행 결과
첫 줄
둘째 줄
이름 점수
5. 논리형 bool
참은 True, 거짓은 False 입니다. 첫 글자는 반드시 대문자입니다. 비교한 결과가 이 값입니다.
print(10 > 3)
print(10 == 3)
print(type(10 > 3))
실행 결과
True
False
<class 'bool'>
6. 자료형 바꾸기 (형 변환)
| 함수 | 하는 일 | 예 | 결과 |
|---|---|---|---|
int() |
정수로 | int("17"), int(3.9) |
17, 3 |
float() |
실수로 | float("3.5"), float(2) |
3.5, 2.0 |
str() |
문자열로 | str(17) |
"17" |
bool() |
논리형으로 | bool(0), bool("a") |
False, True |
print(int("17") + 3)
print(int(3.9))
print(int(-3.9))
print(round(3.9))
실행 결과
20
3
-3
4
int()는 실수의 소수점 아래를 버립니다(0 쪽으로). 반올림이 아닙니다.- 반올림이 필요하면
round()를 씁니다.
바꿀 수 없는 경우
print(int("3.5"))
실행 결과
ValueError: invalid literal for int() with base 10: '3.5'
int() 는 정수 모양의 문자열만 바꿀 수 있습니다. "3.5" 는 int(float("3.5")) 처럼 두 번에 나누어 바꿉니다.
"abc" 처럼 숫자가 아닌 글자는 어떤 방법으로도 수로 바꿀 수 없습니다.
자료형이 섞이면
age = 17
print("나이: " + age)
실행 결과
TypeError: can only concatenate str (not "int") to str
문자열과 정수는 + 로 이을 수 없습니다. 해결 방법은 세 가지입니다.
age = 17
print("나이: " + str(age))
print("나이:", age)
print(f"나이: {age}")
실행 결과
나이: 17
나이: 17
나이: 17
7. 참과 거짓으로 보는 값
조건문에서는 True, False 가 아닌 값도 참이나 거짓으로 판단합니다.
| 거짓으로 보는 값 | 참으로 보는 값 |
|---|---|
0, 0.0, ""(빈 문자열), [](빈 리스트) |
그 밖의 모든 값 |
print(bool(0), bool(5), bool(""), bool("0"), bool([]))
실행 결과
False True False True False
"0" 은 글자 0이 들어 있는 문자열이므로 참입니다.
정리
- 자료형은
int,float,str,bool네 가지부터 익힌다.type()으로 확인한다. /의 결과는 항상 실수이고, 실수에는 작은 오차가 있다.- 문자열은 따옴표로 감싸며,
+는 이어 붙이기,*는 반복이다. int(),float(),str()로 바꾼다.int()는 버림,round()는 반올림.- 문자열과 수를 섞어 쓰려면 자료형을 맞추거나 f-문자열을 쓴다.
확인 문제
- 다음 값들의 자료형을 쓰세요.
3,3.0,"3",3 > 2,7 / 7 int(2.99)와round(2.99)의 결과는 각각 무엇인가요?- 다음 코드의 결과를 예측하세요.
a = "5" b = 2 print(a * b) print(int(a) * b)
연습해 보기
확인 문제 정답
int,float,str,bool,float(/의 결과는 항상 실수)2와355와10: 첫 줄은 문자열 "5" 를 두 번 이어 붙인 것입니다.
댓글 0
로그인하면 댓글을 쓸 수 있습니다.