셀 출력 관련 효능감 5지선다형 21문항

첫 줄 출력만 묻지 않음 · 전체 출력 흐름/마지막 출력/출력 이유/자료 변화/함수 호출 · 자동 채점 · 정답/해설 · TXT 저장

학습 안내

각 문항은 코드 셀의 출력과 연결되어 있지만, 모두 첫 줄 출력만 묻지는 않습니다.

출력 결과, 출력 이유, 출력 순서, 값 변화, 함수 호출 흐름을 골고루 묻도록 구성했습니다.

코드 셀 1출력 위치

문항 1. 마스킹 출력 결과 이해

출력 문자열에서 어느 부분이 ****로 바뀌는지 확인합니다.

#01

phone = "010-5678-1234"

parts = phone.split("-")
parts[2] = "****"
masked_phone = "-".join(parts)

print(masked_phone)

이 셀의 출력 결과에 대한 설명으로 가장 알맞은 것은?

정답: B. 마지막 번호 1234가 가려진다.
parts[2]는 세 번째 조각인 1234를 뜻하므로 출력은 010-5678-****입니다.
코드 셀 2출력 계산

문항 2. 문자열 길이 합산

각 문자열의 길이를 구한 뒤 가변 인수 함수로 모두 더합니다.

#02

def sum_all(*a):
    total = 0
    for num in a:
        total += num
    return total

star = {
    '1배움',
    '12지식',
    '123이해',
    '1234지혜',
    '12345통찰'}
s = {name: len(name) for name in star}

print(sum_all(*s.values()))

이 셀에서 출력되는 25가 만들어지는 과정으로 알맞은 것은?

정답: C. 문자열 길이 3, 4, 5, 6, 7을 더한다.
각 문자열의 길이는 3,4,5,6,7이고 합은 25입니다.
코드 셀 3커서 출력

문항 3. tell() 출력 이유

파일 커서는 읽은 만큼 뒤로 이동합니다.

#03

with open('test.txt', 'w', encoding='utf-8') as f:
    f.write("0123456789abcdef")

with open('test.txt', 'r+', encoding='utf-8') as f:
    f.seek(5)
    data = f.read(11)
    print(f.tell())

이 셀에서 f.tell()이 출력하는 값과 이유로 가장 알맞은 것은?

정답: C. 16, 5번 위치에서 11글자를 읽었기 때문이다.
커서 위치 5에서 11글자를 읽으면 현재 위치는 16입니다.
코드 셀 4리스트 출력

문항 4. map 결과 리스트 해석

각 문자열에서 마지막 글자와 앞 두 글자를 붙입니다.

#04

print(list(map(lambda x: x[-1:] + x[:2],
    ["열정★Dream", "행동★Star", "노력★Sky"])))

출력 리스트의 첫 번째 원소가 m열정이 되는 이유는?

정답: C. 마지막 글자 m과 앞 두 글자 열정을 붙였기 때문이다.
x[-1:]은 마지막 글자 m, x[:2]는 열정입니다.
코드 셀 5파일 출력

문항 5. 파일 치환 후 출력

파일에 쓴 문장을 읽어서 일부 단어만 바꿔 출력합니다.

#05

def star(file, old, new):
    try:
        with open(file, 'r', encoding='utf-8') as f:
            text = f.read()
        text = text.replace(old, new)
        with open(file, 'w', encoding='utf-8') as f:
            f.write(text)
        print(text)
    except FileNotFoundError:
        print("파일이 없습니다.")

with open('hello.txt', 'w', encoding='utf-8') as f:
    f.write("안녕하세요 호랑이 입니다.")

star('hello.txt', '호랑이', '구운몽')

이 셀의 출력과 가장 가까운 설명은?

정답: B. 호랑이가 구운몽으로 바뀐 문장이 출력된다.
파일을 먼저 만들고 호랑이를 구운몽으로 치환해 출력합니다.
코드 셀 6정렬 출력

문항 6. 두 번째 최고점 출력

점수 기준 오름차순 정렬 후 뒤에서 두 번째 과목명을 출력합니다.

#06

d = {'수학':90, '영어':80,
     '정보':95, '국어':87, '과학':93}
print(sorted(d.items(), key=lambda x:x[1])[-2][0])

이 셀의 출력으로 과학이 나오는 이유는?

정답: C. 과학이 두 번째로 높은 점수이기 때문이다.
점수는 정보 95가 가장 높고 과학 93이 두 번째로 높습니다.
코드 셀 7간접 출력

문항 7. 정렬된 길이값으로 값 선택

정렬된 문자열 길이를 인덱스로 사용해 tiger의 값을 출력합니다.

