-
파이썬 class_예제문제파이썬 2021. 7. 18. 22:18728x90
파이썬 class_예제문제
스타크래프트 class
from random import * #//랜덤화를 위한 라이브러리 호출 #일반유닛 class Unit: def __init__(self, name, hp, speed): self.name = name self.hp = hp self.speed = speed print("{0} 유닛이 생성 되었습니다".format(name)) def move(self, location): print("{0} : {1}방향으로 이동합니다. [속도: {2}]".format(self.name, location,self.speed)) #//데미지 메서드 def damaged(self, damage): print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage)) self.hp -= damage print("{0}: 현재 체력은 {1}입니다.".format(self.name, self.hp)) if self.hp <= 0 : print("{0} :파괴되었습니다.".format(self.name)) #공격유닛 class AttackUnit(Unit): #상속받을 클래스를 괄호안에 넣어줌 def __init__(self, name, hp, speed, damage): Unit.__init__(self, name, hp, speed) #상속받음 self.damage = damage #//공격메서드 def attack(self, location): print("{0} : {1}방향으로 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage)) class Marine(AttackUnit): def __init__(self): AttackUnit.__init__(self,"마린", 40, 1, 5) #스팀팩 기능 -일정 시간동안 이동 및 공격 속도를 증가,체력 10 감소 def stimpack(self): if self.hp > 10: self.hp -= 10 print("{0}:스팀팩을 사용합니다. (HP 10 감소)".format(self.name)) else: print("{0}: 체력이 부족하여 스팀팩을 사용하지 않습니다.".format(self.name)) class Tank(AttackUnit): #시즈모드: 탱크를 지상에 고정시켜, 더 높은 파워로 공격하는 기능, 이동 불가 seize_developed = False # 시즈모드 개발 여부 def __init__(self): AttackUnit.__init__(self, "탱크", 150, 1, 35) self.seize_mode = False def set_seize_mode(self): if Tank.seize_developed == False: return #현재 시즈모드가 아닐때 =>시즈모드 if self.seize_mode ==False: print("{0} : 시즈모드로 전환합니다.".format(self.name)) self.damage *= 2 self.seize_mode = True #현재 시즈모드 일때 -> 시즈모드 해제 else: print("{0} : 시즈모드로 해제합니다.".format(self.name)) self.damage /= 2 self.seize_mode = False #드랍쉽:공중 유닛, 수송기/ 공격기능은 없음 #날 수 있는 기능을 가진 클라스 class Flyable: def __init__(self, flying_speed): self.flying_speed = flying_speed def fly(self, name, location): print("{0}: {1} 방향으로 날아갑니다. [속도 : {2}]".format(name, location,self.flying_speed)) #공중 공격 유닛 클래스 class FlyableAttackUnit(AttackUnit, Flyable): def __init__(self, name, hp, damage, flying_speed): AttackUnit.__init__(self, name, hp,0 , damage) #//지상스피드는 들어갈 필요X Flyable.__init__(self, flying_speed) def move(self, location): #//상속받았던 move를 재정의 해줌!!!!!!! self.fly(self.name, location) class Wraith(FlyableAttackUnit): def __init__(self): FlyableAttackUnit.__init__(self, "레이스", 80, 20, 5) self.clocked = False #클로킹 모드(해제 상태) def clocking(self): if self.clocked == True: print("{0}: 클로킹 모드 해제합니다".format(self.name)) self.clocked = False else: print("{0}: 클로킹 모드 설정합니다".format(self.name)) self.clocked = True def game_start(): print("[알림] 새로운 게임을 시작합니다.") def game_over(): print("Player : gg") print("[Player] 님이 게임에서 퇴장했습니다.") ####실제 게임 진행 game_start() #마린 3기 생성 m1 = Marine() m2 = Marine() m3 = Marine() #탱크 3기 생성 t1 = Tank() t2 = Tank() #레이스 1기 생성 w1 = Wraith() #유닛 일괄 관리 attack_units = [] attack_units.append(m1) attack_units.append(m2) attack_units.append(m3) attack_units.append(t1) attack_units.append(t2) attack_units.append(w1) #전군 이동 for unit in attack_units: unit.move("1시") #탱크 시즈모드 개발 Tank.seize_developed = True print("[알림] 시즈모드 개발이 완료되었습니다.") #공격 모든 준비 (마린 스팀팩탱크: 시즈모드, 레이스 : 클로킹) for unit in attack_units: if isinstance(unit, Marine): unit.stimpack() elif isinstance(unit, Tank): unit.set_seize_mode() elif isinstance(unit, Wraith): unit.clocking() #전군 공격 for unit in attack_units: unit.attack("1시") #전군 피해 for unit in attack_units: unit.damaged(randint(5, 21)) #공격을 랜덤으로 받음 #게임 종료 game_over() #결과값 ''' 마린 유닛이 생성 되었습니다 마린 유닛이 생성 되었습니다 마린 유닛이 생성 되었습니다 탱크 유닛이 생성 되었습니다 탱크 유닛이 생성 되었습니다 레이스 유닛이 생성 되었습니다 마린 : 1시방향으로 이동합니다. [속도: 1] 마린 : 1시방향으로 이동합니다. [속도: 1] 마린 : 1시방향으로 이동합니다. [속도: 1] 탱크 : 1시방향으로 이동합니다. [속도: 1] 탱크 : 1시방향으로 이동합니다. [속도: 1] 레이스: 1시 방향으로 날아갑니다. [속도 : 5] [알림] 시즈모드 개발이 완료되었습니다. 마린:스팀팩을 사용합니다. (HP 10 감소) 마린:스팀팩을 사용합니다. (HP 10 감소) 마린:스팀팩을 사용합니다. (HP 10 감소) 탱크 : 시즈모드로 전환합니다. 탱크 : 시즈모드로 전환합니다. 레이스: 클로킹 모드 설정합니다 마린 : 1시방향으로 적군을 공격합니다. [공격력 5] 마린 : 1시방향으로 적군을 공격합니다. [공격력 5] 마린 : 1시방향으로 적군을 공격합니다. [공격력 5] 탱크 : 1시방향으로 적군을 공격합니다. [공격력 70] 탱크 : 1시방향으로 적군을 공격합니다. [공격력 70] 레이스 : 1시방향으로 적군을 공격합니다. [공격력 20] 마린 : 11 데미지를 입었습니다. 마린: 현재 체력은 19입니다. 마린 : 18 데미지를 입었습니다. 마린: 현재 체력은 12입니다. 마린 : 17 데미지를 입었습니다. 마린: 현재 체력은 13입니다. 탱크 : 16 데미지를 입었습니다. 탱크: 현재 체력은 134입니다. 탱크 : 9 데미지를 입었습니다. 탱크: 현재 체력은 141입니다. 레이스 : 14 데미지를 입었습니다. 레이스: 현재 체력은 66입니다. Player : gg [Player] 님이 게임에서 퇴장했습니다. '''
클래스 부동산 퀴즈(QUIZ)
# Quiz) 주어진 코드를 활용하여 부동산 프로그램을 작성하시오 ''' (출력 예제) 총 3대의 매물이 있습니다. 강남 아파트 매매 10억 2010년 마포 오피스텔 전세 5억 2007년 송파 빌라 월세 500/50 2000년 ''' # [코드] class House: #매물 초기화 def __init__(self, location, house_type, deal_type, price, completion_year): self.location = location self.house_type = house_type self.deal_type = deal_type self.price = price self.completion_year = completion_year def show_detail(self): print(self. location, self.house_type, self.deal_type\ , self.price, self.completion_year) houses = [] house1 = House("강남", "아파트", "매매", "10억", "2010년") house2 = House("마포", "오피스텔", "전세", "5억", "2007년") house3 = House("송파", "빌라", "월세", "500/50억", "2000년") houses.append(house1) houses.append(house2) houses.append(house3) print(houses) print("총 {0}대의 매물이 있습니다.".format(len(houses))) for house in houses: house.show_detail()
*youtube 나도코딩 참고
'파이썬' 카테고리의 다른 글
[python] Regular Expression(정규표현식) #Step1 (0) 2021.10.23 파이썬 기초7,Quiz (0) 2021.07.19 파이썬 기초6 (0) 2021.07.18 파이썬 Day5 (0) 2021.07.17 파이썬 Day4 (0) 2021.07.17