[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 출력
'Programming > Python' 카테고리의 다른 글
[Python] 파이썬 문제 : 게시판 페이징하기 (10) | 2022.03.16 |
---|---|
[Python] 파이썬 문제 : 3과 5의 배수 합하기 (6) | 2022.03.14 |
[Python] 파이썬 내장함수 모음 2탄 hex / id / input / int / isinstance / len / list / map / max / min / oct / open (14) | 2022.03.09 |
[Python] 파이썬 내장함수 모음 1탄 abs / all / any / chr / dir / divmod / enumerate / eval (12) | 2022.03.08 |
[Python] 패키지(Packages) 만들기 / __init__.py / __all__ / 파이썬 relative 패키지 (13) | 2022.03.07 |
댓글