본문 바로가기
코딩 이야기/파이썬(Python)

단도직입 파이썬(Python) – 연습코딩(클래스, 모듈,~라이브러리)

by 아재코더 2021. 12. 16.
파이썬 - 연습문제 풀이

오늘은 그동안 살펴본 클래스, 모듈, 패키지, 라이브러리에 대한 연습문제를 풀어보고자 합니다. 금방 풀어버릴 수 있을 것 같았는데 바로 저의 오만방자함을 일깨우듯 에러투성이더군요. 구글링(파이썬 공식 홈페이지)+오픈북^^ 하며 풀어갔습니다. 시간이 다소 걸리더라도 한번 풀어보시길 권장합니다. 직접 책을 찾고 구글링하며 얻어지는 게 있더군요.

그동안 봐 왔던 내용들도 조금 정리되기도 하고. 분명 맞는데…맞는데…하며 코딩을 했음에도 역시나 제가 잘못 생각한 뭔가가 막 나오더군요. 그래서 오늘도 조금씩 배워갑니다. 파이썬!

(제 파이썬 학습교재로 사용중인 #점프투파이썬의 연습문제를 사용했습니다.)

Q1. 클래스 상속 문제입니다.

class Calculator:

def __init__(self):

self.value = 0

def add(self, val):

self.value += val

위 클래스 상속하는 UpgradeCalculator를 만들고 값을 뺄 수 있는 minus 메서드를 추가해 봅니다.

다음과 같이 동작하는 클래스를 만들어야 합니다.

cal = UpgradeCalculator()

cal.add(10)

cal.minus(7)

print (cal.value)

클래스 상속 연습문제

간단하게 풀렸습니다.

Q2. 객체 변수 value가 100 이상 값을 가질 수 없도록 제한하는 MaxLimitCalculator 클래스를 만들어 봅니다. 단, Q1의 Calculator를 상속해서 만들어야 합니다.

클래스 상속 연습문제

여기까지도 뭐! 그리 어렵지 않습니다.

Q3. 아래 2개의 결과를 예측해 봅니다.

>>> all([1,2, abs(-3)-3])

>>> chr(ord('a')) == 'a'

하나는 False, 또 하나는 True입니다. 저는 하나는 맞고, 하나는 틀렸습니다.

Q4. filter와 lambda를 사용하여 리스트[1, -2,3, -5,8, -3]에서 음수를 제거해 봅니다.

a = [1, -2,3, -5,8, -3]

print(list(filter(lambda a : a>0, a)))

깨끗하게 결괏값을 보여 줍니다.

[1, 3, 8]

Q5. 234라는 10진수의 16진수는 다음과 같습니다. 그 문자열을 다시 10진수로 바꿔봅니다.

>>>hex(234)

‘0xea’

 

print (hex(234))

print (int(hex(234),16))

실행 결과

0xea

234

Q6. map, lambda를 사용하여 [1,2,3,4] 리스트의 각 요소에 3이 곱해진 리스트[3,6,9,12]를 만들어 봅니다.

a = [1,2,3,4]

print(list(map(lambda x: x*3, a)))

실행 결과

[3, 6, 9, 12]

Q7. [-8,2,7,5, -3,5,0,1] 리스트 최댓값과 최솟값의 합을 구해봅니다.

a = [-8,2,7,5, -3,5,0,1]

print('MAX + min = ',max(a)+min(a))

실행 결과

MAX + min = -1

Q8. 17/3의 결과를 소수점 4자리까지만 반올림하여 표시해 봅니다.

>>> 17/3

5.666666666666667

>>> round(17/3,4)

5.6667

너무 간단합니다. 엑셀 함수 생각하며 혹시 했는데 바로 풀리더군요.

Q9. 다음과 같이 실행할 때 입력값 모두 더하여 출력하도록 코딩해 봅니다.(한참 보고, 또 보고 ㅠㅠ)

파일명까지 리스트에 들어있는지 모르고 생쑈를 하다 혹시나 싶어 sys.argv를 출력 후에 해결 가능했답니다. ㅎ 당황스럽더군요.

Q10. OS 모듈을 사용하여 디렉터리 이동, dir 실행 후 결과를 변수에 담고, 그 결과를 출력해 봅니다.

OS 모듈 관련 연습문제

바로 어제 살펴봤지만 오픈북!^^

Q11. glob 모듈로 *.py 파일만 출력해 봅니다.

>>> import glob

>>> glob.glob('*.py')

['test_Q1.py', 'test_Q10.py', 'test_Q11.py',(중간 생략) 'test_Q12.py', 'test_Q13.py'

Q12. time 모듈로 2018/04/03 17:20:23 형태로 출력해 봅니다.

>>> import time

>>> time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time()))

'2021/05/04 20:11:10'

대소문자에 따라 결과가 달라집니다. (%Y : 2021, %y : 21)

Q13. random 모듈로 로또번호 추출해 봅니다. 중복 숫자는 제외해야 합니다.

(어제 잠시 언급했는데 바로 연습문제로 나오는군요... 사람들 생각 다 비슷한가 봅니다.^^)

lambda로 더 간단하게 할 수 있을 것 같은 데…지금은 피곤해서 그런가 아무 생각이 떠오르지 않네요. 좋은 꿈 꾸게 되면 3,9,18,20,23,32로 인생역전 한번 도전해 봅니다. ㅋ

댓글