학습 안내
업로드된 2부 코드 셀 21개를 바탕으로 만들었습니다. 모든 문항은 셀 출력과 관련되어 있지만, 첫 줄만 고르는 방식이 아니라 출력 구조, 마지막/두 번째 출력, 출력 이유, 오류 발생 여부, 그래프 표시 여부를 다양하게 묻습니다.
각 문항은 힌트 → 코드 셀 → 문제 → 5지선다 → 해설 순서로 구성했습니다.
문항 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()
이 셀을 실행했을 때 전체 출력 구조로 가장 알맞은 것은?
enumerate에서 i==0이면 print(t), 그 외에는 print('→', t)이므로 A만 그대로 나오고 나머지는 화살표가 붙습니다.
문항 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()
이 셀의 실행 결과에 대한 설명으로 가장 알맞은 것은?
plt.title은 그래프 제목을 설정할 뿐 print가 아닙니다. a.bar와 b.plot이 같은 그림에 표시됩니다.
문항 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"]}")
이 셀을 그대로 실행했을 때 출력과 관련해 가장 알맞은 설명은?
바깥 f-string도 큰따옴표이고 value["eng"]도 큰따옴표라 구문이 깨집니다. 안쪽을 작은따옴표로 바꾸면 해결됩니다.
문항 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에서 출력되는 값으로 알맞은 것은?
ai1[0]은 도전, ai2[e[0]]=ai2[0]은 Challenge, ai3[d[0]]=ai3[3]은 CH입니다.
문항 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'일 때 출력되는 한 줄로 알맞은 것은?
data['a']는 (3,1)이므로 ex1[3]='라', ex2[1]='q'가 선택됩니다.
문항 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
이 셀에서 실제로 출력되는 값과 이유로 알맞은 것은?
check는 값에 '마'가 있는지 검사합니다. a='가나다'는 실패, b='나라마'는 성공이므로 출력 후 반복이 끝납니다.
문항 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])이 출력하는 값은?
result['a']는 ('가','one')이고 [1]은 두 번째 요소 one입니다.
문항 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로 바뀌었다. 출력값은?
result['a']는 ('가','p')이고 [1]은 p입니다.
문항 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가 되는 이유는?
sorted(d.items(), key=lambda x: x[1])이 값 기준 오름차순 정렬을 수행합니다.
문항 10. 마지막 두 글자 리스트 출력
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#33
print(list(map(lambda x: x[-2:],
["123456", "12345", "1234"])))
이 셀의 출력 결과로 알맞은 것은?
x[-2:]는 각 문자열의 마지막 두 글자를 가져옵니다.
문항 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문이 출력하는 내용으로 알맞은 것은?
첫 줄은 원본 비밀번호, 두 번째 줄은 len(hashed)입니다. SHA-256 hexdigest 길이는 64입니다.
문항 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 한 항목에 대해 실제로 출력되는 내용의 구성으로 알맞은 것은?
for 반복마다 세 개의 print와 빈 print()가 실행되어 항목별로 4줄 구조가 됩니다.
문항 13. 값 변경 뒤 출력되는 두 줄
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#37
log = []
score = {"math": 85}
old = score["math"]
score["math"] = 90
log.append(f"math:{old}->90")
print(score["math"])
print(log[0])
이 셀의 출력 두 줄로 알맞은 것은?
score['math']를 90으로 바꾼 뒤 먼저 90을 출력하고, 그 다음 log[0]인 math:85->90을 출력합니다.
문항 14. in 연산자의 출력
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#38 XSS(Cross-Site Scripting) 방어
text = "<script>alert(1)<\/script>"
print("<script>" in text)
safe = text.replace("<", "<").replace(">", ">")
print(safe)
첫 번째 print("<script>" in text)의 출력과 이유로 알맞은 것은?
첫 print는 replace 전에 실행되며, text는 '<script>'로 시작하므로 포함 여부가 True입니다.
문항 15. html.escape 결과 해석
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#39 < 을 < > 을 > ' 을 ' & 를 & " 를 "
import html
text = "<script>alert('XSS')</script>"
safe = html.escape(text)
print(safe)
safe = html.escape(text) 이후 출력되는 문자열의 특징으로 알맞은 것은?
html.escape는 HTML에서 해석될 수 있는 특수문자를 엔티티로 바꾸어 안전하게 표시합니다.
문항 16. 원본 출력과 escape 출력 구분
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#40 html.escape XSS(Cross-Site Scripting) 방어
# < 을 < > 을 > ' 을 ' & 를 &
import html
text = "<'XSS'>&"
print(text)
safe = html.escape(text)
print(safe)
이 셀에서 첫 번째 print(text)가 출력하는 내용으로 알맞은 것은?
첫 번째 print는 escape 전 원본 문자열을 그대로 출력합니다. escape된 값은 두 번째 print에서 출력됩니다.
문항 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의 출력 결과 조합으로 알맞은 것은?
h1과 h2는 같은 입력 '1'의 해시라 값이 같고, h3는 입력 '2'의 해시라 값이 다릅니다.
문항 18. **kwargs 반복 출력
작은 성공 힌트: 이 문제는 셀 출력을 이해하기 위한 문제입니다. 출력값만 외우지 말고 출력이 만들어지는 이유를 찾아보세요.
#01
def print_info(**kwargs):
"""사용자 정보를 출력하는 함수"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(이름="호랑이", 역할="선생님", 전공="파이썬")
이 셀의 출력 흐름으로 알맞은 것은?
**kwargs는 키워드 인수를 딕셔너리처럼 받고 items()로 key와 value를 출력합니다.
문항 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}')
버블 정렬과 '인접한 두 원소 비교'가 함께 출력되는 이유는?
uu 설명 목록은 [::-1]로 뒤집힌 뒤 tt와 zip으로 묶입니다.
문항 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)을 실행했을 때 출력되는 문장으로 알맞은 것은?
a 메서드는 x-y를 반환합니다. 15-30은 -15이므로 p 메서드가 결과값은 -15입니다.를 출력합니다.
문항 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]}')
첫 번째 반복에서 '입력' 항목이 출력되는 문장으로 알맞은 것은?
d['입력']은 (3,1)이므로 b[3]과 c[1]을 연결해 입력에 대한 문장이 만들어집니다.