#07

def print_info(**k):
    return k

tiger = print_info(
    도전="무엇을 예측할지 정한다",
    경험="데이터 구조와 품질 확인",
    자신감="결측치 스케일 문제 해결",
    발전="패턴 학습",
    성취="테스트 성능 측정",
    미래="성능 개선 실험"
)

star = {'12345','Star','678','Be','9'}
st = {name: len(name) for name in star}
ss = sorted(st.items(), key=lambda item: item[1])
keys_list = list(tiger.keys())

print(tiger[keys_list[ss[2][1]]])

이 셀에서 최종 출력값을 고르기 위해 핵심적으로 사용하는 값은?

정답: B. 정렬된 문자열의 길이값
ss[2][1]은 정렬된 문자열 길이값이며, 이 값이 keys_list의 인덱스로 쓰입니다.
코드 셀 8튜플 출력

문항 8. 튜플 첫 요소 출력

번호로 튜플을 찾은 뒤 [0]으로 단계명을 출력합니다.

#08

tiger = {
    1: ('단계', 'a'),
    2: ('데이터 준비', 'b'),
    3: ('데이터 분리', 'c'),
    4: ('모델 생성', 'd'),
    5: ('학습', 'e'),
    6: ('예측', 'f'),
    7: ('평가', 'g')
}

star = {'1','We','234','H56789ope','Smile'}
st = {name: len(name) for name in star}
ss = sorted(st.items(), key=lambda item: item[1])

print(tiger[int(ss[3][1])][0])

마지막 [0]이 출력에 미치는 영향으로 알맞은 것은?

정답: B. 튜플의 첫 번째 값인 단계명을 출력한다.
tiger[5]는 (학습, e)이므로 [0]은 학습을 선택합니다.
코드 셀 9출력 구조

문항 9. 길이값을 key로 사용

문자열 길이를 딕셔너리 key로 사용해 단어를 출력합니다.

#09

tiger = {
    1: ('꿈', '판단방식'),
    2: ('목표', '현재 입력에만 반응'),
    3: ('노력', '현재 입력, 내부 상태 고려'),
    4: ('실력', '목표 달성 여부 고려'),
    5: ('성공', '효율·위험·만족도 비교')
}
star = {'ab','c','defg','hij','opqrs'}
st = {name: len(name) for name in star}
ss = sorted(st.items(), key=lambda item: item[1])

print(tiger[int(ss[2][1])][0])

이 셀의 출력값이 노력인 이유로 알맞은 것은?

정답: A. 세 번째 길이값이 3이고 tiger[3][0]이 노력이기 때문이다.
길이 기준 정렬 후 선택된 길이값 3을 key로 사용하면 tiger[3][0]인 노력이 출력됩니다.
코드 셀 10다중 출력

문항 10. 값 비교와 객체 비교 출력

이 셀은 여러 줄을 출력하며, 값 비교와 객체 비교 결과가 다릅니다.

#10

print([], list())
print([]==list())
print([] is list())
print({}, dict())
print({} == dict())
print({} is dict())
print(set(), set(()))
print(set() == set(()))
print(set() is set(()))

이 셀의 출력에 대한 설명으로 알맞은 것은?

정답: B. [] == list()는 True이고 [] is list()는 False이다.
==는 값 비교라 True, is는 객체 동일성 비교라 False입니다.
코드 셀 11합산 출력

문항 11. 길이 합과 추가 길이

문자열 길이들의 합에 정렬된 특정 항목의 길이를 더합니다.

#11

star = {'x','1','y','12','xy','123'}
st = {name: len(name) for name in star}
ss = sorted(st.items(), key=lambda item: item[1])
tiger = sum(item[1] for item in ss) + ss[4][1]

print(tiger)

이 셀에서 출력값을 만들 때 sum(item[1] for item in ss)가 의미하는 것은?

정답: B. 문자열 길이들의 합을 구한다.
ss의 각 원소는 (문자열, 길이)이므로 item[1]의 합은 전체 문자열 길이의 합입니다.
코드 셀 12순위 출력

문항 12. 두 번째로 큰 점수 출력

오름차순 정렬 뒤 [-2]로 두 번째로 큰 점수를 선택합니다.

#12

scores = {"수학":95, "영어":80,
          "국어":100, "과학":85, "정보":93}
ss = sorted(scores.items(), key=lambda item: item[1])

print(ss[-2][1])

이 셀의 출력값 95는 어떤 의미인가?

정답: D. 두 번째로 높은 점수
점수 오름차순에서 [-1]은 100, [-2]는 95입니다.
코드 셀 13인덱스 출력

