핵심 SET 14 — 정답 및 해설¶
| 문항 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 정답 | ① | ① | ① | ① | ① | ① | ① | ① | ① | ① |
1. 정답 ① 15 20
f(1,2,3,4,5): *args=(3,4,5), sum=12, 1+2+12=15. g(1,2,3,4,bonus=10): *args=(3,4), sum=7, 1+2+7=10, kwargs={"bonus":10}이라 10+10=20.
2. 정답 ① ['start', 'done'] ['done', 'done'] ['done', 'done'] True
t1 = stamp([1], ["start"])는 전달된 ["start"]에 "done"을 추가해 ["start", "done"]. t2 = stamp([2])는 tag를 생략해 새 빈 리스트를 만들고 "done"을 추가해 ["done"]. t3 = stamp([3], t2)는 t2(["done"])를 그대로 전달받아 "done"을 한 번 더 추가하므로 t2 자체가 ["done", "done"]으로 바뀌고, t3도 같은 객체를 가리켜 t2 is t3는 True.
3. 정답 ① Triangle(3), Square(4), Pentagon(5)
각 Shape의 __str__이 "이름(변의 수)" 형태를 반환하므로, str(s)를 호출한 결과들을 ", ".join으로 이어 붙입니다.
4. 정답 ① [5.0, 10.0, 13.0]
피타고라스 정리로 빗변을 계산합니다. (3,4)→5.0, (6,8)→10.0, (5,12)→13.0이며 round(.., 1)로 소수 첫째 자리까지 표시됩니다.
5. 정답 ① {'apple': 11, 'banana': 6}
모든 값에 1씩 더해 apple=11, banana=6, cherry=1이 됩니다. 이후 v <= 1인 키(cherry, 값 1)를 찾아 별도 리스트에 모은 뒤 반복문이 끝난 후에 안전하게 del로 제거합니다.
6. 정답 ① [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]
리스트를 순회하면서 그 리스트 자신에 계속 append하면, 반복자가 새로 추가된 원소까지 따라가며 순회합니다. 길이가 9를 초과하는 순간(10이 되는 시점) break하여 최종적으로 원래 4개 원소가 두 번 반복되고 한 개 더 붙은 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]가 남습니다.
7. 정답 ① [('Park', 95), ('Kim', 90)] ('Choi', 70)
점수(두 번째 원소) 기준 내림차순 정렬하면 [('Park',95), ('Kim',90), ('Lee',85), ('Choi',70)]이 됩니다. 앞의 2개는 top2, 마지막 원소는 ('Choi', 70).
8. 정답 ① ['delete'] ['execute', 'read']
requested - allowed는 requested에만 있는 "delete". requested & allowed는 둘 다에 있는 "read", "execute"이며 정렬하면 ['execute', 'read'](알파벳 순).
9. 정답 ① 1
__eq__가 balance만 비교하도록 재정의되어 있으므로, balance가 같은 두 계좌만 True가 됩니다. (Kim,100)과 (Lee,100)만 같아(count=1), 나머지 조합(Kim·Park, Lee·Park)은 balance가 달라 False입니다.
10. 정답 ① HI 출력 후 AttributeError
tools/__init__.py는 shout만 패키지 네임스페이스로 가져왔으므로 tools.shout("hi")는 정상적으로 "HI"를 출력합니다. 하지만 whisper는 __init__.py에서 재노출되지 않았으므로 tools.whisper에 접근하면 AttributeError가 발생합니다.