SET 19 — 서술형 모범답안¶
1. 출력 [[9, 0], [9, 0], [9, 0]]¶
table = [row, row, row]는 같은 리스트 row를 세 번 담은 것이라 세 칸이 모두 같은 객체를 가리킨다. table[1][0] = 9로 row를 바꾸면 세 행 모두 바뀐다. (독립시키려면 각 행을 따로 만들어야 함)
2. 출력¶
cleanup
1
return 1로 함수를 빠져나가기 직전에도 finally는 반드시 실행되어 cleanup을 먼저 출력한다. 그 뒤 함수가 1을 반환해 print(f())가 1을 출력.
3. 출력¶
[1, 4, 7]
[10, 7, 4]
range(1, 10, 3)은 1부터 3씩 증가(10 미포함) → 1, 4, 7. range(10, 1, -3)은 10부터 3씩 감소(1 미포함) → 10, 7, 4.
4. 출력 {5: 'apple', 6: 'cherry'}¶
키는 단어의 길이. apple(5)→d[5], banana(6)→d[6], cherry(6)→d[6]인데 같은 키 6에 다시 대입되어 banana가 cherry로 덮어써진다.
5.¶
def min_max(nums):
return min(nums), max(nums)
6.¶
def char_freq(s):
d = {}
for ch in s:
d[ch] = d.get(ch, 0) + 1
return d
7.¶
def fib_list(n):
result = []
a, b = 0, 1
for _ in range(n):
result.append(a)
a, b = b, a + b
return result
8.¶
문제: 함수 안에서 total += n처럼 전역 변수에 대입하려 하면 파이썬은 total을 지역 변수로 간주하는데, 아직 값이 없는 상태에서 더하기를 시도해 UnboundLocalError가 난다. 고친 코드:
total = 0
def add(n):
global total
total += n
add(5)
print(total) # 5