콘텐츠로 이동

SET 20 — 서술형 모범답안 (종합)


1. 출력 1 2 3

inc()는 호출될 때마다 self.count를 1 늘리고 그 값을 반환한다. print의 인자는 왼쪽부터 차례로 평가되므로 1, 2, 3 순서로 계산되어 1 2 3.

2. 출력 [5, 8, 9]

컴프리헨션으로 4보다 큰 값 [5, 8, 9]를 고른 뒤(원래 순서 5, 8, 9), sort()로 오름차순 정렬 → [5, 8, 9].

3. 출력 ['a', 'b', '', 'c'] 4

split(",")는 콤마마다 끊는데 ,,처럼 연속된 구분자 사이에는 빈 문자열 ''이 들어간다. 따라서 4조각.

4. 출력

10
{'x': 10, 'y': 5}
첫 줄: get("y", 0)은 키가 없어 0, get("x", 0)100 + 10 = 10. 그다음 d["y"] = 0 + 5 = 5가 추가되어 딕셔너리는 {'x': 10, 'y': 5}.

5.

def passed(pairs):
    result = {}
    for name, score in pairs:
        if score >= 60:
            result[name] = score
    return result

6.

def vc(s):
    vowels = 0
    consonants = 0
    for ch in s:
        if ch == " ":
            continue
        if ch in "aeiou":
            vowels += 1
        else:
            consonants += 1
    return vowels, consonants

7.

def grade_stats(scores):
    avg = sum(scores) / len(scores)
    highest = max(scores)
    above = 0
    for s in scores:
        if s > avg:
            above += 1
    return avg, highest, above

8.

문제: 빈 리스트 []를 넣으면 len(nums)0이라 total / 0에서 ZeroDivisionError가 난다. 고친 코드:

def average(nums):
    if len(nums) == 0:
        return 0
    total = 0
    for n in nums:
        total += n
    return total / len(nums)