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

첫 줄 출력만 묻지 않는 출력 구조·줄 수·오류·그래프·보안·정렬 해석 문제

학습 안내

업로드된 2부 코드 셀 21개를 바탕으로 만들었습니다. 모든 문항은 셀 출력과 관련되어 있지만, 첫 줄만 고르는 방식이 아니라 출력 구조, 마지막/두 번째 출력, 출력 이유, 오류 발생 여부, 그래프 표시 여부를 다양하게 묻습니다.

각 문항은 힌트 → 코드 셀 → 문제 → 5지선다 → 해설 순서로 구성했습니다.

원문 코드 셀 22번출력 형식

문항 1. 데코레이터 적용 후 전체 출력 형태

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#22

abc = [ 'A', 'B', 'C', 'D', 'E']

def star(f):
    def a():
        for i, t in enumerate(f()):
            if i == 0: print(t)
            else: print("→", t)
    return a

@star
def tiger(): return abc

tiger()

이 셀을 실행했을 때 전체 출력 구조로 가장 알맞은 것은?

정답: B. A는 첫 줄에 그대로 나오고, B~E는 각 줄 앞에 →가 붙어 출력된다.
enumerate에서 i==0이면 print(t), 그 외에는 print('→', t)이므로 A만 그대로 나오고 나머지는 화살표가 붙습니다.
원문 코드 셀 24번그래프 출력

문항 2. 텍스트 출력과 그래프 표시 구분

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#24

import matplotlib.pyplot as plt

m=['Jan','Feb','Mar','Apr','May']
s=[120,150,180,170,200]
t=[2,5,12,18,24]

a=plt.subplot()
a.bar(m,s)

b=a.twinx()
b.plot(m,t,'o-')

plt.title('Sales vs Temp')
plt.show()

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

정답: B. 막대그래프와 보조 y축 선그래프가 표시되며 print 출력은 없다.
plt.title은 그래프 제목을 설정할 뿐 print가 아닙니다. a.bar와 b.plot이 같은 그림에 표시됩니다.
원문 코드 셀 25번오류 출력

문항 3. 실행 전에 발생하는 따옴표 오류

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#25

CCL = {
    "CH": {
        "eng": "Challenge",
        "kor": "도전",
    },

    "EX": {
        "eng": "Experience",
        "kor": "경험",
    },

    "CO": {
        "eng": "Confidence",
        "kor": "자신감",
    },

    "DE": {
        "eng": "Development",
        "kor": "발전",
    },

    "ACH": {
        "eng": "Achievement",
        "kor": "성취",
    }
}

for key, value in CCL.items():
    print(f"[{key}] {value["eng"]} {value["kor"]}")

이 셀을 그대로 실행했을 때 출력과 관련해 가장 알맞은 설명은?

정답: C. f-string 안쪽 큰따옴표 충돌 때문에 SyntaxError가 발생해 정상 출력되지 않는다.
바깥 f-string도 큰따옴표이고 value["eng"]도 큰따옴표라 구문이 깨집니다. 안쪽을 작은따옴표로 바꾸면 해결됩니다.
원문 코드 셀 26번첫 반복 출력

문항 4. 인덱스 배열로 조합되는 첫 줄

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

# 26

ai1 = [
    '도전',
    '경험',
    '자신감',
    '발전',
    '성취'
]

ai2 = [
    'Challenge',
    'Experience',
    'Confidence',
    'Development',
    'Achievement'
]

ai3 = [
    'ACH',
    'EX',
    'DE',
    'CH',
    'CO'
]

e = [0, 1, 2, 3, 4]

d = [3, 1, 4, 3, 0]



for i in range(5):

    print(f'{ai1[i]}({ai2[e[i]]}) {ai3[d[i]]}')

첫 번째 반복 i=0에서 출력되는 값으로 알맞은 것은?

정답: A. 도전(Challenge) CH
ai1[0]은 도전, ai2[e[0]]=ai2[0]은 Challenge, ai3[d[0]]=ai3[3]은 CH입니다.
원문 코드 셀 27번출력 조합

문항 5. 튜플 인덱스가 만드는 첫 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#27

