2편에서 uv run으로 코드를 돌릴 준비를 마쳤으니, 이제는 코드 안에서 데이터를 다룰 차례입니다. 변수는 값을 이름에 담아두는 도구이고, 자료형은 그 값이 어떻게 생겼는지 설명하는 규칙입니다. 이번 글에서는 문자열과 숫자, 리스트와 딕셔너리까지 기본 자료형을 훑고, 사용자 입력을 받아 처리한 뒤 출력하는 짧은 예제를 만들어 봅니다.
이번 글에서 새로 나오는 용어
- snake_case: 단어 사이를 밑줄로 잇는 변수 표기법으로 Python에서 가장 흔한 이름 규칙
- JSON: 키-값 쌍과 배열로 데이터를 표현하는 텍스트 형식으로 딕셔너리·리스트와 거의 동일한 구조
- BMI: 체질량지수로 몸무게를 키의 제곱으로 나눠 건강 상태를 대략 판단하는 지표
핵심 개념
학습 메모
- 소요 시간: 45분
- 준비물:
uv run으로 스크립트를 실행해 본 경험- 학습 목표: 기본 자료형을 선언·변환해 입력-출력 흐름 완성하기
변수는 "값에 붙인 이름"이고 자료형은 "값의 생김새"입니다. 문자열, 숫자, 리스트, 딕셔너리를 묶어서 이해하면 입력-처리-출력 흐름이 한 번에 잡힙니다.
코드로 따라하기
변수 선언과 재할당
Python에서는 타입을 따로 적지 않고 바로 값을 넣습니다. 중요한 건 "값이 바뀔 수 있는가"보다 "이 이름이 무엇을 가리키는가"를 명확히 하는 것입니다.
user_name = "지민"
login_count = 1
print(user_name)
login_count = login_count + 1
print(login_count)
변수 이름은 소문자와 밑줄을 조합해 snake_case로 작성하는 것이 일반적입니다. snake_case는 단어 사이를 밑줄로 잇는 표기법이라 읽기 쉽습니다.
숫자와 문자열
- 정수
int: 1, 42, -5 - 실수
float: 0.1, 3.14 - 문자열
str: "hello"
문자열 포매팅은 f-string으로 작성하는 것이 가장 읽기 쉽습니다.
team = "backend"
members = 4
message = f"{team} 팀 인원은 {members}명입니다."
print(message)
불리언과 비교 연산
불리언은 참/거짓을 나타내는 자료형입니다. 조건문에서 자주 쓰이므로 비교 연산과 함께 익혀야 합니다.
score = 78
is_pass = score >= 70
print(is_pass) # True
리스트와 딕셔너리
- 리스트(list)는 순서가 있는 값들의 묶음입니다.
tasks = ["메일 확인", "데이터 백업", "리포트 작성"]
print(tasks[0])
tasks.append("배포 로그 점검")
- 딕셔너리(dict)는 키-값 쌍으로 정보를 저장합니다.
user = {
"name": "지민",
"role": "analyst",
"active": True,
}
print(user["role"])
user["active"] = False
리스트와 딕셔너리는 JSON과도 구조가 비슷해서 이후 API를 다룰 때 자연스럽게 연결됩니다.
🧠 JSON이란? JavaScript Object Notation의 약자로, 키-값 쌍과 배열로 구성된 텍스트 데이터 형식입니다. 대부분의 웹 API와 설정 파일이 JSON을 사용하기 때문에 Python의 딕셔너리·리스트 감각이 그대로 통합니다.
실전 예시: 동아리 출석표 자동 정리
CSV에서 읽은 데이터를 리스트와 딕셔너리로 재구성하면 웹 서비스 DB에 넣기 전 검증을 쉽게 할 수 있습니다.
rows = [
"이름,지각,참여도",
"민수,0,5",
"하린,1,4",
]
headers = rows[0].split(",")
records = []
for row in rows[1:]:
values = row.split(",")
record = {key: value for key, value in zip(headers, values)}
record["지각"] = int(record["지각"])
record["참여도"] = int(record["참여도"])
records.append(record)
print(records)
이렇게 만든 자료 구조는 바로 JSON으로 직렬화하거나 CSV·데이터베이스로 내보낼 수 있어 실무 연결이 빠릅니다.
입력-처리-출력 흐름 예제
간단한 체질량지수(BMI) 계산을 통해 자료형을 함께 써 봅니다.
height_cm = float(input("키(cm)를 입력하세요: "))
weight = float(input("몸무게(kg)를 입력하세요: "))
height_m = height_cm / 100
bmi = weight / (height_m ** 2)
result = {
"height": height_cm,
"weight": weight,
"bmi": round(bmi, 2),
}
print(f"BMI는 {result['bmi']} 입니다.")
여기서 input()은 항상 문자열을 반환하기 때문에 숫자 연산을 하려면 float()나 int()로 변환해야 한다는 점을 기억하세요.
왜 중요한가
변수와 자료형 감각이 잡혀야 if문, for문 같은 제어문을 도입할 수 있습니다. 또 리스트·딕셔너리 구조는 JSON과 거의 같아서 이후 API 응답을 다룰 때 바로 연결됩니다. 입력-처리-출력 흐름을 코드로 한 번이라도 돌려 보면, "데이터를 담고 꺼내는 법"이 몸에 붙습니다.
실습
- 따라 하기: BMI 예제를 그대로 따라 하면서 각 변수 타입을
print(type(...))로 확인합니다. - 확장하기: 리스트와 딕셔너리를 이용해 3명 이상의 BMI 결과를 저장하고 평균 BMI를 계산합니다.
- 디버깅: 입력값을 빈 문자열로 넣어
ValueError를 발생시키고,if not value:검증으로 예외를 막습니다. - 완료 기준: 사용자 입력을 받아 리스트·딕셔너리에 저장하고 요약 메시지를 출력하는 흐름을 완성했을 때입니다.
마무리
오늘은 변수와 자료형을 통해 "데이터를 담고 꺼내는 법"을 익혔습니다. 이 감각이 있어야 조건문과 반복문이 왜 필요한지도 자연스럽게 느껴집니다. 다음 글에서는 조건문과 반복문을 묶어서 프로그램 흐름을 제어하는 방법을 살펴보겠습니다.
💬 댓글
이 글에 대한 의견을 남겨주세요