Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/Jump to Python

Jump To Python Class/Module/Package 5장 연습문제 [6]

eatplaylove 2022. 12. 16. 12:31

기초는 이제 적잖이 닦은 거 같다. 연습문제를 더더욱 많이 풀어보자~

 

# 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진수로 변경해 보자.

 

해설:

print(int('0xea',16))

=>234

 

int 내장함수를 통해서 int('특장 문자 or 숫자로 구성된 것', N진수) 이렇게 10진수로 변경이 가능.

 

번외로, 십진수를 이진수로도 바꿔봤다.

 

# print(bin(1238921))
 

 

# 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 -