1 / 32
WEEK 3

파이썬 기초 문법 1

입출력, 기본 자료형, 그리고 데이터 장바구니 만들기

SECTION 01

변수와 입출력 기초

데이터에 이름을 붙이고, 컴퓨터와 대화하기

01

CPU · RAM · 디스크와 변수의 관계

파이썬 코드는 세 장치가 역할을 나누어 처리하며, 변수는 RAM 속 데이터에 붙이는 이름표입니다.

CPU · 두뇌

연산 처리

덧셈·비교·함수 실행 등 프로그램의 명령을 실제로 처리합니다.

RAM · 작업대

실행 중 데이터

CPU가 바로 읽고 쓸 데이터를 잠시 보관합니다. 전원이 꺼지면 내용이 사라집니다.

디스크 · 창고

영구 저장

파일을 오래 보관하지만 RAM보다 느리므로 데이터를 RAM으로 불러와 처리합니다.

디스크의 파일 → RAM에 로드 → 변수로 데이터 참조 → CPU가 연산

01

화면에 띄우고, 사용자에게 받기

PRINT & INPUT

가장 기본이 되는
입력과 출력 함수입니다.

데이터를 확인하려면 화면에 출력해야 하고, 프로그램이 시작되려면 질문을 던져 값을 받아야 합니다.

  • print(): 소괄호 안의 데이터를 화면에 출력합니다.
  • input(): 사용자가 값을 입력할 수 있도록 창(또는 커서)을 띄웁니다. 항상 문자열 형태로 입력받습니다.

입출력 기본 예시

# 출력하기
print("데이터 분석을 시작합니다.")
> 데이터 분석을 시작합니다.

# 사용자에게 입력받기
name = input("이름이 무엇인가요? ")
print(name)
01

변수(Variable): 데이터를 담는 상자

VARIABLE

데이터에 이름표를 붙여서
필요할 때마다 꺼내 씁니다.

  • 파이썬에서 = 기호는 '같다'가 아니라, '오른쪽의 값을 왼쪽 상자에 넣어라(대입)'는 의미입니다.
  • 들어오는 데이터의 형태(숫자, 글자 등)에 따라 상자의 성격이 알아서 결정됩니다. (동적 타입)

변수 할당 예시

age = 22
major = "소프트웨어"

print(age)
> 22

# 콤마(,)를 사용해 여러 개 출력 가능
print(age, major)
> 22 소프트웨어
01

기본 자료형: 데이터의 종류

int (정수)

소수점이 없는 깔끔한 숫자입니다. (예: 10, -5)

float (실수)

소수점이 있는 숫자입니다. 정밀한 계산에 씁니다. (예: 3.14)

str (문자열)

