[혼공파] # 8. 클래스

문연수·2023년 1월 20일
0

혼공파

목록 보기
8/8

1. 확인 문제

- 1. 클래스 설계해보기

* RPG 게임

프로그램객체속성
유저 정보유저의 계정 ID, 비밀번호, etc.
RPG플레이어 정보레벨, 상태, 플레이어의 직업, 소지금
게임직업 데이터성장 능력치, 배울 수 있는 기술들
몬스터 정보몬스터 이름, 레벨, 드랍 아이템

* 사원 정보 관리 시스템

프로그램객체속성
사원 정보사번, 사원명, 소속 부서, 입사일
사원 정보사원 그룹그룹명, 인원수, 팀장
관리 시스템권한 책임 정보권한명, 수행 가능 명령
근태 정보출근 기록, 퇴근 기록, 야근 기록

* POS (Point Of Sales) System

프로그램객체속성
품목 정보이름, 가격, 소지량
POS매장 정보매장명, 소지 품목
시스템매출, 매입 정보매입량, 판매량
직원 정보직원명, 출퇴근 시간

- 2. 객체 별 속성 비교

게임 별 플레이어 객체 비교

* FPS 게임

  • 유저명
  • 체력 정보
  • 소지한 무기 정보 (주무기, 보조무기)
  • 소지한 방어구 정보 (방탄모, 방탄복, 배낭)
  • 소지한 아이템 정보 (탄약, 투척물, 치료제)
  • 킬 정보, 데스 정보

* RPG 게임

  • 유저명
  • 직업
  • 상태 정보 (HP, MP, EXP, 버프 및 상태이상)
  • 보유 기술
  • 보유 장비
  • 소지금

* 바둑

  • 유저명
  • 급/단
  • 승률

- 3. 객체에 따른 행위

1. 클래스 설계하기 항목에서 찾은 객체 중 두 가지를 택하여 그 행위를 다섯 가지 정하기

* RPG 게임

  1. 로그인하기 (유저 정보)
  2. 스킬 사용 (플레이어 정보)
  3. 전직 (플레이어 정보, 직업 정보)
  4. 아이템 구매 (플레이어 정보)
  5. 몬스터 처치 (몬스터 정보)

* 사원 정보 관리 시스템

  1. 채용 (권한 책임 정보)
  2. 부서 배정 (사원 정보, 사원 그룹)
  3. 인사 발령 (사원 정보, 사원 그룹, 권한 책임 정보)
  4. 징계 (사원 정보, 권한 책임 정보)
  5. 야근 수당 지급 (사원 정보, 근태 정보)

2. 클래스의 추가적인 구문

- 1. 연산자 오버로딩

# 클래스를 선언합니다.
class Student:
        def __init__(self, name, korean, math, english, science):
                self.name = name
                self.korean = korean
                self.math = math
                self.english = english
                self.science = science

        def get_sum(self):
                return self.korean + self.math + \
                           self.english + self.science

        def get_average(self):
                return self.get_sum() / 4

        def __eq__(self, value):
                return self.get_average() == value

        def __ne__(self, value):
                return self.get_average() != value

        def __gt__(self, value):
                return self.get_average() > value

        def __ge__(self, value):
                return self.get_average() >= value
        def __lt__(self, value):
                return self.get_average() < value

        def __le__(self, value):
                return self.get_average() <= value

# 학생을 선언합니다.
test = Student("A", 90, 90, 90, 90)

print("test == 90", test == 90)
print("test != 90", test != 90)
print("test > 90", test > 90)
print("test >= 90", test >= 90)
print("test < 90", test < 90)
print("test <= 90", test <= 90)

3. 도전 문제

- 1. StudentList 클래스 구현하기

class Student:
        def __init__(self, name, score):
                self.name = name
                self.score = score

class StudentList:
        def __init__(self):
                self.students = []

        def append(self, student):
                self.students.append(student)

        def get_average(self):
                if (len(self.students) <= 0):
                        return -1

                total = 0
                for student in self.students:
                        total += student.score

                return total / len(self.students)

        def get_first_by_score(self):
                if (len(self.students) <= 0):
                        return None

                highest = self.students[0]
                for student in self.students[1:]:
                        if (student.score > highest.score):
                                highest= student

                return highest

        def get_last_by_score(self):
                if (len(self.students) <= 0):
                        return None

                lowest = self.students[0]
                for student in self.students[1:]:
                        if (student.score < lowest.score):
                                lowest = student

                return lowest

students = StudentList()

students.append(Student("구름", 100))
students.append(Student("별", 49))
students.append(Student("초코", 81))
students.append(Student("아지", 90))

print(f"학급의 평균 점수는 {students.get_average()}입니다.")
print(f"가장 성적이 높은 학생은 {students.get_first_by_score().name}입니다.")
print(f"가장 성적이 높은 학생은 {students.get_last_by_score().name}입니다.")

- 2. 스택 구현하기

class Stack:
        def __init__(self):
                self.list = []

        def push(self, item):
                self.list.append(item)

        def pop(self):
                if (len(self.list) == 0):
                        return None

                return self.list.pop()

stack = Stack()

stack.push(10)
stack.push(20)
stack.push(30)

print(stack.pop())
print(stack.pop())
print(stack.pop())

- 3. 큐 구현하기

class Queue:
        def __init__(self):
                self.list = []

        def enqueue(self, item):
                self.list.append(item)

        def dequeue(self):
                if (len(self.list) == 0):
                        return None

                return self.list.pop(0)

queue = Queue()

queue.enqueue(10)
queue.enqueue(20)
queue.enqueue(30)

print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
profile
2000.11.30

0개의 댓글