Skip to content

8주차 · 중간고사

문제 1 · 코드를 읽고 동작 설명하기 (15점)

Section titled “문제 1 · 코드를 읽고 동작 설명하기 (15점)”

아래 코드를 읽고, 프로그램이 하는 일을 입력 / 처리 / 출력 3단계로 설명하세요.

distance_m = 120
time_s = 4
speed_mps = distance_m / time_s
print(f"distance = {distance_m} m")
print(f"time = {time_s} s")
print(f"speed = {speed_mps} m/s")

답안에는 아래 3가지를 각각 1-2 문장씩 반드시 포함하세요.

  1. 어떤 값이 입력으로 주어졌는가?
  2. 어떤 계산이 수행되는가?
  3. 마지막에 무엇이 출력되는가?

아래 코드를 읽고, 각 줄이 무슨 역할을 하는지 줄 번호 기준으로 1줄씩 설명하세요. (총 5줄, 줄마다 1문장)

name = "Kim"
age = 19
next_age = age + 1
print("name =", name)
print("next age =", next_age)

문제 2 · 이진수·16진수·비트 연산 추론하기 (15점)

Section titled “문제 2 · 이진수·16진수·비트 연산 추론하기 (15점)”

아래 코드를 실행하지 말고, 각 print의 출력값을 예측해 쓰세요. 그리고 왜 그 값이 나오는지 각 줄마다 1-2 문장으로 설명하세요.

a = 0b1010 # 이진수 1010
b = 0b1100 # 이진수 1100
print(a) # (1)
print(bin(a & b)) # (2)
print(bin(a | b)) # (3)
print(bin(a ^ b)) # (4)
print(bin(~a & 0xFF)) # (5) — 8비트 마스킹 후 비트 반전

답안에는 아래를 포함하세요.

  1. ab의 십진수 값은 각각 얼마인가?
  2. AND, OR, XOR 연산 결과를 이진수로 쓰고, 각각 무엇을 의미하는지 1문장씩 설명하세요.

아래 상황을 읽고, 비트 마스킹이 왜 유용한지 3-4 문장으로 서술하세요.

  • 8비트 센서 상태값 status = 0b10110100이 있다.
  • 비트 2(0-indexed, 오른쪽에서 3번째)가 1이면 “오버히트” 경보를 발생시켜야 한다.

코드를 쓰지 말고, **“비트 마스크를 이용해 원하는 비트만 추출하는 방법과 그 이유”**를 문장으로 설명하세요.


문제 3 · 조건문과 경계값 판단하기 (20점)

Section titled “문제 3 · 조건문과 경계값 판단하기 (20점)”

아래는 코드와 학생의 설명입니다. 학생 설명 중 틀린 부분을 2개 이상 찾아 왜 틀렸는지 각각 2-3 문장으로 쓰세요.

score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
else:
grade = "C"
print(grade)

학생 설명:

  1. score = 85는 점수가 85보다 큰지 비교하는 코드이다.
  2. 이 코드는 A, B, C 세 등급만 출력한다.
  3. score가 85이면 A가 출력된다.

아래 코드는 등급을 나누는 코드입니다.

if score >= 80:
grade = "B"
elif score >= 90:
grade = "A"
else:
grade = "C"

다음 질문에 각각 1-2 문장씩 답하세요.

  1. 왜 이 코드에서 A가 나오기 어려운가?
  2. 어떤 순서로 바꾸면 더 올바른가?
  3. 꼭 테스트해야 할 경계값 3개를 적으세요.

문제 4 · 반복문과 출력 예측 (20점)

Section titled “문제 4 · 반복문과 출력 예측 (20점)”

아래 코드를 실행하지 말고, 출력이 어떻게 나오는지 각 항목당 1-2 문장씩 설명하세요.

scores = [10, 20, 30]
total = 0
for s in scores:
total += s
print("current total =", total)

답안에는 아래를 포함하세요.

  1. 반복이 몇 번 일어나는가?
  2. 각 반복에서 total이 어떻게 바뀌는가?
  3. 마지막 출력은 무엇인가?

아래 코드는 왜 문제가 되는지 설명하고, 어떤 줄이 빠졌는지 각 항목당 1-2 문장씩 쓰세요.

x = 0
while x < 5:
print(x)

답안에는 아래를 포함하세요.

  1. 이 코드가 멈추지 않는 이유
  2. 어떤 종류의 실수인지 (무한 루프)
  3. 어떻게 고쳐야 하는지

문제 5 · 함수와 자료구조 설명하기 (15점)

Section titled “문제 5 · 함수와 자료구조 설명하기 (15점)”

아래 코드를 읽고, printreturn의 차이를 각 항목당 1-2 문장씩 설명하세요.

def add(a, b):
result = a + b
print(result)
return result

답안에는 아래를 포함하세요.

  1. print(result)는 무엇을 하는가?
  2. return result는 무엇을 하는가?
  3. 둘 중 하나만 남기면 어떤 차이가 생기는가?

아래 자료구조 4가지(리스트, 딕셔너리, 튜플, 집합)에 대해 각각 1-2 문장으로 설명하세요.

  • 언제 그 자료구조를 선택하면 좋은지
  • 나머지 셋과 구별되는 특징 한 가지

문제 6 · 문자열 파싱 추론하기 (15점)

Section titled “문제 6 · 문자열 파싱 추론하기 (15점)”

아래 코드를 실행하지 말고, 각 print의 출력값을 예측하고 왜 그 값이 나오는지 각 줄마다 1-2 문장으로 설명하세요.

raw = " sensor=A1, value=42, unit=V "
clean = raw.strip()
fields = clean.split(",")
pairs = [f.strip() for f in fields]
print(len(fields)) # (1)
print(pairs[1]) # (2)
print(pairs[1].split("=")[1]) # (3)
print("value" in clean) # (4)

아래 파싱 코드에서 두 가지 개선이 필요한 부분을 찾고, 각각 2-3 문장으로 왜 문제인지와 어떻게 고쳐야 하는지 설명하세요.

line = "id:001 | temp:24.8 | status:OK"
parts = line.split("|")
temp = float(parts[1].split(":")[1])
print("temp:", temp)

힌트: 공백 처리와 검증 순서를 중심으로 살펴보세요.


아래 코드를 보고, 초보 학생에게 설명하듯 4문장 이내로 설명문을 작성하세요.

values = [2, 4, 6]
avg = sum(values) / len(values)
print(avg)

다음 설명문을 자연스럽고 정확하게 고쳐 쓰세요.

  • “이 코드는 그냥 숫자를 출력한다.”

대상 코드:

nums = [1, 2, 3, 4]
count_even = 0
for n in nums:
if n % 2 == 0:
count_even += 1
print(count_even)

십진수 45를 이진수로 손으로 변환하는 과정을 단계별로 설명하세요. (bin(45)를 바로 쓰지 말고, 2로 나누는 과정을 기록하세요.)

연습 4 · 파싱 파이프라인 순서 나열

Section titled “연습 4 · 파싱 파이프라인 순서 나열”

“정제 → 분리 → 검증 → 변환” 각 단계가 왜 그 순서여야 하는지 2-3 문장으로 설명하세요. 특히 “검증 없이 변환 먼저” 하면 어떤 문제가 생기는지 포함하세요.