algo5 = ['a', 'b', 'c', 'd', 'e']
ex1 = [
    '가',
    '나',
    '다',
    '라',
    '마'
]
ex2 = [
    'p',
    'q',
    'r',
    's',
    't'
]
data = {
    'a':   (3, 1),
    'b':   (0, 4),
    'c': (1, 3),
    'd': (2, 2),
    'e': (4, 0)
}
for k in ['a', 'b', 'c', 'd', 'e']:
    a, b = data[k]
    print(f'{k} ▷ {ex1[a]} {ex2[b]}')

k가 'a'일 때 출력되는 한 줄로 알맞은 것은?

정답: C. a ▷ 라 q
data['a']는 (3,1)이므로 ex1[3]='라', ex2[1]='q'가 선택됩니다.
원문 코드 셀 28번조건 출력

문항 6. 조건을 만족하면 멈추는 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

# 28


security = {
    'a':
    '가나다',

    'b':
    '나라마',

    'c':
    '나다가',

    'd':
    '다라마',

    'e':
    '바마사'
}

keys = list(security.keys())
check = lambda x: '마' in security[x]
i = 0
while i < len(keys):
    if not check(keys[i]):
        i += 1
        pass
    else:
        print(security[keys[i]])
        break

이 셀에서 실제로 출력되는 값과 이유로 알맞은 것은?

정답: B. 나라마: a는 조건 불만족, b의 값에 '마'가 있어 출력 후 break된다.
check는 값에 '마'가 있는지 검사합니다. a='가나다'는 실패, b='나라마'는 성공이므로 출력 후 반복이 끝납니다.
원문 코드 셀 29번출력 대상

문항 7. zip으로 만든 딕셔너리의 출력 값

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#29

eng1 = ['a','b','c']
kor1 = ['가','나','다']
mean = [
    'one',
    'two',
    'three'
]
result = dict(zip(eng1, zip(kor1, mean)))
print(result['a'][1])

print(result['a'][1])이 출력하는 값은?

정답: B. one
result['a']는 ('가','one')이고 [1]은 두 번째 요소 one입니다.
원문 코드 셀 30번출력 대상

문항 8. 같은 구조에서 데이터만 바뀐 경우

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#30

eng1 = ['a','b','c']
kor1 = ['가','나','다']
mean = [
    'p',
    'q',
    'r'
]
result = dict(zip(eng1, zip(kor1, mean)))
print(result['a'][1])

이전 구조와 같지만 mean 리스트가 p, q, r로 바뀌었다. 출력값은?

정답: C. p
result['a']는 ('가','p')이고 [1]은 p입니다.
원문 코드 셀 31번출력 순서

문항 9. 정렬 후 join 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#31

d = {'ab':90, 'cd':80,
     'ef':95, 'gh':87}

print("★".join(
    map(
        lambda x: f"{x[0]}{x[1]}",
        sorted(d.items(), key=lambda x: x[1])
    )
))

출력 문자열의 순서가 cd80 → gh87 → ab90 → ef95가 되는 이유는?

정답: B. 값 80, 87, 90, 95 기준으로 오름차순 정렬하기 때문이다.
sorted(d.items(), key=lambda x: x[1])이 값 기준 오름차순 정렬을 수행합니다.
원문 코드 셀 33번슬라이싱 출력

문항 10. 마지막 두 글자 리스트 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#33

print(list(map(lambda x: x[-2:],
    ["123456", "12345", "1234"])))

이 셀의 출력 결과로 알맞은 것은?

정답: B. ['56', '45', '34']
x[-2:]는 각 문자열의 마지막 두 글자를 가져옵니다.
원문 코드 셀 35번출력 줄 이해

문항 11. 해시 코드 셀의 두 번째 줄 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#33
import hashlib

password = "safe1234"
hashed = hashlib.sha256(password.encode()).hexdigest()

print("원본 비밀번호:", password)
print("해시 길이:", len(hashed))
print("동일 여부:", hashed == hashlib.sha256("safe1234".encode()).hexdigest())

두 번째 print문이 출력하는 내용으로 알맞은 것은?

정답: B. 해시 길이: 64
첫 줄은 원본 비밀번호, 두 번째 줄은 len(hashed)입니다. SHA-256 hexdigest 길이는 64입니다.
원문 코드 셀 36번반복 출력

