연습문제 기록
class Team:
### 클래스 속성
'''팀 객체를 만듭니다'''
count = 0
order = []
def __init__(self, number, name = None, member = set()):
### 인스턴스 속성
self.number = number
self.name = name
self.__member = member
Team.count += 1
Team.order.append(number)
def add_member(self, name):
'''팀원을 추가합니다'''
# 해당 이름이 팀에 없을 경우
if name not in self.__member:
self.__member.add(name)
print(f'{name}님을 팀 {self.number}에 추가했습니다.')
# 해당 이름이 팀에 있을 경우
else:
print(f'{name}님은 이미 팀에 있습니다.')
def rm_member(self, name):
'''팀원을 삭제합니다'''
if name in self.__member:
self.__member.remove(name)
print(f'{name}님을 팀에서 삭제했습니다.')
else :
print(f'{name}님은 해당 팀에 없습니다.')
def get_count(self):
'''팀의 수를 리턴합니다'''
return Team.count
def get_order(self):
'''팀 생성 순서를 받습니다'''
return Team.order
def set_order(self, x):
'''팀 순서를 조정합니다'''
if x in Team.order:
Team.order.remove(x)
Team.order.append(x)
else :
Team.order.append(x)
# 내장함수(Built-in-function) Len(Team()) --> 파이썬이 __len__(self)를 찾아서 실행
def __len__(self):
'''각 팀의 멤버 수를 리턴합니다'''
return len(self.__member)
클래스 속성, 인스턴스 속성(attribute)
클래스는의 속성은 class 안에 바로 정의되는 변수
인스턴스 속성은 클래스로 만들어질 각 개체에 정의되는 변수
- 클래스 속성은 클래스 전부에 걸쳐지는 속성
- 인스턴스 속성은 클래스 한 객체에만 적용되는 속성
연습문제 심화 : 이전 클래스 코드를 활용하여, 다음 문제를 해결하시오.
import random
class Team:
"""팀 객체를 만듭니다."""
# 클래스 속성
count = 0 # Team 클래스로부터 초기화된 인스턴스 개수
order = []
def __init__(self, number, name=None, member=set()):
self.number = number
self.name = name
self.member = member
Team.count += 1
def add_member(self, name):
# 해당 이름이 팀에 있을 경우
if name in self.member:
print(f"{name} 님은 이미 팀에 있습니다.")
return
# 해당 이름이 팀에 없을 경우
else:
self.member.add(name)
print(f"{name} 님을 {self.number} 팀에 추가했습니다.")
def rm_member(self, name):
# 해당 이름이 팀에 있을 경우
if name in self.member:
self.member.discard(name)
print(f"{name} 님을 {self.number} 팀에서 삭제했습니다.")
# 해당 이름이 팀에 없을 경우
else:
print(f"{name} 님은 해당 팀에 없습니다.")
def get_count(self):
return self.count
def get_order(self):
return self.order
def set_order(self, number):
if number in self.order:
self.order.remove(number)
self.order.append(number)
# 내장 함수(Built-in function) len(Team()) --> 파이썬이 __len__(self)를 찾아서 실행
def __len__(self):
return len(self.member)
def team_extractor(names, team_count):
team_count_list = [len(names) // team_count for x in range(team_count)]
for idx, i in enumerate(range(0, len(names) % team_count)):
team_count_list[idx] += 1
random_team_list = []
names_copy = names.copy()
for x in team_count_list:
samplelist = random.sample(names_copy, x)
for name in samplelist:
names_copy.remove(name)
random_team_list.append(samplelist)
return random_team_list
class TeamBuilder():
has_team = False
teams = []
def __init__(self, members, teams_count):
self.members = members
self.teams_count = teams_count
def creat_team(self):
if TeamBuilder.has_team == False:
# 랜덤 팀 리스트 생성
random_team_list = team_extractor(self.members, self.teams_count)
[TeamBuilder.teams.append(x) for x in random_team_list]
# 팀 추가(Team Class)
for idx, random_team in enumerate(random_team_list):
globals()['t'+str(idx + 1)] = Team(idx + 1, member = set(random_team))
print(f'팀을 {len(random_team_list)}개 생성했습니다')
TeamBuilder.has_team = True
else :
TeamBuilder.teams = []
print('기존의 팀 정보를 지우고 새로 생성합니다.')
# 랜덤 팀 리스트 생성
random_team_list = team_extractor(self.members, self.teams_count)
[TeamBuilder.teams.append(x) for x in random_team_list]
# 팀 추가(Team Class)
for idx, random_team in enumerate(random_team_list):
globals()['t'+str(idx + 1)] = Team(idx + 1, member = set(random_team))
print(f'팀을 {len(random_team_list)}개 생성했습니다')
def show_team_info(self):
for team_num, team in enumerate(TeamBuilder.teams):
print(f"{team_num + 1}팀은 {' '.join(team)} 입니다.")
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(Pandas_DataFrame3) (0) | 2023.01.20 |
---|---|
[Python] 기초 정리(Pandas_DataFrame2) (2) | 2023.01.19 |
[Python] 기초 정리(Pandas_DataFrame) (0) | 2023.01.18 |
[Python] 기초 정리(Pandas_Series) (2) | 2023.01.18 |
[Python] 기초 정리(Numpy) (0) | 2023.01.16 |