파이썬 서술형 — SET 18¶
이름: ____________ 점수: _____ / 100
출력형은 실행 결과와 그렇게 되는 이유를 함께 서술하세요. 작성형은 실행 가능한 코드로 답하세요. (범위: 함수·클래스·모듈/패키지·딕셔너리·리스트·튜플·set 심화)
[Ⅰ. 출력 예측 + 이유 서술] (각 10점)¶
1.¶
def discount(price, *, rate=0.1, vip=False):
if vip:
rate += 0.05
return round(price * (1 - rate), 2)
print(discount(1000), discount(1000, rate=0.2), discount(1000, vip=True))
출력: ________________
이유:
2.¶
class Accumulator:
def __init__(self):
self.total = 0
def add(self, x):
self.total += x
return self.total
acc = Accumulator()
results = [acc.add(i) for i in range(1, 5)]
print(results, acc.total)
출력: ________________
이유:
3.¶
import random
random.seed(3)
a = random.randint(1, 100)
random.seed(3)
b = random.randint(1, 100)
print(a == b)
출력: ________________
이유:
4.¶
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
c = {4, 5}
result = a & b | c - a
print(sorted(result))
출력: ________________
이유:
[Ⅱ. 코드 작성] (각 15점)¶
5. (함수) 대소문자를 구분하지 않고 회문(palindrome) 여부를 판별하는 함수 is_palindrome(s)를 작성하세요.¶
is_palindrome("Level") → True
is_palindrome("Hello") → False
6. (리스트) 리스트를 크기 n씩 나눈 리스트의 리스트로 반환하는 함수 chunk(lst, n)을 작성하세요. 마지막 묶음은 n보다 작을 수 있습니다.¶
chunk([1, 2, 3, 4, 5], 2) → [[1, 2], [3, 4], [5]]
7. (딕셔너리) 두 딕셔너리를 합치되, 같은 키가 있으면 값을 더하는 함수 merge_sum(d1, d2)를 작성하세요.¶
merge_sum({"a": 1, "b": 2}, {"b": 3, "c": 4}) → {'a': 1, 'b': 5, 'c': 4}
[Ⅲ. 오류 찾기·수정] (15점)¶
8.¶
def add_item(item, basket=[]):
basket.append(item)
return basket
cart1 = add_item("apple")
cart2 = add_item("banana")
print(cart1)
print(cart2)
이 코드를 실행하면 어떤 문제가 발생하는지 설명하고, 올바르게 고친 코드를 작성하세요.