문항 12. CIA 정보가 한 항목마다 출력되는 줄 수

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#34

# CIA를 5개의 리스트로 저장

abbr = [
    "C",
    "I",
    "A"
]

eng = [
    "Confidentiality",
    "Integrity",
    "Availability"
]

kor = [
    "기밀성",
    "무결성",
    "가용성"
]

desc = [
    "허가된 사용자만 정보에 접근할 수 있도록 보호",
    "정보가 변경·삭제·위조되지 않도록 보장",
    "필요한 사용자가 필요한 시점에 서비스를 이용 가능"
]

example = [
    "암호화, 비밀번호, 접근권한",
    "해시, 전자서명, 체크섬",
    "백업, 서버 이중화, DDoS 방어"
]

for a, e, k, d, ex in zip(abbr, eng, kor, desc, example):
    print(f'[{a}] {e} ({k})')
    print(f'설명: {d}')
    print(f'예시: {ex}')
    print()

C 한 항목에 대해 실제로 출력되는 내용의 구성으로 알맞은 것은?

정답: B. [C] 줄, 설명 줄, 예시 줄, 빈 줄이 차례로 출력된다.
for 반복마다 세 개의 print와 빈 print()가 실행되어 항목별로 4줄 구조가 됩니다.
원문 코드 셀 39번상태 변화 출력

문항 13. 값 변경 뒤 출력되는 두 줄

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#37
log = []
score = {"math": 85}

old = score["math"]
score["math"] = 90
log.append(f"math:{old}->90")

print(score["math"])
print(log[0])

이 셀의 출력 두 줄로 알맞은 것은?

정답: B. 90 / math:85->90
score['math']를 90으로 바꾼 뒤 먼저 90을 출력하고, 그 다음 log[0]인 math:85->90을 출력합니다.
원문 코드 셀 40번포함 여부 출력

문항 14. in 연산자의 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#38  XSS(Cross-Site Scripting) 방어

text = "<script>alert(1)<\/script>"

print("<script>" in text)
safe = text.replace("<", "&lt;").replace(">", "&gt;")
print(safe)

첫 번째 print("<script>" in text)의 출력과 이유로 알맞은 것은?

정답: B. True: text 안에 <script>가 실제로 포함되어 있기 때문이다.
첫 print는 replace 전에 실행되며, text는 '<script>'로 시작하므로 포함 여부가 True입니다.
원문 코드 셀 42번보안 출력

문항 15. html.escape 결과 해석

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#39      < 을 &lt;   > 을 &gt;    ' 을 &#x27;    & 를 &amp;   " 를 &quot;

import html

text = "<script>alert('XSS')</script>"

safe = html.escape(text)

print(safe)

safe = html.escape(text) 이후 출력되는 문자열의 특징으로 알맞은 것은?

정답: B. <와 > 등이 &lt;, &gt; 같은 HTML 엔티티 형태로 바뀐다.
html.escape는 HTML에서 해석될 수 있는 특수문자를 엔티티로 바꾸어 안전하게 표시합니다.
원문 코드 셀 43번출력 순서

문항 16. 원본 출력과 escape 출력 구분

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#40  html.escape   XSS(Cross-Site Scripting) 방어
# < 을 &lt;   > 을 &gt;    ' 을 &#x27;    & 를 &amp;

import html

text = "<'XSS'>&"

print(text)

safe = html.escape(text)

print(safe)

이 셀에서 첫 번째 print(text)가 출력하는 내용으로 알맞은 것은?

정답: B. <'XSS'>&
첫 번째 print는 escape 전 원본 문자열을 그대로 출력합니다. escape된 값은 두 번째 print에서 출력됩니다.
원문 코드 셀 44번비교 출력

문항 17. 해시값 비교 출력 해석

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#41  데이터의 무결성 확인
# hashlib는 해시(Hash)를 계산하는 파이썬 내장 모듈
# 해시의 눈사태 효과(Avalanche Effect)

import hashlib

h1 = hashlib.sha256("1".encode()).hexdigest()
h2 = hashlib.sha256("1".encode()).hexdigest()
h3 = hashlib.sha256("2".encode()).hexdigest()

