20260316 오늘의 학습: 파이썬 기초

Yesol Lee·2026년 3월 16일

COS Python

목록 보기
2/30

AI 학습 시스템을 만들고 첫 수업을 진행했다. 미리 만들어 둔 파일들을 Claude Code로 읽게 하고, Python 코드 작성은 VSCode에서 Jupyter를 이용했다. 학습은 크게 아래 3단계로 진행하였다.

  1. 수준 진단 테스트 (5문제)
  2. Java vs Python 핵심 차이 정리
  3. COS Pro 유형 연습 (3문제)

클로드코드와 jupyter로 연습

1. 수준 진단 테스트

자바 개발자라는 걸 알고, "프로그래밍은 아는데 Python 문법은 모르는" 전제로 5문제를 출제해줬다.

문제 1. Java → Python 변수 변환

// Java
int a = 10;
String name = "홍길동";
double pi = 3.14;
boolean isStudent = true;

내 답:

a = 10
name = "홍길동"
pi = 3.14
isStudent = True

정답! 핵심은 타입 선언이 필요 없다는 것과 True가 대문자라는 것.

추가로 배운 점: Python은 변수명을 snake_case로 쓰는 게 관례다. isStudentis_student

문제 2. 조건문 출력 결과

x = 15
if x > 20:
    print("A")
elif x > 10:
    print("B")
else:
    print("C")

정답: B — Java의 else if가 Python에서는 elif다.

문제 3. enumerate 출력 결과

fruits = ["사과", "바나나", "포도"]
for i, fruit in enumerate(fruits):
    print(i, fruit)

내 답:

0 사과
1 바나나
2 포도

정답! enumerate()는 (인덱스, 값) 튜플을 반환한다. Java에서 인덱스 따로 관리하는 것보다 훨씬 편하다.

문제 4. 리스트 슬라이싱 ← 틀림!

nums = [10, 20, 30, 40, 50]
print(nums[1:4])
print(nums[-2:])

처음 답: 20 30 40 / 40 30 20 10틀림

두 가지를 잘못 이해하고 있었다:

  • 슬라이싱 결과는 값 나열이 아니라 리스트로 반환된다
  • 음수 인덱스는 역순 출력이 아니라 뒤에서부터 위치를 세는 것이다
인덱스:    0    1    2    3    4
값:       10   20   30   40   50
음수:     -5   -4   -3   -2   -1

정답: [20, 30, 40] / [40, 50]

슬라이싱 핵심:

  • nums[1:4] → 인덱스 1부터 4 미만까지
  • nums[-2:] → 뒤에서 2번째부터 끝까지

문제 5. 함수 정의 빈칸 ← 반만 틀림

__(a)__ add(x, y):
    result = x + y
    __(b)__ result

(b) return은 맞았는데 (a)를 add라고 답했다. add는 이미 함수 이름인데...

정답: (a) def — "define(정의하다)"의 약자. Python에서 함수를 만드는 키워드다.

진단 결과

문제결과
변수/자료형1차 정답
조건문1차 정답
반복문1차 정답
슬라이싱2차 정답
함수 정의2차 정답

로직은 빠르게 파악하는데, Python 고유 문법에서 막히는 패턴이 보인다.


2. Java vs Python 핵심 차이

진단 후 자바 개발자가 알아야 할 차이점을 정리해줬다. 핵심만 요약하면:

항목JavaPython
타입 선언int x = 10;x = 10
블록 구분{ }들여쓰기
세미콜론필수불필요
출력System.out.println()print()
조건분기else ifelif
for문for(int i=0;i<n;i++)for i in range(n):
nullnullNone
booleantrue/falseTrue/False
생성자클래스명__init__
thisthisself

그 외 인상 깊었던 것들:

# f-string — Java의 String.format()보다 훨씬 편하다
print(f"이름: {name}, 나이: {age}")

# 리스트 컴프리헨션 — 한 줄로 리스트 생성
squares = [x**2 for x in range(5)]  # [0, 1, 4, 9, 16]

# swap — 임시변수 필요 없음
a, b = b, a

# in 연산자 — contains 대신
if "사과" in fruits:
    print("있다!")

리스트 메서드 비교 (자주 쓸 것 같아서 따로 정리)

JavaPython
list.add(x)list.append(x)
list.size()len(list)
list.get(i)list[i]
list.remove(i)list.pop(i)
list.contains(x)x in list

3. COS Pro 유형 연습

COS Pro 1급은 3가지 유형이 있다:

  • 빈칸 채우기 (7문제) — 코드 읽고 빈칸 완성
  • 디버깅 (7문제에 포함) — 버그 한 줄 수정
  • 함수 작성 (3문제) — 처음부터 구현

각 유형 1문제씩 풀어봤다.

연습 1. 빈칸 채우기 — 짝수 합계

def sum_even(numbers):
    total = 0
    for num in __(a)__:
        if __(b)__:
            total __(c)__ num
    return total

1차 정답! (a) numbers, (b) num % 2 == 0, (c) +=

Java 경험이 있으면 로직 자체는 어렵지 않다.

연습 2. 디버깅 — 가장 긴 문자열 찾기

def find_longest(words):
    longest = ""
    for word in words:
        if len(word) > len(longest):
            longest = word
        else:
            longest = word  # ← 버그!
    return longest

else에서도 longest = word를 하고 있어서, 짧은 단어도 덮어써버린다. longest = wordcontinue로 수정. 1차 정답!

연습 3. 함수 작성 — 중복 제거 + 정렬 ← 3번 만에 정답

정수 리스트에서 중복을 제거하고 오름차순 정렬한 리스트를 반환하라.

1차 시도:

return set(nums)

set()은 중복 제거는 되지만, 반환 타입이 집합(set)이지 리스트가 아니다. 정렬도 안 된다.

2차 시도:

tmp_set = set(nums)
tmp_list = []
for item in tmp_set:
    tmp_list.append(item)
return tmp_list

리스트 변환까지는 했는데 정렬을 빼먹었다.

3차 시도 (정답):

return sorted(set(nums))

배운 점:

  • sorted()는 어떤 iterable이든 받아서 정렬된 리스트를 반환한다
  • set을 굳이 list()로 감싸지 않아도 sorted()가 알아서 리스트로 만들어준다

오늘 발견한 약점

  1. 리스트 슬라이싱 — 반환 형태, 음수 인덱스 헷갈림
  2. Python 키워드def 같은 기본 키워드 숙지 부족
  3. 자료형 변환 — set → list, sorted() 같은 내장함수 활용 미숙

Java로 로직 짜는 건 익숙한데, Python스러운 코드를 쓰는 연습이 필요하다.

다음 학습 예정

  • 리스트 심화 (슬라이싱 추가 연습, 2차원 배열)
  • 딕셔너리 활용 (빈도 카운팅)
  • Python 내장함수 정리 (sorted, len, range, enumerate, zip 등)
profile
문서화를 좋아하는 개발자

0개의 댓글