2주차 — 변수와 자료형
변수에 값을 담고, int·float·str·bool 4가지 기본 자료형을 다루고, type() 으로 타입을 확인하고, int()/float()/str() 로 형 변환합니다. None 의 의미도 익힙니다.
이 강의에서 배우는 것
- 1변수의 개념과 할당 문법을 이해한다
- 24가지 기본 자료형(int, float, str, bool)을 구분한다
- 3type() 으로 변수의 타입을 확인한다
- 4int(), float(), str() 으로 형 변환한다
- 5None 의 의미를 안다
1. 변수란
변수는 값에 이름을 붙인 것입니다. 메모리의 어떤 공간에 데이터를 저장하고, 그 공간을 이름으로 불러옵니다.
age = 20 # age 라는 변수에 20을 담음
name = "홍길동" # name 에 문자열을 담음
print(age) # 20 출력= 은 수학의 "같다"가 아니라 할당(assign) 입니다. 오른쪽 값을 왼쪽 변수에 넣는다는 뜻.
변수 명명 규칙
- 영문, 숫자, _ 만 사용. 첫 글자는 숫자 불가
- 대소문자 구분 (age ≠ Age)
- if, for 같은 예약어는 못 씀
- 관례: snake_case (user_name, total_score)
2. 기본 자료형
| 타입 | 예시 | 설명 |
|---|---|---|
| int | 10, -3, 0 | 정수 |
| float | 3.14, -0.5 | 실수 (소수) |
| str | "hello", '안녕' | 문자열 (작은/큰따옴표 둘 다) |
| bool | True, False | 참/거짓 (대문자 시작!) |
| NoneType | None | "값이 없음"을 나타냄 |
3. 형 변환 (Type Casting)
타입을 강제로 바꿉니다. 입력 받은 값은 항상 문자열이라 숫자로 바꿔야 계산할 수 있습니다.
num_str = "123"
num_int = int(num_str)
print(num_int + 7) # 130| 함수 | 설명 |
|---|---|
| int(x) | x를 정수로 변환 |
| float(x) | x를 실수로 변환 |
| str(x) | x를 문자열로 변환 |
| bool(x) | x를 불리언으로 변환 |
불가능한 변환은 ValueError:
int("abc") # ValueError: invalid literal for int() with base 10: 'abc'4. type() 함수
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hi")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>5. 자주 하는 실수
1) 변수 이름을 숫자로 시작
2nd_player = "Bob" # SyntaxError→ second_player 또는 player2 로.
2) True/False 를 소문자로
is_ok = true # NameError→ 첫 글자 대문자: True, False, None.
3) 문자열에 따옴표 빠짐
name = 홍길동 # NameError: name '홍길동' is not defined4) 정수/문자열 혼합 더하기
age = 20
print("나이: " + age) # TypeError→ print("나이: " + str(age)) 또는 f-string f"나이: {age}".
5) input() 결과를 그대로 계산
n = input("숫자: ") # 항상 문자열!
print(n + 1) # TypeError→ n = int(input("숫자: "))
6. FAQ
Q1. ' 와 " 는 차이가 있나요?
기능적으로 동일합니다. 다만 문자열 안에 따옴표를 넣고 싶을 때 다른 종류를 사용하면 편합니다 ("It's me").
Q2. 변수에는 어떤 타입이든 다시 할당할 수 있나요?
네. 파이썬은 동적 타입이라 x = 10 한 뒤 x = "hello" 해도 됩니다. 다만 가독성 때문에 권장하지 않습니다.
Q3. 0 과 False 는 같은가요?
비교(==)하면 True지만 타입은 다릅니다. int vs bool.
Q4. 숫자에 콤마를 넣어도 되나요?
안 됩니다. 콤마 대신 언더스코어 사용 가능: 1_000_000 (가독성용).
💻 예제 (examples)
실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.
name = "홍길동"
age = 20
height = 175.5
is_student = True
print(name, age, height, is_student)
age = 21 # 변수는 다시 할당 가능
print("내년 나이:", age)
홍길동 20 175.5 True
내년 나이: 21print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'NoneType'>num_str = "123"
num_int = int(num_str)
print(num_int + 7) # 130
pi_str = "3.14"
pi_float = float(pi_str)
print(pi_float * 2) # 6.28
age = 20
print("나이: " + str(age)) # 나이: 20
print(int(3.9)) # 3 (소수점 버림)
print(bool(0), bool(1), bool("")) # False True False
130
6.28
나이: 20
3
False True False# 의도적으로 에러를 발생시키는 예제
# 실행하면 ValueError 메시지가 나옵니다 — 정상입니다
print("'abc'를 정수로 변환 시도...")
try:
int("abc")
except ValueError as e:
print("에러 발생:", e)
print("'1.5'를 정수로 직접 변환 시도...")
try:
int("1.5")
except ValueError as e:
print("에러 발생:", e)
print("이 경우는 float() 후 int() 로 두 번 변환:")
print(int(float("1.5"))) # 1
'abc'를 정수로 변환 시도...
에러 발생: invalid literal for int() with base 10: 'abc'
'1.5'를 정수로 직접 변환 시도...
에러 발생: invalid literal for int() with base 10: '1.5'
이 경우는 float() 후 int() 로 두 번 변환:
1📝 과제 (exercises)
직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.
만 나이 계산기
목표: 사용자에게 출생연도를 입력받아 만 나이를 출력한다.
- 현재 연도는 코드 안에 상수로 정의 (예: CURRENT_YEAR = 2026)
- input() 으로 출생연도 입력
- 입력값을 정수로 변환 후 만 나이 계산
- 결과 출력
$ python age.py
출생연도: 2005
만 나이: 21- · 입력 받기 — 30%
- · 형 변환 — 30%
- · 정확한 계산과 출력 — 40%
▶정답 코드 펼치기 / 접기
CURRENT_YEAR = 2026
birth_year = int(input("출생연도: "))
age = CURRENT_YEAR - birth_year
print(f"만 나이: {age}")
출생연도: 2005
만 나이: 215개 변수 + 타입 출력
목표: 서로 다른 자료형의 변수를 5개 선언하고, 값과 타입을 함께 출력한다.
- 변수 5개 (각각 다른 의미를 갖는 이름)
- 자료형은 최소 3종류 이상 포함 (int, float, str, bool 중)
- 각 변수마다 값과 타입을 한 줄에 출력
name = 홍길동 (<class 'str'>)
age = 20 (<class 'int'>)
height = 175.5 (<class 'float'>)
is_student = True (<class 'bool'>)
country = 한국 (<class 'str'>)- · 변수 5개 이상 — 50%
- · 3종류 이상의 자료형 — 30%
- · 출력 형식 — 20%
▶정답 코드 펼치기 / 접기
name = "홍길동"
age = 20
height = 175.5
is_student = True
country = "한국"
print(f"name = {name} ({type(name)})")
print(f"age = {age} ({type(age)})")
print(f"height = {height} ({type(height)})")
print(f"is_student = {is_student} ({type(is_student)})")
print(f"country = {country} ({type(country)})")
name = 홍길동 (<class 'str'>)
age = 20 (<class 'int'>)
height = 175.5 (<class 'float'>)
is_student = True (<class 'bool'>)
country = 한국 (<class 'str'>)4가지 자료형 모두 사용
목표: 짧은 프로그램 안에서 int, float, str, bool 을 각각 한 번 이상 사용한다.
- 자유 주제 (예: 내 컴퓨터 사양, 좋아하는 카페 정보, 강아지 정보)
- 4가지 자료형이 모두 등장
- 결과를 깔끔하게 출력
$ python pet.py
[강아지 정보]
이름: 초코 (str)
나이: 3년 (int)
몸무게: 4.2kg (float)
중성화 여부: True (bool)- · 4가지 자료형 모두 사용 — 60%
- · 출력이 의미 있음 — 40%
▶정답 코드 펼치기 / 접기
name = "초코"
age = 3
weight = 4.2
neutered = True
print("[강아지 정보]")
print(f"이름: {name} (str)")
print(f"나이: {age}년 (int)")
print(f"몸무게: {weight}kg (float)")
print(f"중성화 여부: {neutered} (bool)")
[강아지 정보]
이름: 초코 (str)
나이: 3년 (int)
몸무게: 4.2kg (float)
중성화 여부: True (bool)