자격증/정보처리기사 실기

정처기 실기 파이썬 출력 문제 정리 (슬라이싱·기본 인자)

공감(공부하는감자) 2026. 6. 23. 13:50

안녕하세요, 공부하는 감자입니다 🥔

파이썬은 문법이 짧아서 "이건 됐고" 하며 넘기기 쉬운 과목인데, 실기에서는 바로 그 짧은 문법에 숨은 규칙을 노립니다. 출제는 1~2문제지만 부분 점수 없이 출력값을 통째로 맞혀야 해서, 한 글자 차이로 문제 하나가 날아가요.

제가 풀면서 실제로 헷갈렸던 함정들을 출력값과 함께 정리했습니다.

함정 1 — 슬라이싱의 stop은 미포함

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

규칙은 세 줄이면 끝나요. stop은 미포함, 음수 인덱스는 뒤에서부터(-1이 마지막), step이 음수면 거꾸로 훑기.

특히 x[::-1]은 뒤집기 관용구라 거의 매년 등장한다고 봐야 합니다.

문자열도 똑같이 적용돼요.

w = "PYTHON"
print(w[1:4])    # YTH
print(w[::-1])   # NOHTYP
print(w[-3:])    # HON

함정 2 — 가변 기본 인자 (출제 단골)

파이썬은 함수를 정의하는 시점에 기본값 객체를 딱 한 번 만들어요. 그래서 리스트를 기본값으로 두면 호출마다 같은 객체가 누적됩니다.

def push(v, bag=[]):
    bag.append(v)
    return bag

print(push(10))   # [10]
print(push(20))   # [10, 20]  ← 새 리스트가 아닙니다
print(push(30))   # [10, 20, 30]

"이 코드의 출력은?" 단답형으로 자주 나오는 패턴이에요. 매 호출마다 [v]가 나올 거라고 답하면 틀립니다.

안전한 작성법은 bag=None으로 받고 함수 안에서 if bag is None: bag = []로 초기화하는 거예요.

함정 3 — ///

print(7 / 2)    # 3.5   (항상 실수)
print(7 // 2)   # 3     (내림한 정수)
print(7 % 2)    # 1
print(3 ** 4)   # 81    (거듭제곱)

파이썬 3에서 /는 무조건 float입니다. 7 / 2를 3이라고 쓰면 오답이에요.

자료형 정리 — 리스트·튜플·딕셔너리·셋

튜플은 변경 불가가 핵심입니다.

u = (7, 8, 9)
u[0] = 0   # TypeError: 'tuple' object does not support item assignment
구분 리스트 [] 튜플 ()
가변성 변경 가능 변경 불가
메서드 append, pop, remove 등 조회 관련만
용도 바뀔 수 있는 데이터 고정 레코드, 딕셔너리 키

결국 "바꿀 수 있느냐"가 둘을 가르는 전부예요.

딕셔너리는 [] 접근과 get의 차이를 묻습니다.

score = {"kim": 90, "lee": 80}
score["park"] = 70
print(score.get("kim"))      # 90
print(score.get("choi", 0))  # 0 (없으면 기본값)
print("kim" in score)        # True
print(list(score.keys()))    # ['kim', 'lee', 'park']

없는 키를 score["없는키"]로 읽으면 KeyError, get이면 None(또는 기본값)이에요. 셋은 중복을 자동으로 버립니다 — {4, 5, 6}add(5)를 해도 그대로 {4, 5, 6}.

컴프리헨션과 *args / **kwargs

컴프리헨션은 [표현식 for 요소 in 반복가능 if 조건] 순서입니다.

data = [2, 4, 6, 8]
print([d // 2 for d in data if d > 4])   # [3, 4]

grid = [(r, c) for r in range(2) for c in range(3)]
print(grid)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

2중 컴프리헨션은 앞에 쓴 for가 바깥 루프예요. 중첩 반복문과 같은 순서로 돕니다.

*args는 위치 인자를 튜플로, **kwargs는 키워드 인자를 딕셔너리로 받습니다.

def show(*args, **kwargs):
    print(args)     # (5, 6, 7)
    print(kwargs)   # {'city': 'Seoul'}

show(5, 6, 7, city="Seoul")

클로저 — nonlocal까지 세트로

def make_counter():
    total = 0
    def step():
        nonlocal total
        total += 1
        return total
    return step

c = make_counter()
print(c())  # 1
print(c())  # 2

안쪽 함수가 바깥 함수의 지역 변수를 기억하고 호출마다 유지하는 게 클로저입니다. nonlocal을 빼면 UnboundLocalError가 나요.

데코레이터(@log)는 hello = log(hello)의 줄임 표기라는 것까지 알아두면 충분합니다.

마지막 점검표

시험 직전에 아래 다섯 줄만 다시 훑어보세요.

헷갈리는 지점 정답
list.append(x)의 반환값 None
list.sort() vs sorted(list) 제자리 정렬(반환 None) vs 새 리스트 반환
문자열 s[0] = 'X' 불가 — 문자열은 불변, TypeError
a = b (리스트) 복사 아님, 같은 객체 참조. 복사는 b[:]list(b)
range(n) 0 이상 n 미만

저는 슬라이싱 문제가 나오면 시험지 여백에 리스트와 인덱스를 직접 그려놓고 따라갔어요. 눈으로만 풀면 경계값에서 꼭 틀리더라고요.

유형 연습은 문어CBT 모의고사에서 파이썬 문제만 골라 풀어봤는데 무료라 부담이 없었습니다.

 

SQLD·정처기·컴활·ADsP 무료 CBT 모의고사

기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.

sqldpass.com

결국 stop 미포함, 가변 기본 인자, /// — 이 셋만 확실하면 파이썬 문제는 지킬 수 있어요.