print(h1)
print(h2)
print(h3)

print(h1 == h2)
print(h1 == h3)
print(h1 is h2)
print(h1 is h3)
print(h1 is h1)
print(h3 is h3)

h1 == h2와 h1 == h3의 출력 결과 조합으로 알맞은 것은?

정답: B. True, False
h1과 h2는 같은 입력 '1'의 해시라 값이 같고, h3는 입력 '2'의 해시라 값이 다릅니다.
원문 코드 셀 45번키워드 출력

문항 18. **kwargs 반복 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#01
def print_info(**kwargs):
    """사용자 정보를 출력하는 함수"""
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(이름="호랑이", 역할="선생님", 전공="파이썬")

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

정답: A. 이름, 역할, 전공이 key: value 형태로 차례로 출력된다.
**kwargs는 키워드 인수를 딕셔너리처럼 받고 items()로 key와 value를 출력합니다.
원문 코드 셀 46번매칭 출력

문항 19. 정렬 설명 역순 매칭

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#02


tt='''
버블 정렬/Bubble Sort:
선택 정렬/Selection Sort:
삽입 정렬/Insertion Sort:
병합 정렬/Merge Sort:
힙 정렬/Heap Sort:
퀵 정렬/Quick Sort:
'''

uu='''
피벗을 기준으로 좌우로 값을 나누어 정렬,
힙 자료구조에서 최소(최대)값을 꺼내 정렬,
배열을 반으로 나누고 정렬하여 다시 병합,
정렬된 영역의 알맞은 위치에 삽입,
작은 값을 찾아 앞쪽 위치와 교환,
인접한 두 원소 비교
'''

for aa,bb in zip(tt.splitlines()[1:],uu.split(',')[::-1]):
    kk,ee=aa[:-1].split('/')
    print(f'{kk} → {bb.strip()} ← {ee}')

버블 정렬과 '인접한 두 원소 비교'가 함께 출력되는 이유는?

정답: B. uu.split(',')[::-1]로 설명 목록을 뒤집어 첫 설명이 인접한 두 원소 비교가 되기 때문이다.
uu 설명 목록은 [::-1]로 뒤집힌 뒤 tt와 zip으로 묶입니다.
원문 코드 셀 47번메서드 출력

문항 20. 메서드 호출 결과 출력

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#03

class C:
    def a(s,x,y):
        return x-y

    def p(s,x,y):
        r=s.a(x,y)
        print(f"결과값은 {r}입니다.")

c=C()
c.p(15,30)

c.p(15,30)을 실행했을 때 출력되는 문장으로 알맞은 것은?

정답: B. 결과값은 -15입니다.
a 메서드는 x-y를 반환합니다. 15-30은 -15이므로 p 메서드가 결과값은 -15입니다.를 출력합니다.
원문 코드 셀 48번문장 출력

문항 21. 알고리즘 5요소 문장 조합

작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.

#04

a=['유효성','입력','유한성','명확성','출력']

b=[
'알고리즘은 문제를 해결한 뒤 최소 1개',
'알고리즘의 각 단계는 모호하지 않고',
'알고리즘은 반드시 한정된 단계 안에서',
'알고리즘은 문제 해결에 필요한 값을',
'알고리즘의 각 단계는 실제로 수행할'
]

c=[
'수 있는 실행 가능한 연산이어야 한다.',
'0개 이상 입력받을 수 있어야 한다.',
'종료 되어야 한다.',
'분명하게 정의되어야 한다.',
'이상의 결과를 출력해야 한다.'
]

d={
'입력':(3,1),
'출력':(0,4),
'명확성':(1,3),
'유한성':(2,2),
'유효성':(4,0)
}

for k in['입력','유효성','명확성','유한성','출력']:
    x,y=d[k]
    print(f'{k} ▷ {b[x]} {c[y]}')

첫 번째 반복에서 '입력' 항목이 출력되는 문장으로 알맞은 것은?

정답: A. 입력 ▷ 알고리즘은 문제 해결에 필요한 값을 0개 이상 입력받을 수 있어야 한다.
d['입력']은 (3,1)이므로 b[3]과 c[1]을 연결해 입력에 대한 문장이 만들어집니다.
아직 채점하지 않았습니다.