목차
2.1 클래스
2.2 재귀 함수
2.3 (부록)재귀함수가 반복문보다 나은 경우
Dice()
클래스 예시는 주사위를 소환하고(__init__
) 굴려서(roll
) 주사위의 눈금을 확인하는(get_face
)클래스로, 간편하게 반복 작업을 수행할 수 있음import random
class Dice:
def __init__(self):
self.face = 0
def get_face(self): # 주사위의 숫자를 리턴한다.
return self.face
def roll(self):
# 1~6 사이의 랜덤한 정수값으로 face 속성을 갱신한다.
self.face = random.randint(1,6)
# 아래를 수정하시오.
d1 = Dice() # Dice()클래스의 인스턴스 호출
d2 = Dice()
d3 = Dice()
d1.roll() # roll()메소드 호출
d2.roll()
d3.roll()
print(d1.get_face(),d2.get_face(),d3.get_face()) # 메소드를 호출하는 것이 더 낫다.
print(d1.face, d2.face, d3.face) # 멤버변수를 호출하는 것이 더 복잡함(최대한 접근하지 못하게 해야 함)
self
: 생성된 인스턴스 자신Dice()
클래스에서 속성은 face
Dice()
클래스에서 메서드는 __init__
,get_face
, roll
이 있음.__init__
메서드는 속성의 초기화 동작을 수행d1
,d2
핵심은, 이 세상에서 유일한 망치를 만들기 위해 필요한 그 망치가 이미 존재한다고 믿는 것!
정답
class Student:
def __init__(self, name, id, major):
self.name = name
self.id = id
self.major = major
def get_name(self):
return self.name
def get_id(self):
return self.id
def get_major(self):
return self.major
def print(self): # 메소드 print()
print('Name:%s, ID:%s, Major:%s'%(self.get_name(), self.get_id(), self.get_major())) # 파이썬의 기본 print함수
# print(f"Name:{self.get_name()}, ID:{self.get_id()}, Major:{self.get_major()}")
## 아래는 수정하지 마시오.
s1 = Student('Lee', 101, "Data Science")
s2 = Student('Kim', 102, "Mathmatics")
print(s1.get_name())
print(s2.get_name())
s1.print()
s2.print()
import random
class Dice:
def __init__(self):
self.face = 0
def get_face(self): # 주사위의 숫자를 리턴한다.
return self.face
def roll(self):
# 1~6 사이의 랜덤한 정수값으로 face 속성을 갱신한다.
self.face = random.randint(1,6)
# 아래를 수정하시오.
d1 = Dice() # Dice()클래스의 인스턴스 호출
d2 = Dice()
d3 = Dice()
d1.roll() # roll()메소드 호출
d2.roll()
d3.roll()
print(d1.get_face(),d2.get_face(),d3.get_face()) # 메소드를 호출하는 것이 더 낫다.
print(d1.face, d2.face, d3.face) # 멤버변수를 호출하는 것이 더 복잡함(최대한 접근하지 못하게 해야 함)
def count_up(n):
if n == 1 :
print(1)
else:
count_up(n-1)
print(n)
count_up(4)
print('==========')
count_up(5)
def recur_sum(nums):
if len(nums) <= 1:
return nums[0]
else:
return recur_sum(nums[:-1]) + nums[-1]
# 아래는 수정하지 마시오.
print(recur_sum([1,2,3]))
print(recur_sum([2,1,2,3]))
def fibo(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibo(n-2) + fibo(n-1)
# 아래는 수정하지 마시오.
for i in range(0, 11):
print(fibo(i))
def reverse_str(x):
if len(x) <=1:
return x
elif len(x) == 2:
return x[1]+x[0]
else:
return x[-1]+reverse_str(x[:-1])
print(reverse_str("abc"))
print(reverse_str("123456"))
재귀적인 표현이 자연스러운 알고리즘
[EX] 피보나치 수열 점화식( f(n) = f(n - 1) + f(n - 2) )
가독성 향상