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)은 10 → 0 + 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)