따옴표(', ")로 감싸진 텍스트입니다. (예: "Hello")

타입이 다르면 섞을 수 없습니다

숫자는 숫자끼리 계산해야 합니다. 숫자와 글자를 그냥 더하면 에러가 납니다.

a = 10 # 정수
b = "20" # 글자

print(a + b)
# TypeError 발생!
01

Google Colab에서 코드 설명 확인하기

COLAB HELP

변수나 함수 뒤에 ?를 붙이면
Colab 도움말을 확인할 수 있습니다.

  • # 뒤의 내용은 실행되지 않는 한 줄 주석입니다.
  • 변수?는 타입, 값의 표현, 길이와 설명을 보여줍니다.
  • 함수?는 함수의 사용법과 매개변수 설명을 보여줍니다.
  • 큰따옴표 또는 작은따옴표 3개로 여러 줄 문자열을 작성할 수 있습니다.
# Colab 코드 셀에서 실행
myBook = (2019, "Python for Data Analysis",
          "웨스 맥키니", 664)

myBook?

Type: tuple
Length: 4
Docstring: Built-in immutable sequence.


len?
# len 함수의 사용법이 도움말로 표시됨
01

형변환(Type Casting): 데이터 모양 바꾸기

TYPE CASTING

앞서 발생한 에러를 막으려면, 데이터의 형태를 강제로 맞춰주어야 합니다.

  • int(): 글자나 실수를 정수로 바꿉니다.
  • str(): 숫자를 글자로 바꿉니다.
  • float(): 글자나 정수를 실수로 바꿉니다.

형변환 예시

a = 10
b = "20"

# b를 정수로 바꿔서 더하기
print(a + int(b))
> 30

# input()으로 받은 값은 항상 글자이므로
# 숫자로 쓰려면 변환이 필수!
age = int(input("나이: "))
SECTION 02

연산자와 문자열 조작

계산하고, 자르고, 데이터를 내 입맛에 맞게 바꾸기

02

사칙연산과 특수 연산자

일반적인 더하기(+), 빼기(-), 곱하기(*) 외에 파이썬에서 자주 쓰이는 유용한 연산자들이 있습니다.

  • / (나누기): 소수점까지 정확히 나눕니다.
  • // (몫): 나누었을 때 몫만 남깁니다.
  • % (나머지): 나눈 후 남은 나머지 값을 구합니다. (홀/짝 구분에 유용!)
  • ** (거듭제곱): 숫자를 거듭해서 곱합니다.
print(10 / 3)
> 3.3333333333333335

print(10 // 3) # 몫
> 3

print(10 % 3) # 나머지
> 1

print(2 ** 3) # 2의 3제곱
> 8
02

글자도 더하고 곱할 수 있습니다

STRING OPERATIONS

글자끼리 더하면 연결되고,
숫자를 곱하면 반복됩니다.

파이썬은 문자열에 사칙연산 기호를 직관적으로 적용할 수 있어 매우 편리합니다.

# 문자열 더하기 (연결)
word1 = "Python"
word2 = " 최고!"
print(word1 + word2)
> Python 최고!

# 문자열 곱하기 (반복)
line = "-" * 20
print(line)
> --------------------
02

문자열 조작하기 (가르기, 바꾸기, 자르기)

.split()

띄어쓰기나 특정 기호를 기준으로 텍스트를 쪼갭니다.

.replace()

특정 단어를 다른 단어로 교체합니다.

슬라이싱 [시작:끝]

시작 위치부터 끝 위치 직전까지만 텍스트를 잘라옵니다. (위치 번호는 0부터 시작)

text = "2026-09-13"

# '-'를 기준으로 쪼개기
print(text.split('-'))
> ['2026', '09', '13']

# '-'를 '.'으로 바꾸기
print(text.replace('-', '.'))
> 2026.09.13

# 연도만 슬라이싱으로 빼내기 (0~3번째)
print(text[0:4])
> 2026
02

문자열 포맷팅과 숫자 반올림

FORMAT & ROUND

출력 형식을 정돈하고,
소수점을 반올림합니다.

  • format(): 문자열의 템플릿에 값을 채워넣습니다. { } 를 자리표시자로 사용합니다.
  • round(숫자, 자리수): 숫자를 소수점 특정 자리에서 반올림합니다.
# format() 으로 문자열 포맷팅
name = "홍길동"
age = 30
print("이름: {}, 나이: {}세".format(name, age))
> 이름: 홍길동, 나이: 30 세

# round() 로 소수점 반올림
pi = 3.14159265
print(round(pi, 2))
> 3.14

# format 으로 소수점 자리 지정
price = 10000
print("가격: {:,}원".format(price))
> 가격: 10,000 원
SECTION 03

시퀀스(Sequence) 자료형

여러 데이터를 한 번에 모아서 관리하는 리스트와 튜플

03

리스트: 자유로운 장바구니

MUTABLE (가변)

언제든 물건을 넣고, 빼고, 바꿀 수 있는 장바구니입니다.

  • 대괄호 [ ] 를 사용하여 만듭니다.
  • 가장 널리 쓰이며, 여러 형태의 데이터를 한 번에 담을 수 있습니다.
  • 내용물을 수정할 수 있다(가변성)는 점이 핵심입니다.
# 빈 리스트 만들기
cart = []

# 값이 들어있는 리스트
students = ["가석현", "김철수", "이영희"]

# 위치(색인)로 접근하여 값 변경
students[1] = "박철수"
print(students)
> ['가석현', '박철수', '이영희']
03

리스트: 항목 추가·삭제·정렬하기

리스트 전용 도구(메서드)를 사용하면 항목을 손쉽게 조작할 수 있습니다.

  • append(값): 리스트 맨 끝에 값을 추가합니다.
  • remove(값): 리스트에서 특정 값을 찾아 지웁니다.
  • sort(): 리스트 항목을 오름차순으로 정렬합니다. (reverse=True는 내림차순)
  • reverse(): 리스트 순서를 거꾸로 뒤집습니다.
  • len(리스트): 장바구니에 담긴 항목의 개수를 셉니다.
cart = ["사과", "바나나"]

# 항목 추가
cart.append("포도")
print(cart)
> ['사과', '바나나', '포도']

# 항목 삭제
cart.remove("사과")
print(cart)
> ['바나나', '포도']

# 순서 정렬 (내림차순)
cart.sort(reverse=True)
print(cart)
> ['포도', '바나나']

# 순서 뒤집기
cart.reverse()
print(cart)
> ['바나나', '포도']

# 데이터 개수 확인
print(len(cart)) > 2
03

튜플: myBook 만들기

TUPLE · IMMUTABLE

책 한 권의 정보를
정해진 순서로 묶어 봅시다.

  • 소괄호 ( ) 를 사용하거나, 괄호 없이 쉼표로 나열하여 만듭니다.
  • 각 항목은 출판연도, 제목, 저자, 페이지 수의 순서입니다.
  • 한번 저장한 항목은 바꿀 수 없는 불변(immutable) 자료형입니다.
# 괄호를 생략해도 튜플로 생성됨
myBook = 2019, "Python for Data Analysis",
         "웨스 맥키니", 664

print(type(myBook))
> <class 'tuple'>

print(myBook)
> (2019, 'Python for Data Analysis',
  '웨스 맥키니', 664)


# 항목 변경은 불가능
myBook[3] = 700
# TypeError: 'tuple' object does not support item assignment
03

튜플: myBook의 인덱스로 항목 조회하기

인덱스는 앞에서 0부터,
뒤에서는 -1부터 셉니다.

  • myBook[0]: 첫 번째 항목인 출판연도
  • myBook[-1]: 마지막 항목인 페이지 수
  • len(myBook): 전체 항목 개수
  • 유효 범위를 벗어나면 IndexError가 발생합니다.
print(myBook[0])
> 2019

print(myBook[2])
> 웨스 맥키니

print(myBook[-1])
> 664

print(myBook[len(myBook) - 1])
> 664

myBook[4]
# IndexError: tuple index out of range
03

튜플: 패킹과 언패킹

PACKING

여러 값을 하나의 튜플로 묶는 것을 패킹, 튜플의 값을 여러 변수로 나누어 담는 것을 언패킹이라고 합니다.

주의: 언패킹할 변수 개수와 튜플의 항목 개수가 같아야 합니다.

# 패킹: 여러 값 → 하나의 튜플
myBook = 2019, "Python for Data Analysis",
         "웨스 맥키니", 664

# 언패킹: 튜플 → 여러 변수
year, title, author, pages = myBook

print(year, author)
> 2019 웨스 맥키니

print(title, pages)
> Python for Data Analysis 664
03

튜플: 항목 변경과 변수 재대입

항목 변경 · 불가능
myBook[3] = 700

# 기존 튜플 객체의 항목을 바꾸려 하므로
# TypeError 발생
변수 재대입 · 가능
myBook = (2023, "생생 데이터 분석",
          "조인석", 435)

# 새 튜플 객체를 만들고
# myBook 이름표를 새 객체에 붙임

튜플이 불변이라는 말은 객체 내부의 항목을 바꿀 수 없다는 뜻입니다. 변수는 다른 객체를 다시 가리킬 수 있습니다.

03

리스트·튜플: 슬라이싱의 세 요소

[시작:끝:간격]을 함께 써서
필요한 항목만 선택합니다.

  • 시작 1: 인덱스 1부터 선택합니다.
  • 끝 5: 인덱스 5는 포함하지 않습니다.
  • 간격 2: 두 칸씩 이동하므로 인덱스 1, 3을 선택합니다.
  • 각 요소는 필요하지 않으면 생략할 수 있습니다.
  • 슬라이싱 결과는 원본과 같은 자료형으로 만들어집니다.
nums = [0, 1, 2, 3, 4, 5]

print(nums[1:4])
> [1, 2, 3]

print(nums[:3])
> [0, 1, 2]

# 시작 1, 끝 5, 간격 2를 함께 사용
print(nums[1:5:2])
> [1, 3]

print(myBook[1:3])
> ('Python for Data Analysis', '웨스 맥키니')
03

리스트·튜플: 무엇을 선택할까?

튜플 ( )
  • 변경하면 안 되는 원본·좌표·설정값
  • 불변이라 실수로 수정하는 일을 방지
  • 항목 변경이 필요 없다면 먼저 고려
리스트 [ ]
  • 계속 추가·수정·삭제할 작업 데이터
  • 다양한 변경 메서드 제공
  • 분석 과정에서 내용이 바뀌면 적합
numbers = [1, 2, 3, 4]
fixed_numbers = tuple(numbers)  # 리스트 → 튜플
editable_numbers = list(fixed_numbers)  # 튜플 → 리스트
03

리스트·튜플: TypeError와 IndexError

리스트와 튜플을 사용할 때 자주 만나는 오류의 종류와 발생 원인을 예제로 확인합니다.

TypeError

서로 다른 자료형끼리 연산하거나, 불변(immutable) 객체를 수정하려 할 때 발생합니다.

IndexError

리스트나 튜플의 유효한 인덱스 범위를 벗어난 위치에 접근하려 할 때 발생합니다.

items = ["A", "B", "C"]

# 인덱스는 0부터 시작 → 유효 범위: 0, 1, 2
print(items[3])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

오류 메시지 확인: 마지막 줄의 오류 종류(IndexError)와 발생 원인(list index out of range)을 확인합니다.

03

리스트: 원하는 위치에 넣고 빼기

리스트는 원하는 위치에 값을 넣거나, 특정 위치의 값을 꺼내면서 삭제할 수 있습니다.

  • insert(위치, 값): 지정한 인덱스에 값을 삽입합니다.
  • pop(위치): 지정한 인덱스의 값을 꺼내면서 삭제합니다. (인자 없으면 마지막)
  • index(값): 값이 있는 첫 번째 인덱스를 반환합니다.
  • count(값): 리스트에서 값이 등장하는 횟수를 셉니다.
nums = [10, 20, 30, 20, 40]

# 1 번 위치에 15 삽입
nums.insert(1, 15)
print(nums)
> [10, 15, 20, 30, 20, 40]

# 마지막 값 꺼내기
last = nums.pop()
print(last, nums)
> 40 [10, 15, 20, 30, 20]

# 20 이 있는 첫 번째 위치 찾기
print(nums.index(20))
> 2

# 20 이 등장하는 횟수 세기
print(nums.count(20))
> 1
03

리스트: 얕은 복사와 깊은 복사

단순 리스트는 슬라이싱으로 복사할 수 있지만, 중첩 리스트의 내부 항목까지 완전히 분리하려면 깊은 복사가 필요합니다.

  • 얕은 복사: 바깥 리스트만 새로 만들고 내부 리스트는 공유합니다.
  • 깊은 복사: 내부 리스트까지 모두 새 객체로 복제합니다.
import copy

scores = [[80, 90], [70, 85]]

shallow = scores[:]  # 얕은 복사
deep = copy.deepcopy(scores)  # 깊은 복사

shallow[0][0] = 100
print(scores)
> [[100, 90], [70, 85]]

deep[1][0] = 0
print(scores)
> [[100, 90], [70, 85]]
03

딕셔너리: 키 - 값 쌍으로 데이터 관리

KEY - VALUE PAIR

이름표 (키)를 붙여
데이터를 꺼내는 사물함입니다.

  • 중괄호 { }키 : 값 쌍으로 만듭니다.
  • 키를 사용해 값을 추가, 조회, 삭제할 수 있습니다.
  • 키는 중복될 수 없으며, 값은 어떤 타입도 가능합니다.
# 딕셔너리 생성
student = {
  "name": "김철수",
  "age": 22,
  "major": "소프트웨어"
}

# 키로 값 조회
print(student["name"])
> 김철수

# 키로 값 추가/수정
student["grade"] = 3.5
print(student)
03

딕셔너리: 메서드로 안전하게 다루기

딕셔너리는 존재하지 않는 키로 접근하면 에러가 납니다. 안전한 메서드를 사용하세요.

  • get(키): 키가 없으면 None 을 반환합니다. (에러 없음)
  • get(키, 기본값): 키가 없으면 기본값을 반환합니다.
  • keys(): 모든 키를 반환합니다.
  • values(): 모든 값을 반환합니다.
  • items(): 모든 (키, 값) 쌍을 반환합니다.
  • del 딕셔너리 [키]: 키 - 값 쌍을 삭제합니다.
student = {"name": "김철수", "age": 22}

# get(키): 존재하는 키 조회
print(student.get("name"))
> 김철수

# get(키): 없는 키는 None 반환
print(student.get("grade"))
> None
# get(키, 기본값): 없는 키는 기본값 반환
print(student.get("grade", 0))
> 0

# keys(): 모든 키 확인
print(student.keys())
> dict_keys(['name', 'age'])

# values(): 모든 값 확인
print(student.values())
> dict_values(['김철수', 22])

# items(): 모든 (키, 값) 쌍 확인
print(student.items())
> dict_items([('name', '김철수'), ('age', 22)])

# del: 키 - 값 쌍 삭제
del student["age"]
print(student)
> {'name': '김철수'}
03

딕셔너리: 전체 항목 순회하기

딕셔너리를 순회하면
기본적으로 를 꺼냅니다.

  • for key in 딕셔너리: 키를 하나씩 순회합니다.
  • items(): 각 항목을 (키, 값) 튜플로 반환합니다.
  • for key, value in ...: 튜플을 즉시 언패킹합니다.
  • 조건문을 결합하면 원하는 항목만 추출할 수 있습니다.
family = {"안나": 12, "신후": 9, "우진": 2}

for key in family:
    print(key, family[key])
> 안나 12
> 신후 9
> 우진 2


for key, value in family.items():
    if value < 10:
        print(key)
> 신후
> 우진
SECTION 04

3주 차 실습 및 퀴즈

코랩(Colab)으로 직접 코딩하고, LXP 퀴즈로 학습 내용을 점검하기

04

[실습 1] 입력받아 연산하고 출력하기

사용자로부터 두 정수를 입력받아 int()로 변환한 뒤, 나누기·몫·나머지를 출력합니다.

수행 목표

  • input()으로 데이터 입력받기
  • int()를 이용해 문자를 숫자로 변환하기
  • /, //, % 연산자로 나누기·몫·나머지 확인하기
  • 0으로 나눌 수 없음을 이해하고, 두 번째 수에는 0이 아닌 값 입력하기

실습 가이드 코드

# 1. 입력받고 숫자로 변환
num1 = input("첫 번째 숫자: ")
num2 = input("두 번째 숫자: ")

n1 = int(num1)
n2 = int(num2)

# 2. 연산 및 출력
print("나누기:", n1 / n2)
print("몫:", n1 // n2)
print("나머지:", n1 % n2)
04

[실습 2] 리스트 조작과 딕셔너리 활용

리스트에 항목을 추가/삭제/삽입하고, 딕셔너리로 데이터를 관리하는 실습을 합니다.

수행 목표

  • 리스트 append(), insert(), pop() 메서드 활용
  • 딕셔너리 생성 및 키 - 값 조회/추가/삭제
  • get(), keys(), values() 메서드 실습

실습 가이드 코드

# 1. 리스트 조작
items = ["사과", "바나나"]
items.append("포도")
items.insert(1, "오렌지")
last = items.pop()
print(items, last)

# 2. 딕셔너리 활용
person = {"name": "홍길동", "age": 30}
person["city"] = "서울"
print(person.get("city"))
print(person.keys())
del person["age"]
04

실습 및 LXP 퀴즈 안내

1

실습 1 실행

코랩(Colab)에서 두 숫자를 입력받아 나누기, 몫, 나머지를 출력해 봅니다. 두 번째 숫자는 0이 아닌 값으로 입력하세요.

2

실습 2 실행

리스트의 추가·삽입·삭제와 딕셔너리의 조회·추가·삭제 코드를 실행하고 결과를 확인합니다.

3

LXP 퀴즈 풀기

LXP의 [3주 차 퀴즈]에 접속해 수업 내용을 복습한 뒤, 지정된 기한 안에 모든 문항을 풀고 제출합니다.