문항 13. 소수점 아래 자리 선택

문자열 인덱스는 0부터 시작하므로 189번 인덱스는 190번째 자리입니다.

#13

from mpmath import mp
mp.dps = 200
pi = str(mp.pi)
decimal_part = pi.split(".")[1]

deci = decimal_part[189]

print(f'소수점 아래 190번째 숫자: {deci}')

decimal_part[189]가 소수점 아래 190번째 숫자를 가리키는 이유는?

정답: B. 인덱스가 0부터 시작하기 때문이다.
첫 번째 문자는 인덱스 0이므로 190번째 문자는 인덱스 189입니다.
코드 셀 14출력 흐름

문항 14. 차트형 텍스트 출력 흐름

메서드 호출 후 제목, 구분선, 막대, 최고 판매 정보 순으로 출력합니다.

#14

class FruitSales:
    def __init__(self):
        self.data = {"사과":55, "수박":43, "포도":35, "딸기":27}

    def print_chart(self):
        print("1. 과일 판매량")
        print("-" * 70)
        max_fruit = max(self.data, key=self.data.get)
        for fruit, sales in self.data.items():
            bar = "█" * sales
            print(f"{fruit:4} | {bar} ({sales})")
        print("-" * 70)
        print(f"최고 판매 → {max_fruit} ({self.data[max_fruit]})")

    def run(self):
        self.print_chart()

app = FruitSales()
app.run()

이 셀의 출력 흐름으로 가장 알맞은 것은?

정답: B. 제목 → 구분선 → 과일별 막대 → 최고 판매
print_chart()의 print 순서가 제목, 구분선, 과일별 막대, 최고 판매입니다.
코드 셀 15표 출력

문항 15. 총점 표 출력 순서

총점 계산과 정렬 후 표 머리글부터 출력합니다.

#15

class StudentScore:
    def __init__(self):
        self.students = [
            {"이름":"호준","수학":91,"정보":84},
            {"이름":"랑연","수학":85,"정보":96},
            {"이름":"이후","수학":80,"정보":78},
            {"이름":"수은","수학":90,"정보":93},
            {"이름":"박윤","수학":88,"정보":86}
        ]
    def total_score(self):
        for s in self.students:
            s["총점"] = s["수학"] + s["정보"]
    def sort_score(self):
        self.students = sorted(self.students, key=lambda x:x["총점"], reverse=True)
    def print_result(self):
        print("이름   수학  정보  총점")
        print("-" * 25)
        for s in self.students:
            print(f"{s['이름']:4}{s['수학']:6}{s['정보']:6}{s['총점']:6}")
    def run(self):
        self.total_score()
        self.sort_score()
        self.print_result()

app = StudentScore()
app.run()

이 셀에서 학생별 점수가 출력되기 전에 반드시 먼저 출력되는 것은?

정답: B. 표 머리글과 구분선
print_result()에서 머리글과 구분선을 먼저 출력한 뒤 학생별 행을 출력합니다.
코드 셀 16입력 출력

문항 16. 합성수 판별 출력

입력값 12는 합성수이며 소인수분해 결과도 이어서 출력됩니다.

입력값: 12
#16

class NumberChecker:
    def __init__(self, n):
        self.n = n
    def is_prime(self):
        if self.n < 2:
            return False
        for i in range(2, int(self.n ** 0.5) + 1):
            if self.n % i == 0:
                return False
        return True
    def factorize(self):
        n = self.n
        factors = []
        d = 2
        while d * d <= n:
            while n % d == 0:
                factors.append(d)
                n //= d
            d += 1
        if n > 1:
            factors.append(n)
        return factors
    def print_result(self):
        if self.is_prime():
            print(f"{self.n}은(는) 소수입니다.")
        else:
            print(f"{self.n}은(는) 합성수입니다.")
            factors = self.factorize()
            print(f"소인수분해: {' × '.join(map(str, factors))}")

n = int(input("정수 n 입력: "))
obj = NumberChecker(n)
obj.print_result()

입력값이 12일 때 이 셀의 출력 내용으로 알맞은 설명은?

정답: B. 12는 합성수라고 출력하고, 소인수분해 줄도 출력한다.
12는 2로 나누어떨어지므로 합성수이며, factorize() 결과 2 × 2 × 3도 출력됩니다.
코드 셀 17입력 출력

문항 17. n번째 소수 출력

입력한 n에 대해 n번째 소수를 찾아 출력합니다.

입력값: 12
#17

