함수만들기
:주민번호입력받고 성별출력하는 함수
def check_gender(pin):
성별출력하는 함수 주민번호 입력
num = pin.split('-')[1][0]
if int(num) % 2 == 0:
print('여성입니다')
else:
print('남성입니다')
check_gender('150101-1010234')
# '1' 문자 -> 숫자
check_gender('150101-2010234')
# '2'
check_gender('250101-4010234')
# '4'
a = '-' * 6
print(a)
출력
------
def amuroke(a, b):
print('더하기를 하셨네요!!')
# 중간에 넣으면
return a + b
result = amuroke(3, 5)
print(result)
# 위에서 아래로 프린트를하고 8로 변신시킴
출력
더하기를 하셨네요!!
8
문자열 연산은
문자열 더하기
문자열 + 문자열 = 문자열문자열(이어붙히기)
문자열 곱하기
문자열 * 숫자 = 숫자만큼문자열반복
맵, 필터, 람다는 리스트 조작 함수: 리스트 돌면서 함수 쓰는 것.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
# 피플리스트 하나씩돌면서 쳌크어덜트에다가 넣어라 . 그결과값을 리스트로 묶은것
result = map(lambda x: x, people)
# 피플리스트 하나씩 돌면서 x에다가 넣을껀데 그 x를 가지고 조건식 을 리턴해라
result = filter(lambda person: person['age'] > 20, people)
# 필터는 트루만 나온다
print(list(result))
def cal(a, b):
(a, b=2)
return a+2*b
result = cal(1, 2)
지정하면 순서 안맞춰도됨 (b=2, a=1)
cal(1) b안넣어도 넣었다고 생각함
cal(1, 3) 오류안남 넣어주면 넣어준 값으로 계산
cal(*args) 변수 무제한받기, 리스트로 받아서 써먹기 가능
print(result)
def cal(*args):
# 인자 무제한 받기
for name in args:
print(f'{name} 밥먹어라~')
cal('나현')
하나만 넣어도 나오고 2개 넣으면 2개 3개 넣으면 3개 무제한으로 받는것
변수의 갯수의 지정없이
def cal(**kwargs):
# 키워드인수 여러개 받기 딕셔너리로 출력됨
print(kwargs)
cal(name = 'bob', age = 30)
출력
{'name': 'bob', 'age': 30}
클래스와 함수 공통점은
코드의 재사용성을 높여준다 (코드중복작성안되게)
여러 상태를 표현하기 위해 개수만큼 함수와 변수를 재정의해야하는 불편을 해결
각 객체를 독립적으로 관리
클래스와 함수 차이점은 상태를 관리하는 측면에서 다르다.
클래스로 객체를 선언하면 각 객체는 독립적이어서 상태 관리에 용이하다.
함수는 여러 상태를 동시에 관리할수없다
관리하려는 상태의 개수만큼 변수와 함수를 그때마다 새롭게 정의해야한다.
언제 사용? 게임 ? 몬스터들의 에너지 관리
1.몬스터마다 에너지를 갖게 한다 (몬스터마다 자기껄 자기가 갖고있게 하는 것)
2.중앙에서 관리
몬스터가 10000마리라면?
몬스터 중앙에서 관리하는게 효율적?
몬스터가 몬스터 자체적으로 에너지를 관리하는게 효율적이고 직관적이다 = 객체지향적
객체지향적 : 물체에대가 물체에 관련된 속성들을 넣어두고
컨트롤 할 수 있는 함수를 만들어서 붙혀주고 중앙에서는 그 함수만 불러다가 그 물체를 제어한다.
---> 클래스로 객체를 선언하면 각 객체는 독립적 = 객체끼리 영향 안받음
함수는 독립적이지 못함
클래스와 객체의 관계를 표현하는 용어가 인스턴스 = 실체를 표현하는 용어가 객체
class Monster():
# ㄴ클래스 생긴 모습
hp = 100
# 에너지를 갖고있고 클래스에서는 변수를 속성 이라고 명명
alive = True
# 처음에는 살아있는 상태
def damage(self, attack):
# 몬스터는 데미지함수를 가져서 외부에서 부를수있다
self.hp = self.hp - attack
# 내 hp가 어택만큼 줄어들꺼야 =나의 hp기때문에 self를 붙힘
** 함수안에서 셀프를 붙혀야 위에 있는 속성 hp를 가리킬수있다.**
if self.hp < 0:
self.alive = False
def status_check(self):
# if self.alive == True:
if self.alive:
# 두개 같은거
print('살았다')
else:
print('죽었다ㅠ')
class안에서 쓰는 모든 함수(=메서드)는 첫번째인자로 자기자신self를 받는다.
자기자신을 계속 인자로 주기때문에 상태를 관리할 수 있는것
클래스에서는 함수를 메서드라고 명명
몬스터가 갖고있는 함수는 데미지함수
class Nahyun():
어떻게 써먹냐?
nh = Monster()
nh가 몬스터 한마리가 인스턴스다 객체다.
클래스로 만들어진 객체 내가 만든 클래스의 속성을 가진 객체
nh.damage(150)
nh.status_check()
출력
죽었다ㅠ