Skip to content

8주차 · 2026 창의설계 중간고사 기출문제와 해설

2026년 4월 23일 시행한 창의설계 중간고사 기출문제와 해설입니다. 중간고사 해설 시간에는 정답만 확인하지 말고, 코드가 어떤 순서로 실행되는지 줄 번호를 따라가며 설명하는 연습을 합니다.


문제 1 (15pt). 다음 코드를 보고 질문에 답하여라.

Section titled “문제 1 (15pt). 다음 코드를 보고 질문에 답하여라.”
distance_text = "125"
time_s = 8
speed1 = int(distance_text) / time_s
speed2 = int(distance_text) // time_s
message = "speed = " + str(speed1)
print(speed1)
print(speed2)
print(message)
  1. (5pt) 위 코드의 3~5번째 줄이 실행된 뒤, distance_text, speed1, speed2의 값과 자료형을 각각 쓰고 설명하라.
  2. (5pt) 세 개의 print 문이 어떤 순서로 무엇을 출력하는지 쓰라.
  3. (5pt) speed1speed2가 서로 다른 이유를 ///의 차이를 중심으로 설명하라.
  1. 3~5번째 줄이 실행된 뒤 값과 자료형은 다음과 같다.

    • distance_text는 여전히 "125"이고, 자료형은 문자열(str)이다. 3~4번째 줄에서 int(distance_text)를 사용했지만, 원래 변수 distance_text 자체를 바꾼 것은 아니다.
    • speed115.625이고, 자료형은 실수(float)이다. / 연산은 나눗셈 결과를 실수로 만든다.
    • speed215이고, 자료형은 정수(int)이다. // 연산은 몫을 구하는 연산이므로 소수점 아래를 버린 결과가 저장된다.
  2. 출력 순서는 다음과 같다.

    15.625
    15
    speed = 15.625
  3. /는 일반 나눗셈이고, //는 몫을 구하는 나눗셈이다. 125 / 815.625가 되지만, 125 // 8은 몫만 남겨 15가 된다. 따라서 같은 두 값을 나누어도 연산자가 다르면 결과와 자료형이 달라질 수 있다.


문제 2 (15pt) 다음 코드를 보고 질문에 답하여라.

Section titled “문제 2 (15pt) 다음 코드를 보고 질문에 답하여라.”
score = 90
attendance = 6
if score >= 90 and attendance >= 7:
result = "A"
elif score >= 90 or attendance >= 7:
result = "B"
elif score >= 80:
result = "C"
else:
result = "D"
print(result)
  1. (5pt) 현재 주어진 값에서 화면에 출력되는 결과를 쓰고, 왜 그 결과가 나오는지 설명하라.
  2. (5pt) 위 코드의 2번째 줄을 attendance = 7로 바꾸면 어떤 결과가 출력되는지, 조건문이 어떻게 해석되는지 설명하라.
  3. (5pt) 어떤 학생이 “score가 90이므로 무조건 A가 나온다”고 말했다. 이 설명이 왜 틀렸는지, 첫 번째 조건의 정확한 의미를 근거로 설명하라.
  1. 현재 값에서는 B가 출력된다. 3번째 줄의 조건 score >= 90 and attendance >= 7score >= 90은 참이지만 attendance >= 7은 거짓이므로 전체가 거짓이다. 그다음 5번째 줄의 조건 score >= 90 or attendance >= 7은 둘 중 하나만 참이어도 되므로 참이 되어 result = "B"가 실행된다.
  2. attendance = 7로 바꾸면 A가 출력된다. 이때 3번째 줄에서 score >= 90도 참이고 attendance >= 7도 참이므로, and로 연결된 첫 번째 조건 전체가 참이 된다. if 조건이 참이 되었으므로 아래의 elif들은 더 이상 검사하지 않는다.
  3. “score가 90이므로 무조건 A”라는 설명은 틀렸다. 첫 번째 조건은 score >= 90 하나만 보는 것이 아니라 score >= 90attendance >= 7이 모두 참인지 확인한다. 즉, A가 되려면 점수 조건과 출석 조건을 동시에 만족해야 한다.

문제 3 (20pt). 다음 코드를 보고 질문에 답하여라.

Section titled “문제 3 (20pt). 다음 코드를 보고 질문에 답하여라.”
numbers = [3, -1, 5, 0, 4, 2]
total = 0
count = 0
for n in numbers:
if n < 0:
continue
if n == 0:
break
total += n
count += 1
print(total, count)
  1. (6pt) 위 코드표에서 9~10번째 줄이 처음으로 모두 실행된 직후 (n=3일 때), totalcount의 값은 각각 무엇인가?
  2. (7pt) 위 코드표의 6번째 줄 continue와 8번째 줄 break가 각각 반복문의 흐름에 어떤 영향을 주는지 설명하라.
  3. (7pt) 11번째 줄 print(total, count)에 의해 출력되는 값을 쓰고, 왜 42가 결과에 반영되지 않는지 설명하라.
  1. n=3일 때 9번째 줄에서 total0 + 3이 되어 3이 된다. 10번째 줄에서 count0 + 1이 되어 1이 된다. 따라서 처음으로 9~10번째 줄이 모두 실행된 직후의 값은 total = 3, count = 1이다.

  2. continue는 현재 반복을 여기서 멈추고 다음 반복으로 넘어가게 한다. 따라서 n=-1일 때는 9~10번째 줄이 실행되지 않는다. break는 반복문 전체를 즉시 종료한다. 따라서 n=0을 만나면 그 뒤에 있는 4, 2는 아예 반복에서 처리되지 않는다.

  3. 최종 출력은 다음과 같다.

    8 2

    3은 더해지고, -1continue 때문에 건너뛰며, 5는 더해진다. 그 결과 total3 + 5 = 8, count는 두 번 증가하여 2가 된다. 이후 0을 만나 break가 실행되므로 42는 결과에 반영되지 않는다.


