본문 바로가기
Python/점프 투 파이썬

5장 연습문제

by k-mozzi 2021. 9. 9.
반응형
Preface

 

오늘은 클래스, 모듈, 내장 함수, 라이브러리 등과 관련된 연습문제를 풀어봤다.

 

대부분의 문제는 큰 어려움 없이 해결할 수 있었지만, 마지막 문제는 아무리 생각해봐도 해결 방법이 떠오르지 않아 일단은 해설에 있는 방식대로 코드를 작성했다.

 

글을 업로드한 후 조금 더 고민을 하여 내가 원하던 방식대로 코드를 다시 작성해 볼 것이다.


 

1. 다음은 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) # 10에서 7을 뺀 3을 출력

 

→ 답안

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)

→ 해설 : 답안과 동일

 


 

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

 

cal = MaxLimitCalculator()
cal.add(50) # 50 더하기
cal.add(60) # 60 더하기

print(cal.value) # 100 출력

단 반드시 다음과 같은 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)

→ 해설 : 답안과 동일

 


 

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

 

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

→ False

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

→ True

 


 

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

 

→ 답안

def positive(l):
    return l > 0


print(list(filter(positive, [1, -2, 3, -5, 8, -3])))

→ 해설 : 해설에선 lambda를 사용해서 코드를 작성했지만, 나는 기본적으로 코드를 짜는 것이 조금 더 직관적이라는 생각이 들어 lambda를 사용하지 않고 코드를 작성해 봤다.

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

 


 

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

 

>>> hex(234)
'0xea'

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

 

→ 답안

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

→ 해설 : 답안과 동일

 


 

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

 

→ 답안

def threetimes(a):
    return a * 3


print(list(map(threetimes, [1, 2, 3, 4])))

→ 해설 : 답안과 동일한 내용이지만, lambda를 사용하여 코드 작성

 


 

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

 

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

 

→ 답안

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

print(b + c)

→ 해설 : 답안과 동일

 


 

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

 

>>> 17 / 3
5.666666666666667

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

 

→ 답안

print(round( 5.666666666666667, 4))

→ 해설 : 답안과 동일

 


 

 

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

 

→ 답안 : 나는 not in이 아닌 pop 함수를 사용하여 코드를 작성하고자 pop 뒤에 제공해야 할 리스트 부분에 range와 list 함수를 사용하여 코드를 작성해봤지만, 이를 random 모듈과 결합하는 데 실패하여 결과적으로 내가 생각하던 코드를 구현하지 못했다. 

import random

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

print(result)

 

 

 

 

 

출처 : https://wikidocs.net/42529

 

05장 연습문제

*(연습문제 풀이 : [https://wikidocs.net/12769#05](https://wikidocs.net/12769#05))* ## Q1 다음은 Calcula ...

wikidocs.net

 

728x90
반응형

'Python > 점프 투 파이썬' 카테고리의 다른 글

정규 표현식 (1)  (0) 2021.09.13
간단한 코드 작성  (0) 2021.09.12
라이브러리  (0) 2021.09.05
내장 함수  (0) 2021.09.03
예외 처리  (0) 2021.09.02

댓글