14wk-1: 퀴즈9

Author

최규빈

Published

June 5, 2024

Caution
  • 전북대 학생들을 시험당일 학생증을 지참할 것. (출석체크 및 본인확인) 학생증 외에 신분증 여권등도 가능.
  • 부정행위 (카카오톡 채팅을 통한 코드공유, 생성형모델 사용, 대리시험 등) 적발시 F 처리함.
  • 퀴즈 중 지각할 경우 지각사실을 기록함. 하지만 별 다른 감점은 하지 않음.
  • .ipynb 파일 형태로 제출된 답안지만 채점하며 그 외의 형식 (.hwp, .py 등)은 채점하지 않음. 즉 0점 처리함.
import numpy as np

1. – 30점

아래와 같은 기능을 하도록 클래스 Coin을 설계하라.

# 예시1

ins = Coin()
ins.toss()
동전을 던져서 앞면이 나왔습니다.
ins.toss()
동전을 던져서 뒷면이 나왔습니다.
ins
결과: ['앞면', '뒷면']
len(ins)
2
ins[0]
'앞면'
ins[1]
'뒷면'

#

# 예시2

ins = Coin()
for i in range(10):
    ins.toss()
동전을 던져서 앞면이 나왔습니다.
동전을 던져서 앞면이 나왔습니다.
동전을 던져서 뒷면이 나왔습니다.
동전을 던져서 뒷면이 나왔습니다.
동전을 던져서 앞면이 나왔습니다.
동전을 던져서 뒷면이 나왔습니다.
동전을 던져서 앞면이 나왔습니다.
동전을 던져서 뒷면이 나왔습니다.
동전을 던져서 앞면이 나왔습니다.
동전을 던져서 뒷면이 나왔습니다.
ins
결과: ['앞면', '앞면', '뒷면', '뒷면', '앞면', '뒷면', '앞면', '뒷면', '앞면', '뒷면']
len(ins)
10
ins[-1]
'뒷면'

#

(풀이)

class Coin:
    def __init__(self):
        self.results = []
    def toss(self):
        result = np.random.choice(['앞면','뒷면'])
        self.results.append(result)
        print(f"동전을 던져서 {result}이 나왔습니다.")
    def __repr__(self):
        return f"결과: {self.results}"
    def __getitem__(self,idx): 
        return self.results[idx]
    def __len__(self):
        return len(self.results)

2. – 30점

아래와 같은 기능을 하도록 클래스 Container을 설계하라.

# 예시

ins = Container()
ins
아이템: []
ins + 1 + 1 + 2 
아이템: [1, 1, 2]
ins + 2 + 2 + 2 
아이템: [1, 1, 2, 2, 2, 2]
ins + 2 + 2 + 2 + 4 
아이템: [1, 1, 2, 2, 2, 2, 2, 2, 2, 4]
ins.freq()
{1: 2, 2: 7, 4: 1}

#

(풀이)

class Container:
    def __init__(self):
        self.items = []
    def __add__(self,v):
        self.items.append(v)
        return self
    def __repr__(self):
        return f"아이템: {self.items}"
    def freq(self):
        return {s:self.items.count(s) for s in set(self.items)}

3. – 40점

아래와 같은 기능을 하도록 Quiz 클래스를 만들어라.

# 예시

guebin = Quiz()
daho = Quiz()
guebin.save_score(10)
guebin
퀴즈1: 10
daho.save_score(8)
daho
퀴즈1: 8
guebin == daho, guebin > daho # 퀴즈의 총합비교
(False, True)
guebin.save_score(8)
guebin
퀴즈1: 10
퀴즈2: 8
daho.save_score(10)
daho
퀴즈1: 8
퀴즈2: 10
guebin == daho, guebin > daho # 퀴즈의 총합비교
(True, False)
guebin[-1] == daho[-1], guebin[-1] > daho[-1] # 최근 퀴즈점수 비교 
(False, False)

#

(풀이)

class Quiz:
    def __init__(self):
        self.scores = [] 
        self.n = 0 
        self.text = ""
        self.score = None
    def save_score(self,score):
        self.score = score
        self.n = self.n +1 
        self.scores.append(self.score)
    def __getitem__(self,idx):
        return self.scores[-idx]
    def __repr__(self):
        self.text = self.text + f"퀴즈{self.n}: {self.score}\n"
        return self.text
    def __eq__(self,other):
        return sum(self.scores) == sum(other.scores)
    def __gt__(self,other):
        return sum(self.scores) > sum(other.scores)