Minwoo Dev.

<점프 투 파이썬> :: 05. 파이썬 날개 달기 문제풀이 본문

Python

<점프 투 파이썬> :: 05. 파이썬 날개 달기 문제풀이

itisminu 2023. 10. 11. 21:45
728x90
반응형
SMALL

Q1. 다음은 Calculator 클래스이다.

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)

 

 

 

정답)

class Calculator:
    def __init__(self):
        self.value = 0

    def add(self, val):
        self.value += val

class UpgradeCalculator(Calculator):
    def minus(self, val):
        self.value -= val


cal = UpgradeCalculator()
cal.add(10)
cal.minus(7)

print(cal.value)

실행 결과

 

 


Q2. 객체변수 value가 100 이상의 값은 가질 수 없도록 제한하는 MaxLimitCalculator 클래스를 만들어 보자. 즉 다음과 같이 동작해야 한다.

cal = MaxLimitCalculator()
cal.add(50)
cal.add(60)

print(cal.value)

단 반드시 다음과 같은 Calculator 클래스를 상속해서 만들어야 한다.

class Calculator:
    def __init__(self):
        self.value = 0


    def add(self, val):
        self.value += val

 

 

정답)

class Calculator:
    def __init__(self):
        self.value = 0

    def add(self, val):
        self.value += val

class MaxLimitCalculator(Calculator):
    def add(self, val):
        self.value += val
        if self.value>=100:
            self.value = 100



cal = MaxLimitCalculator()
cal.add(50)
cal.add(60)

print(cal.value)

 


Q3. 다음 결과를 예측해보자.

 

1.

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

결과) abs(-3)-3 은 0 이므로 False, 튜플 속에 False가 있으므로 결과는 False.

 

 

 

2. 

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

결과) True. 문자열 a를 정수로 변환하는 ord('a')의 결과 97, 그 97을 다시 아스키코드 상에서 문자열로 바꾸면 a.

 

 


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

 

정답)

a = list(filter(lambda n : True if n>0 else False,[1,-2,3,-5,8,-3]))
print(a)

 

 


Q5. 234라는 10진수의 16진수는 다음과 같이 구할 수 있다.

>>> hex(234)
'0xea'

 

이번에는 반대로 16진수 문자열 0xea를 10진수로 변경해 보자.

 

정답)

int('0xea',16)

 

 


Q6. map과 lambda를 사용하여 [1,2,3,4] 리스트의 각 요솟값에 3이 곱해진 리스트 [3,6,9,12] 를 만들어보자.

 

정답)

a = [1,2,3,4]
ax3 = list(map(lambda x:x*3,a))
print(ax3)

 

 


Q7. 다음 리스트의 최댓값과 최솟값의 합을 구해보자.

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

 

정답)

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

result = max(a) + min(a)
print(result)

 

 


Q8. 17/3의 결과는 다음과 같다.

>>> 17/3
5.666666666666667

위와 같은 결과값 5.666666666666667 을 소수점 4자리까지만 반올림하여 표시해 보자.

 

정답)

print("%.4f"%(17/3))

 

 


Q9. 다음과 같이 실행할 때 입력값을 모두 더하여 출력하는 스크립트(C:\doit\myargv.py)를 작성해 보자.

C:\> cd doit
C:\doit> python myargv.py 1 2 3 4 5 6 7 8 9 10
55

 

정답)

import sys

numbers = sys.argv[1:]

result = 0
for number in numbers:
    result += int(number)
print(result)

 

 

 


Q10. os 모듈을 사용하여 다음과 같이 동작하도록 코드를 작성해 보자.

 

1. C:\coding\python 디렉터리로 이동한다.

2. dir 명령을 실행하고 그 결과를 변수에 담는다.

3. dir 명령의 결과를 출력한다.

 

 

정답)

>>> import os
>>> os.chdir("c:\coding\python")

c:\coding\python 이라는 디렉터리로 이동

 

>>> result = os.popen("dir")

os 모듈의 popen을 사용하여 시스템 명령어인 dir을 수행

 

>>> print(result.read())

popen의 결과를 출력하기 위해 다음과 같이 수행한다.

 

 


Q11. glob 모듈을 사용하여 C:\doit 디렉터리의 파일 중 확장자가 .py인 파일만 출력하는 프로그램을 작성해보자.

 

정답)

>>> import glob
>>> glob.glob("c:\doit\*.py")
['c:\doit\doit01.py' 'c:\doit\test.py']

 

 


Q12. time 모듈을 사용하여 현재 날짜와 시간을 다음과 같은 형식으로 출력해 보자.

2018/04/03 17:20:32

 

 

정답)

>>> import time
>>> time.strftime("%Y/%,/%d %H:%M:%S")  # %Y:년, %m:월, %d:일, %H:시, %M:분, %S:초

 

 

 


Q13. random 모듈을 사용하여 로또 번호(1~45 사이의 숫자 6개)를 생성해 보자. (단, 중복된 숫자가 있으면 안됨.)

 

 

정답)

import random

result = []
while len(result) < 6:
    num = random.randint(1,45)
    if num not in result:
        result.append(num)

print(result)

 

728x90
반응형
LIST