콘텐츠로 이동

파이썬 서술형 — 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)

이 코드를 실행하면 어떤 문제가 발생하는지 설명하고, 올바르게 고친 코드를 작성하세요.