문제 4 (20pt) 다음 코드를 보고 질문에 답하여라.

Section titled “문제 4 (20pt) 다음 코드를 보고 질문에 답하여라.”
def step(x):
y = x * 2
print("inside:", y)
return y - 1
def run(values):
total = 0
for v in values:
total += step(v)
print("mid:", total)
return total
data = [1, 3]
answer = run(data)
print("final:", answer)
  1. (6pt) 화면에 출력되는 문장을 위에서부터 순서대로 모두 쓰라.
  2. (4pt) step(1)step(3)의 반환값은 각각 무엇인가?
  3. (5pt) run 함수 안의 print("mid:", total)return total은 어떤 점에서 역할이 다른지 설명하라.
  4. (5pt) 마지막 줄 print("final:", answer)를 제거하면, 계산 자체는 무엇이 그대로 수행되고 무엇만 화면에 보이지 않게 되는지 설명하라.
  1. 출력 순서는 다음과 같다.

    inside: 2
    inside: 6
    mid: 6
    final: 6

    answer = run(data)가 실행되면서 run([1, 3])이 호출된다. 반복문에서 step(1), step(3)이 차례로 호출되므로 inside: 출력이 먼저 두 번 나온다. 반복이 끝난 뒤 run 함수 안에서 mid:가 출력되고, 마지막으로 13번째 줄에서 final:이 출력된다.

  2. step(1)의 반환값은 1이다. x=1이면 y=2가 되고, return y - 1이므로 1을 반환한다. step(3)의 반환값은 5이다. x=3이면 y=6이 되고, return y - 1이므로 5를 반환한다.

  3. print("mid:", total)은 값을 화면에 보여 주는 역할을 한다. 반면 return totalrun 함수를 호출한 곳으로 값을 돌려주는 역할을 한다. 이 코드에서는 return total 덕분에 12번째 줄의 answer6이 저장될 수 있다.

  4. 마지막 줄 print("final:", answer)를 제거해도 12번째 줄 answer = run(data)는 그대로 실행된다. 따라서 step(1), step(3), print("mid:", total), return total도 그대로 수행되고 answer에는 6이 저장된다. 달라지는 것은 마지막 화면 출력인 final: 6만 보이지 않게 된다는 점이다.


문제 5 (30pt) 다음 코드를 보고 질문에 답하여라.

Section titled “문제 5 (30pt) 다음 코드를 보고 질문에 답하여라.”
total = 0
passed = []
def record(name, score):
total = score
if score >= 60:
passed.append(name)
return total
def reset():
passed = []
total = -1
print("inside reset:", total, passed)
for name, score in [("Kim", 80), ("Lee", 55), ("Park", 70)]:
total += record(name, score)
reset()
print("outside:", total, passed)
  1. (6pt) ("Lee", 55)까지 처리된 직후, 전역변수 totalpassed의 값은 각각 무엇인가?
  2. (8pt) reset() 함수 안에서 출력되는 내용은 무엇인가? 그리고 그 출력 이후에도 바깥의 totalpassed가 그대로 유지되는 이유를 설명하라.
  3. (8pt) 프로그램 전체가 끝날 때 화면에 출력되는 내용을 순서대로 모두 쓰라.
  4. (8pt) 위 코드표의 6번째 줄 passed.append(name)와 9번째 줄 passed = []가 왜 다르게 동작하는지, 전역변수/지역변수 관점에서 설명하라.
  1. ("Lee", 55)까지 처리된 직후 전역변수 total135, passed["Kim"]이다. Kim의 점수 80record의 반환값으로 더해지고, 80 >= 60이므로 passed"Kim"이 추가된다. Lee의 점수 55record의 반환값으로 더해져 total80 + 55 = 135가 되지만, 55 >= 60은 거짓이므로 passed에는 추가되지 않는다.

  2. reset() 함수 안에서 출력되는 내용은 다음과 같다.

    inside reset: -1 []

    reset() 안의 passed = []total = -1은 함수 안에서 새 지역변수를 만드는 대입이다. 따라서 바깥의 전역변수 passedtotal을 직접 바꾸지 않는다. 함수 안에서는 지역변수 값이 출력되지만, 함수가 끝난 뒤 바깥의 totalpassed는 그대로 남는다.

  3. 프로그램 전체가 끝날 때 화면에 출력되는 내용은 다음 순서이다.

    inside reset: -1 []
    outside: 205 ['Kim', 'Park']

    record 함수에는 print가 없으므로 반복문을 도는 동안에는 화면 출력이 없다. 반복문이 끝난 뒤 reset()에서 한 번 출력되고, 마지막 줄에서 바깥의 전역변수 값이 출력된다.

  4. passed.append(name)는 전역 리스트 객체의 내용에 이름을 추가하는 동작이다. 함수 안에서 passed라는 이름에 새 값을 대입하는 것이 아니라, 이미 존재하는 리스트의 내용을 바꾸는 것이므로 바깥의 리스트에 영향이 남는다. 반면 passed = []는 함수 안에서 passed라는 지역변수 이름에 새 빈 리스트를 대입하는 동작이다. 이 대입은 전역변수 passed를 지우거나 교체하지 않는다.