class P:
 def __init__(s,n):
  s.n=n; s.m=15 if n<6 else n*20
 def g(s):
  a=[1]*(s.m+1); a[0]=a[1]=0
  for i in range(2,int(s.m**.5)+1):
   if a[i]:
    for j in range(i*i,s.m+1,i): a[j]=0
  c=0
  for i in range(2,s.m+1):
   if a[i]:
    c+=1
    if c==s.n: return i

n=int(input())
print(f'{n} 번째 소수는 {P(n).g()}')

입력값이 12일 때 출력과 관련된 설명으로 알맞은 것은?

정답: C. 12번째 소수는 37이다.
소수 순서는 2,3,5,7,11,13,17,19,23,29,31,37이므로 12번째는 37입니다.
코드 셀 18반복 출력

문항 18. 역순 매칭 출력

두 번째 문자열 묶음을 역순으로 뒤집어 첫 번째 묶음과 연결합니다.

#18

t = """
가/ Aa:
나/ Bb:
다/ Cc:
라/ Dd:
마/ Ee:
바/ Ff:
"""

u = """
abc,
def,
ghi,
jkl,
mno,
pqr
"""

for a, b in zip(t.splitlines()[1:], u.split(',')[::-1]):
    k, e = a[:-1].split('/')
    print(f'{k} → {b.strip()} ← {e}')

이 셀의 첫 출력에서 가와 pqr이 연결되는 이유는?

정답: B. u를 [::-1]로 뒤집어 pqr이 먼저 오기 때문이다.
u.split(",")[::-1]이 u의 항목 순서를 뒤집기 때문에 pqr이 먼저 연결됩니다.
코드 셀 19여러 줄 출력

문항 19. 묶인 설명 출력

콜론이 없는 줄은 이전 줄의 설명에 이어 붙습니다.

#19

algo5 = """
가다자: 호랑이
늑대.
나라: 여우
사자.
다마사: 코끼리
낙타.
나바아: 올빼미
까치.
아자: 수박
바나나.
"""

algo = '가나다라마바사아자'
lines = [i.strip() for i in algo5.strip().split('\n')]

m, t = [], ''
for i in lines:
    if ':' in i:
        if t:
            m.append(t)
        t = i
    else:
        t += ' ' + i
if t: m.append(t)

d = {}
for i in m:
    k, v = i.split(':', 1)
    d[k.strip()] = v.strip()

keys = (algo[0]+algo[2]+algo[8], algo[1]+algo[3], algo[2]+algo[4]+algo[6], algo[1]+algo[5]+algo[7], algo[7]+algo[8])

for k in keys:
    print(f'{k}: {d[k]}')

이 셀의 출력에서 “호랑이 늑대.”처럼 두 단어가 한 항목으로 묶이는 이유는?

정답: A. 늑대. 줄에 콜론이 없어서 이전 설명에 이어 붙기 때문이다.
콜론이 없는 줄은 else에서 t += " " + i로 이전 항목에 이어 붙습니다.
코드 셀 20재조합 출력

문항 20. 분리한 문자열의 출력 형식

a/b: cde를 나누어 a→ cde←b 형태로 저장하고 출력합니다.

#20

t = """
a/b: cde
f/g: hij
k/l: mno
p/q: rst
u/v: wxy
"""

abc = ['a', 'f', 'k', 'p', 'u']

d = {}
for line in t.strip().splitlines():
    star, tiger = line.split(':')
    aa, bb = star.split('/')
    d[aa] = f'{aa}→{tiger}←{bb}'

for t in abc:
    print(d[t])

첫 줄 a/b: cde가 출력용 문자열로 바뀌는 과정으로 알맞은 것은?

정답: B. a가 key가 되고 a→ cde←b가 value가 된다.
star는 a/b, tiger는 앞 공백이 있는 " cde"입니다. aa=a, bb=b가 되어 a→ cde←b가 저장됩니다.
코드 셀 21데코레이터 출력

문항 21. 데코레이터 출력 순서

가장 아래 데코레이터가 먼저 원래 함수를 감싸고, 바깥쪽으로 누적됩니다.

#21

def B(f):
    def w(): return f() + " → B"
    return w

def C(f):
    def w(): return f() + " → C"
    return w

def D(f):
    def w(): return f() + " → D"
    return w

def E(f):
    def w(): return f() + " → E"
    return w

@E
@D
@C
@B
def A(): return "A"

print(A())

이 셀의 출력이 A → B → C → D → E가 되는 이유는?

정답: B. 가장 아래 @B부터 A를 감싸고, C, D, E가 차례로 바깥에서 붙기 때문이다.
@B가 원래 A를 먼저 감싸고, 그 결과를 @C, @D, @E가 차례로 감싸면서 문자열이 뒤에 붙습니다.
아직 채점하지 않았습니다.