[3번 문제] 다음 각 요구사항 모두를 만족시키는 Counter 클래스를 코딩하시오 (정답을 각 요구사항별로 입력할 필요 없이 3번 문제에 대해 1개의 클래스 정의 코드를 제시하면 된다.)
요구사항 1. 생성자에 count 값과 step 값을 인자로 받을 수 있다.
>>> c = Counter(10)
>>> d = Counter(10, 2)
요구사항 2. 다음과 같이 Counter의 인스턴스를 출력을 해주는 __str__() 메소드를 구현하시오.
>>> print c
[Count (step: 1)] 10
>>> print d
[Count (step: 2)] 10
요구사항 3. 다음과 같이 step에 주어진 증분만큼 count를 증가시키는 incr() 메소드를 구현하시오.
>>> c.incr()
>>> d.incr()
>>> print c
[Count (step: 1)] 11
>>> print d
[Count (step: 2)] 12
요구사항 4. __call__() 메소드를 추가하여 인스턴스 객체를 직접 호출할 수 있도록 하시오. 인스턴스 객체를 직접 호출했을 때의 동작방식은 incr() 메소드를 호출하였을 때와 동일하다.
>>> c()
>>> d()
>>> print c
[Count (step: 1)] 12
>>> print d
[Count (step: 2)] 14
요구사항 5. 다음과 같은 두 개의 산술 연산 (+, -)이 수행될 수 있도록 관련 메소드를 추가하시오.
>>> c = c + 5
>>> d = d - 5
>>> print c
[Count (step: 1)] 17
>>> print d
[Count (step: 2)] 9
요구사항 6. 다음과 같은 관계연산 (+, -)이 수행될 수 있도록 __cmp__() 메소드를 추가하시오.
>>> print c > 10
True
>>> print d > 10
False
>>> print c < 10
False
>>> print d < 10
True
>>> print c == 17
True
>>> print d != 9
False
class MySet(list):
def __init__(self, l):
for e in l:
self.append(e)
MySet.eliminate_duplicate(self)
def __str__(self):
result = "MySet: {"
for e in self:
result = result + str(e) + " ,"
result = result[0:len(result)-2] + "}"
return result
@staticmethod
def eliminate_duplicate(l):
s = []
for e in l:
if e not in s:
s.append(e)
l[:] = []
for e in s:
l.append(e)
if __name__ == "__main__":
s = MySet([1, 2, 2, 3])
print s
t = MySet([2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 9])
print t
MySet: {1 ,2 ,3} MySet: {2 ,3 ,4 ,5 ,6 ,7 ,8 ,9}
[5번 문제] 4번 문제에 정의된 MySet 클래스에 메소드를 추가하여 다음 각 요구사항 모두를 만족시키는 코딩을 제시하시오 (정답을 각 요구사항별로 입력할 필요 없이 5번 문제에 대해 1개의 MySet 클래스 정의 코드를 제시하면 된다.)
요구사항 1. | 연산으로 두 집합의 합집합을 반환한다.
>>> s = s | t
>>> print s
MySet: {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9}
요구사항 2. & 연산으로 두 집합의 교집합을 반환한다.
>>> s = MySet([1, 2, 3])
>>> t = MySet([3, 4, 5])
>>> s = s & t
>>> print s
MySet: {3}
요구사항 3. - 연산으로 두 집합의 차집합을 반환한다.
>>> s = MySet([1, 2, 3])
>>> t = MySet([3, 4, 5])
>>> s = s - t
>>> print s
MySet: {1, 2}
[6번 문제] 5번 문제에서 정의한 MySet 클래스에 대해 다음 예제를 수행하면 오류없이 올바르게 동작하는 것을 확인할 수 있다. 다음 예제 내에 있는 len(), bool() 내장함수와 in 키워드 사용 예제가 별다른 메소드 정의를 하지 않았는 데도 올바르게 수행되는 이유를 설명하시오.
>>> s = MySet([1, 2, 3, 4, 5, 6])
>>> print len(s)
6
>>> print bool(s)
True
>>> print 2 in s
True
[7번 문제] 이전 Assignment 3 (Assignment 4가 아님)의 마지막 문제는 웹 URL로 지정된 웹페이지를 문자열로 가져와 모든 HTML 태그 및 CSS와 Javascript를 제외한 순수 텍스트를 얻어내고 그 안에 존재하는 단어를 추출하여 각 단어들에 대해 출현빈도를 사전형태({'world': 2, 'hello': 1, 'python': 1})로 저장하여 출력하는 것이었다. 이번에는 Assignment 3과 Assignment 4를 확장/변형하여 다음과 같은 조건을 만족하도록 구현하시오.
>>> w1 = WebWordsFrequency('http://www.daum.net', 'http://www.naver.com', 'http://www.google.co.kr')
>>> w2 = WebWordsFrequency('http://www.daum.net', 'http://www.naver.com')
>>> w3 = WebWordsFrequency()
>>> w1.addUrl('http://cse.koreatech.ac.kr')
>>> w3.addUrl('http://www.koreatech.ac.kr')
>>> w1.removeUrl('http://www.daum.net')
>>> w2.removeUrl('http://www.naver.com')
>>> w1.listUrls()
http://www.naver.com
http://www.google.co.kr
http://cse/koreatech.ac.kr
>>> w1.getWordsFrequency()
{'다음': 8, '안녕': 12, 'world': 2, '우리': 11, 'hello': 1, 'python': 1}
>>> w1.getMaxFreqencyWords()
우리
>>> w2.getMaxFreqencyWords()
다음에
안녕
[8번 문제] 7번 문제에서 정의한 WebWordsFrequency 클래스를 상속하여 OrderedWebWordsFrequency 클래스를 정의하고 슈퍼클래스에 정의된 getWordsFrequency() 메소드를 오버라이드 하여 단어 출현 빈도를 내림 차순으로 정렬하여 리스트로 출력하시오.
>>> w4 = OrderedWebWordsFrequency('http://www.daum.net', 'http://www.naver.com', 'http://www.google.co.kr')
>>> w4.getWordsFrequency()
[('안녕', 12), ('우리', 11), ('다음', 8), ('world', 2), ('hello', 1), ('python', 1)]