8주차 · 2026 창의설계 중간고사 기출문제와 해설
2026년 4월 23일 시행한 창의설계 중간고사 기출문제와 해설입니다. 중간고사 해설 시간에는 정답만 확인하지 말고, 코드가 어떤 순서로 실행되는지 줄 번호를 따라가며 설명하는 연습을 합니다.
문제 1 (15pt). 다음 코드를 보고 질문에 답하여라.
Section titled “문제 1 (15pt). 다음 코드를 보고 질문에 답하여라.”distance_text = "125"time_s = 8speed1 = int(distance_text) / time_sspeed2 = int(distance_text) // time_smessage = "speed = " + str(speed1)print(speed1)print(speed2)print(message)- (5pt) 위 코드의 3~5번째 줄이 실행된 뒤,
distance_text,speed1,speed2의 값과 자료형을 각각 쓰고 설명하라. - (5pt) 세 개의
print문이 어떤 순서로 무엇을 출력하는지 쓰라. - (5pt)
speed1과speed2가 서로 다른 이유를/와//의 차이를 중심으로 설명하라.
-
3~5번째 줄이 실행된 뒤 값과 자료형은 다음과 같다.
distance_text는 여전히"125"이고, 자료형은 문자열(str)이다. 3~4번째 줄에서int(distance_text)를 사용했지만, 원래 변수distance_text자체를 바꾼 것은 아니다.speed1은15.625이고, 자료형은 실수(float)이다./연산은 나눗셈 결과를 실수로 만든다.speed2는15이고, 자료형은 정수(int)이다.//연산은 몫을 구하는 연산이므로 소수점 아래를 버린 결과가 저장된다.
-
출력 순서는 다음과 같다.
15.62515speed = 15.625 -
/는 일반 나눗셈이고,//는 몫을 구하는 나눗셈이다.125 / 8은15.625가 되지만,125 // 8은 몫만 남겨15가 된다. 따라서 같은 두 값을 나누어도 연산자가 다르면 결과와 자료형이 달라질 수 있다.
문제 2 (15pt) 다음 코드를 보고 질문에 답하여라.
Section titled “문제 2 (15pt) 다음 코드를 보고 질문에 답하여라.”score = 90attendance = 6if 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)- (5pt) 현재 주어진 값에서 화면에 출력되는 결과를 쓰고, 왜 그 결과가 나오는지 설명하라.
- (5pt) 위 코드의 2번째 줄을
attendance = 7로 바꾸면 어떤 결과가 출력되는지, 조건문이 어떻게 해석되는지 설명하라. - (5pt) 어떤 학생이 “score가 90이므로 무조건 A가 나온다”고 말했다. 이 설명이 왜 틀렸는지, 첫 번째 조건의 정확한 의미를 근거로 설명하라.
- 현재 값에서는
B가 출력된다. 3번째 줄의 조건score >= 90 and attendance >= 7은score >= 90은 참이지만attendance >= 7은 거짓이므로 전체가 거짓이다. 그다음 5번째 줄의 조건score >= 90 or attendance >= 7은 둘 중 하나만 참이어도 되므로 참이 되어result = "B"가 실행된다. attendance = 7로 바꾸면A가 출력된다. 이때 3번째 줄에서score >= 90도 참이고attendance >= 7도 참이므로,and로 연결된 첫 번째 조건 전체가 참이 된다.if조건이 참이 되었으므로 아래의elif들은 더 이상 검사하지 않는다.- “score가 90이므로 무조건 A”라는 설명은 틀렸다. 첫 번째 조건은
score >= 90하나만 보는 것이 아니라score >= 90과attendance >= 7이 모두 참인지 확인한다. 즉, A가 되려면 점수 조건과 출석 조건을 동시에 만족해야 한다.
문제 3 (20pt). 다음 코드를 보고 질문에 답하여라.
Section titled “문제 3 (20pt). 다음 코드를 보고 질문에 답하여라.”numbers = [3, -1, 5, 0, 4, 2]total = 0count = 0for n in numbers: if n < 0: continue if n == 0: break total += n count += 1print(total, count)- (6pt) 위 코드표에서 9~10번째 줄이 처음으로 모두 실행된 직후 (
n=3일 때),total과count의 값은 각각 무엇인가? - (7pt) 위 코드표의 6번째 줄
continue와 8번째 줄break가 각각 반복문의 흐름에 어떤 영향을 주는지 설명하라. - (7pt) 11번째 줄
print(total, count)에 의해 출력되는 값을 쓰고, 왜4와2가 결과에 반영되지 않는지 설명하라.
-
n=3일 때 9번째 줄에서total은0 + 3이 되어3이 된다. 10번째 줄에서count는0 + 1이 되어1이 된다. 따라서 처음으로 9~10번째 줄이 모두 실행된 직후의 값은total = 3,count = 1이다. -
continue는 현재 반복을 여기서 멈추고 다음 반복으로 넘어가게 한다. 따라서n=-1일 때는 9~10번째 줄이 실행되지 않는다.break는 반복문 전체를 즉시 종료한다. 따라서n=0을 만나면 그 뒤에 있는4,2는 아예 반복에서 처리되지 않는다. -
최종 출력은 다음과 같다.
8 23은 더해지고,-1은continue때문에 건너뛰며,5는 더해진다. 그 결과total은3 + 5 = 8,count는 두 번 증가하여2가 된다. 이후0을 만나break가 실행되므로4와2는 결과에 반영되지 않는다.
문제 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)- (6pt) 화면에 출력되는 문장을 위에서부터 순서대로 모두 쓰라.
- (4pt)
step(1)과step(3)의 반환값은 각각 무엇인가? - (5pt)
run함수 안의print("mid:", total)와return total은 어떤 점에서 역할이 다른지 설명하라. - (5pt) 마지막 줄
print("final:", answer)를 제거하면, 계산 자체는 무엇이 그대로 수행되고 무엇만 화면에 보이지 않게 되는지 설명하라.
-
출력 순서는 다음과 같다.
inside: 2inside: 6mid: 6final: 6answer = run(data)가 실행되면서run([1, 3])이 호출된다. 반복문에서step(1),step(3)이 차례로 호출되므로inside:출력이 먼저 두 번 나온다. 반복이 끝난 뒤run함수 안에서mid:가 출력되고, 마지막으로 13번째 줄에서final:이 출력된다. -
step(1)의 반환값은1이다.x=1이면y=2가 되고,return y - 1이므로1을 반환한다.step(3)의 반환값은5이다.x=3이면y=6이 되고,return y - 1이므로5를 반환한다. -
print("mid:", total)은 값을 화면에 보여 주는 역할을 한다. 반면return total은run함수를 호출한 곳으로 값을 돌려주는 역할을 한다. 이 코드에서는return total덕분에 12번째 줄의answer에6이 저장될 수 있다. -
마지막 줄
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 = 0passed = []
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)- (6pt) (
"Lee",55)까지 처리된 직후, 전역변수total과passed의 값은 각각 무엇인가? - (8pt)
reset()함수 안에서 출력되는 내용은 무엇인가? 그리고 그 출력 이후에도 바깥의total과passed가 그대로 유지되는 이유를 설명하라. - (8pt) 프로그램 전체가 끝날 때 화면에 출력되는 내용을 순서대로 모두 쓰라.
- (8pt) 위 코드표의 6번째 줄
passed.append(name)와 9번째 줄passed = []가 왜 다르게 동작하는지, 전역변수/지역변수 관점에서 설명하라.
-
(
"Lee",55)까지 처리된 직후 전역변수total은135,passed는["Kim"]이다.Kim의 점수80은record의 반환값으로 더해지고,80 >= 60이므로passed에"Kim"이 추가된다.Lee의 점수55도record의 반환값으로 더해져total은80 + 55 = 135가 되지만,55 >= 60은 거짓이므로passed에는 추가되지 않는다. -
reset()함수 안에서 출력되는 내용은 다음과 같다.inside reset: -1 []reset()안의passed = []와total = -1은 함수 안에서 새 지역변수를 만드는 대입이다. 따라서 바깥의 전역변수passed와total을 직접 바꾸지 않는다. 함수 안에서는 지역변수 값이 출력되지만, 함수가 끝난 뒤 바깥의total과passed는 그대로 남는다. -
프로그램 전체가 끝날 때 화면에 출력되는 내용은 다음 순서이다.
inside reset: -1 []outside: 205 ['Kim', 'Park']record함수에는print가 없으므로 반복문을 도는 동안에는 화면 출력이 없다. 반복문이 끝난 뒤reset()에서 한 번 출력되고, 마지막 줄에서 바깥의 전역변수 값이 출력된다. -
passed.append(name)는 전역 리스트 객체의 내용에 이름을 추가하는 동작이다. 함수 안에서passed라는 이름에 새 값을 대입하는 것이 아니라, 이미 존재하는 리스트의 내용을 바꾸는 것이므로 바깥의 리스트에 영향이 남는다. 반면passed = []는 함수 안에서passed라는 지역변수 이름에 새 빈 리스트를 대입하는 동작이다. 이 대입은 전역변수passed를 지우거나 교체하지 않는다.