기초는 이제 적잖이 닦은 거 같다. 연습문제를 더더욱 많이 풀어보자~
# Q1. Calculator 클래스를 상속하는 UpgradeCalculator를 만들고 값을 뺄 수 있는 minus 메서드를 추가해 보자.
# 즉 다음과 같이 동작하는 클래스를 만들어야 한다.
# class Calculator:
# def __init__(self):
# self.value = 0
# def add(self, val):
# self.value += val
# -----------------------------
# cal = UpgradeCalculator()
# cal.add(10)
# cal.minus(7)
# print(cal.value) # 10에서 7을 뺀 3을 출력
Class 간 부모자식 사이를 만들어 보자~
# class UpgradeCalculator(Calculator):
# def minus(self,val):
# self.value -= val
# return self.value
나도 못 받아본 상속을 받는 자식 Class를 위와 같이 만들면 된다.
그냥 상속받는 순간 Upgrae... 안에 기존 Calcul..이 들어온다고 생각하면 편하네
풀이를 보니 굳이 return을 안 해줘도 된다. 어차피 cal.value를 따로 프린트 할 거니까
# Q2. 객체변수 value가 100 이상의 값은 가질 수 없도록 제한하는 MaxLimitCalculator 클래스를 만들어 보자.
# # 즉 다음과 같이 동작해야 한다. 단 반드시 다음과 같은 Calculator 클래스를 상속해서 만들어야 한다.
-----------------------------
# class Calculator:
# def __init__(self):
# self.value = 0
# def add(self, val):
# self.value += val
-----------------------------
# cal = MaxLimitCalculator()
# cal.add(50) # 50 더하기
# cal.add(60) # 60 더하기
# print(cal.value) # 100 출력
흠.. 역시 직접 실습하려니까 어렵다.
# # class MaxLimitCalculator(Calculator):
# # if self.value >= 100:
# # self.value = 100
이렇게 하니까 자꾸 Error가 뜬다.
해설을 보면..
# class MaxLimitCalculator(Calculator):
# def add(self,val):
# self.value+=val
# if self.value >= 100:
# self.value = 100
이건, 그냥 Calculator를 상속받긴 하는데 사용자체를 안 하는거네.
부모 Class 속에 있는 함수와 같은 이름을 갖는 함수를 자식 Class에 만들어서
기능을 덮어버리는 걸 보여주고 싶은건가
결론은 함수에선 자식 이기는 부모 없다.
# Q3. 다음 결과를 예측해 보자.
# 1.
# >>> all([1, 2, abs(-3)-3])
# 2.
# >>> chr(ord('a')) == 'a'
흠,, 내장함수에 익숙한가를 묻고 있군
abs는 절대값인데, all, chr,ord가 뭔지 모르겠다. 그대로 실행시켜도 아무 변화가 없길래 해설보기~
아 print를 안 해서 결과가 안 뜬 거였구나.. 멍충멍충
1번 False => -3이 절대값이 되어 all([1,2,0])이 된다. all은 리스트 성분들이 다 True인 지 묻는 함수인데
0은 False 이므로 출력은 False!
2번 True => ord('a')는 문자의 유니코드 숫자 값을 리턴하는 함수이다. ord('a')는 97이고 chr()은 유니코드상 숫자에 해당하는 문자이며
chr(97)은 'a'이다.
따라서 True!
# Q4. filter와 lambda를 사용하여 리스트 [1, -2, 3, -5, 8, -3]에서 음수를 모두 제거해 보자.
lambda는 구구절절 긴 if문을 한 줄로 표현할 수 있게 해준다.
print(list(filter(lambda x:x>0,[1,-2,3,-5,8,-3] )))
# Q5. 234라는 10진수의 16진수는 다음과 같이 구할 수 있다.
# >>> hex(234)
# '0xea'
# 이번에는 반대로 16진수 문자열 0xea를 10진수로 변경해 보자.
해설:
=>234
int 내장함수를 통해서 int('특장 문자 or 숫자로 구성된 것', N진수) 이렇게 10진수로 변경이 가능.
번외로, 십진수를 이진수로도 바꿔봤다.
# Q6. map과 lambda를 사용하여 [1, 2, 3, 4] 리스트의 각 요솟값에
# 3이 곱해진 리스트 [3, 6, 9, 12]를 만들어 보자.
해설 ->
print(list(map(lambda x:x*3,[1,2,3,4])))
익명함수 lambda는 앞서 말했듯 if문 for문 등을 한 줄로 깔끔하게 표현하게 해주는 것이고
예제 4의 filter는 말 그대로 요솟값을 필터링했다면 map은 입력값에 원하는 만큼 수치를 계산해서 반영해준다.
많고 많은 내장함수의 세계,
다 외우는 건 불가능하니 자주 쓰이는 것 위주로 익숙해지자
모르면 구글한테 물어봥~
- E. O. D -