표준 입력으로 게임 캐릭터 능력치(체력, 마나, AP)가 입력됩니다. 다음 소스 코드에서 애니(Annie) 클래스를 작성하여 티버(tibbers) 스킬의 피해량이 출력되게 만드세요. 티버의 피해량은 AP * 0.65 + 400이며 AP(Ability Power, 주문력)는 마법 능력치를 뜻합니다.
입력
511.68 334.0 298
결과
티버: 피해량 593.7
입력
1803.68 1184.0 645
결과
티버: 피해량 819.25
point ✅
- class로
Annie
클래스를 만들고__init__
메서드에 매개변수로self
,health
,mana
,ability_power
를 지정한다.
이 때 첫 번째 매개변수는self
여야 한다.- 메서드 안에는
self.health = health
처럼 모든 매개변수를 그대로 속성으로 만들어 준다.Annie
클래스 안에tibbers
메서드를 만든다.
표준 입력으로 시:분:초 형식의 시간이 입력됩니다. 다음 소스 코드에서 Time 클래스를 완성하여 시, 분, 초가 출력되게 만드세요. from_string은 문자열로 인스턴스를 만드는 메서드이며 is_time_valid는 문자열이 올바른 시간인지 검사하는 메서드입니다. 시간은 24시까지, 분은 59분까지, 초는 60초까지 있어야 합니다. 정답에 코드를 작성할 때는 class Time:에 맞춰서 들여쓰기를 해주세요.
입력
23:35:59
결과
23 35 59
입력
12:62:43
결과
잘못된 시간 형식입니다.
point ✅
from_string
메서드는Time.from_string
처럼 호출하고 있고, 현재 클래스로 인스턴스를 만들어야 하므로 클래스 메서드로 만든다.
@classmethod
를 붙여준 뒤 첫 번째 매개변수에 cls를 지정하고, 두 번째 매개변수로 날짜 문자열 time_string을 지정한다.
메서드 안에서는hour, minute, second = map(int, time_string.split(':'))
와 같이 ':'로 문자열을 분리한 뒤 int로 변환해서 각 변수에 넣어준다.
time = cls(hour, minute, second)
와 같이 클래스에 변수를 넣어서 인스턴스를 만들어 준다.여기서cls(hour, minute, second)
는Time(hour, minute, second)
와 같다.
인스턴스는 바깥에서 사용할 수 있도록 return으로 반환해준다.is_time_valid
메서드는 문자열이 올바른 시간인지 검사만 하면 되고, 클래스에 접근할 필요는 없기 때문에 정적 메서드로 만든다.
메서드 위에@staticmethod
를 붙여준 뒤 첫 번째 매개변수로 날짜 문자열time_string
을 지정한다.메서드 안에서는hour, minute, second = map(int, time_string.split(':'))
와 같이 ':'로 문자열을 분리한 뒤 int로 변환해서 각 변수에 넣어주고
return hour <= 24 and minute <= 59 and second <= 60
과 같이 시간이 24 이하이고 분이 59 이하이면서 초가 60 이하인지 검사하고 결과를 반환하도록 만든다. (모두 만족하면 True가 반환되고 하나라도 만족하지 않으면 False)
다음 소스 코드에서 동물 클래스 Animal과 날개 클래스 Wing을 상속받아 새 클래스 Bird를 작성하여 '먹다', '파닥거리다', '날다', True, True가 각 줄에 출력되게 만드세요.
class Animal:
def eat(self):
print('먹다')
class Wing:
def flap(self):
print('파닥거리다')
________________
________________
________________
b = Bird()
b.eat()
b.flap()
b.fly()
print(issubclass(Bird, Animal))
print(issubclass(Bird, Wing))
결과
먹다
파닥거리다
날다
True
True
point ✅
- 클래스
Animal
과Wing
을 상속받아Bird
를 작성하라고 했기 때문에class Bird(Animal, Wing):
과 같이 클래스를 만든다.b.eat()
,b.flap()
,b.fly()
처럼 메서드를 호출하고 있는데 eat 메서드는 Animal에, flap 메서드는 Wing에 구현되어 있으므로 fly 메서드는 Bird에서 구현해야 한다.
표준 입력으로 x, y 좌표 4개가 입력되어 Point2D 클래스의 인스턴스 리스트에 저장됩니다. 여기서 점 4개는 첫 번째 점부터 마지막 점까지 순서대로 이어져 있습니다. 다음 소스 코드를 완성하여 첫 번째 점부터 마지막 점까지 연결된 선의 길이가 출력되게 만드세요.
import math
class Point2D:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
length = 0.0
p = [Point2D(), Point2D(), Point2D(), Point2D()]
p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y, p[3].x, p[3].y = map(int, input().split())
_____________________
_____________________
_____________________
_____________________
print(length)
입력
10 10 20 20 30 30 40 40
결과
42.42640687119285
입력
100 100 200 200 300 300 400 400
결과
424.26406871192853
point ✅
- 피타고라스의 정리 이용
- 반복문으로 반복하면서 현재 점 p[i]와 다음 점 p[i + 1] 사이의 거리를 구한 뒤 length 변수에 계속 더해준다.
- 마지막 점은 다음 점이 없으므로 반복문은
for i in range(len(p) - 1):
과 같이 만들어서 마지막 요소의 바로 앞 요소까지만 반복한다.