본문 바로가기
Programming/Python

[Python] 점프 투 파이썬 연습문제 풀이 5장

by EunjiBest 2022. 3. 12.

 

[Python] 점프 투 파이썬 연습문제 풀이 5장

 

 

 

 

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.munus(7)

print(cal.value) #10에서 7을 뺀  3을 출력

 

답:

 

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

 

위 클래스를 상속하는 UpgradeCalculator를 만들고

값을 뺄수있는 -= 을 넣어서 minus메서드에 넣었다.

 

 

 

 

 

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 MaxLimitCalculator(Calculator):
  def add(self.val):
    self.value += val
    if self.value > 100:
      self.value = 100

 

1번 문제와 비슷한 문제이다.

Calculator 클래스를 상속하고 add 메서드를 오버라이딩해서

100보다 큰 값이 나올 때 100을 반환하는 클래스를 만들었다.

 

 

 

 

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

 

 

#1번

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

#2번

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

 

1번 답 :  False

abs는 절댓값을 반환하는 함수이다. 따라서 abs(-3)은 3이 된다.

따라서

all([1,2,3-3]) = all([1,2,0)]

all은 리스트 요소 중 0이 있으면 False를 반환한다.

 

2번 답 : True

ord는 문자의 아스키 코드값을 돌려주는 함수이다.

ord('a') == 97

따라서

chr(97) == 'a' 가 된다.

chr는 아스키 코드값을 문자로 출력하는 ord와 반대 함수이다.

따라서 

chr(97) == 'a'

답은 True이다.

 

 

 

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

 

답:

 

>>> list(filter(lambda x:x>0, [1,-2,3,-5,8,-3]))
[1, 3, 8]

 

x가 0보다 큰 것을 filter시키는 리스트를 만들었다.

for문과 if문을 돌리는 것보다 간편하게 사용할 수 있다.

 

 

 

Q5. 234라는 10진수의 16진수는 다음과 같이 구할 수 있다.
이번에는 반대로 16진수의 문자열  0xea를 10진수로 변경해보자.

 

>>> hex(234)
'0xea'

 

답 : 

 

>>> int('0xea', 16)
234

 

int(x)는 문자형이나 실수형을 정수형으로 반환하는 역할도 하지만

int(x, radix)로 사용하면

x로 표현된 문자열 x를 radix진수로 변환시켜준다.

따라서

위 코드는 '0xea' 문자열을 16진수로 변환하라는 의미이다.

리턴값은 234가 나오는 것을 확인할 수 있다.

 

 

 

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

 

답:

 

>>> list(map(lambda x:x*3, [1,2,3,4]))
[3,6,9,12]

 

 

 

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

 

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

 

답 : 

 

>>> a = [-8,2,7,5,-3,5,0,1]
>>> max(a)+min(a)

-1

 

리스트를 a에 할당시키고

max, min 함수를 이용해서 합한다.

 

 

 

Q8. 17/3의 결과는 다음과 같다. 소숫점 4자리까지만 반올림해서 표시해보자.

 

답: 

 

>>> round(17/3,4)

5.6667

 

round함수는 소수점을 원하는 자리까지 반올림 할 수 있다.

 

 

 

 

 

 

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)

 

다음처럼 sys모듈의 argv를 사용하여 명령 행 입력값을 모두 차례로 더해준다.

sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있도록 해준다.

sys.argv는 명령 행에서 인수를 전달 할 수 있도록한다.

 

 

 

 

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

 

1. C:\doit 디렉터리로 이동한다.
2. dir 명령을 실행하고 그 결과를 변수에 담는다.
3. dir 명령의 결과를 출력한다.

 

1. os 모듈의 chdir을 사용해서 C:\doit 이라는 디렉터리로 이동한다.

 

>>> import os
>>> os.chdir("c:/doit")

 

2. os모듈의 popen을 사용해서 시스템 명려어인 dir을 수행한다.

 

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

 

3. popen의 결과를 출력하기 위해 read()를 한다.

 

>>> print(result.read())

 

 

 

 

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

 

답 : 

 

import glob
glob.glob("c:/doir/*.py")

 

 

 

 

 

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

 

2018/04/03 17:20:32

 

답:

 

>>> import time
>>> time.strfime("%Y/%m/%d %H:%M:%S")

'2018/04/05 10:56:27'

 

%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)

 

random함수를 불러오고

result라는 빈 리스트를 만든다.

 

while문을 만들어

num이 1부터 45까지의 숫자를 랜덤하게 돌린 숫자를

if문에 넣어서 num이 result 리스트에 들어가있는 요소(숫자)가 아니라면

result 리스트에 추가하는 작업을

result의 길이가 6이 될 때까지 반복한다.

 

result 출력

 

 

 

 

 

 

 

 

 

 

반응형

댓글