옥수수와 식빵 그리고 코딩

5장 -5 내장함수 ~ 연습문제 본문

Python/점프 투 파이썬

5장 -5 내장함수 ~ 연습문제

옥식 2021. 10. 19. 22:00

안덱스 값: 순서가 있는 자료형(리스트, 튜플, 문자열의 순서 번호

ex

https://wikidocs.net/13#_10

내장 함수에 유용한 것 많음

명령 행에서 인수 전달하기 - aya.argv : 다시 보기. 어려움..

https://wikidocs.net/33

스레드 어렵다

 

클래스에서 __init__이란 https://engineer-mole.tistory.com/190

https://engineer-mole.tistory.com/190

인스턴스란 클래스를 실체화한 것


연습문제 https://wikidocs.net/42529

 

1번.

클래스 상속:

class 클래스 이름(상속할 클래스 이름)

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)

value의 값은 0에서 10이 더해지고(메서드2), 7잉 빠져(메서드3) 3이 출력된다.

 

2번

실패함. 110이 나온다.

class Calculator:
    def __init__(self):
        self.value = 0
    
    def add(self, val):
        self.value += val

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

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

print(cal.value)

두 번째 클래스를 거치지 않고 나온 것 같다

class Calculator:
    def __init__(self):
        self.value = 0
    
    def add(self, val):
        self.value += val

class MaxLimitCalculator(Calculator):
    if self.value >= 100:
        return 100

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

print(cal.value)

두번째 클래스 안의 메서드를 지웠다. 

SyntaxError: 'return' outside function

함수가 없어서 오류가 떴다.

 

그렇다고 두번째 클래스 안에 add메서드를 그대로 적으면 상속하는 의미가 없을 것 같음..

ㄴ>이게 메서드 오버라이딩임

해답을 본다.

메서드 오버라이딩을 해서 해결한다.

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:
            return 100
        else:
            return self.value += val #오류발생

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

print(cal.value)

14번째 줄에서 오류가 나온다

return에는 식을 적으면 안되나??

return은 함수에 대응하여 함수값을 내놓는 것. if문을 거치지 않고 나온다(? 약간 추측임..)

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번

하나.

1. all(x)는 반복 가능한 자료형 x를 입력 인수로 받으며 이 x의 요소가 모두 참이면 True, 거짓이 하나라도 있으면 False

2. abs(x)는 숫자 x를 입력받았을 대, 그 숫자의 절댓값을 돌려줌

- 풀이

abs(-3) = 3이 된다

리스트 안의 값은 [1, 2, 3-3]이 된다. 3-3 = 0 은 거짓이므로 거짓이 하나 있기 때문에 False를 돌려준다.

 

둘. 

1. chr(i)는 유니코드 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이다.

2. ord(c)는 문자의 유니코드 값을 돌려주는 함수로 chr함수와 반대이다

->

ord('a') = 97, chr(97) = 'a'

True가 나온다.

참고 : https://wikidocs.net/32#filter

 

4번

filter 함수는 첫 번째 인수로 함수 이름을, 두 번째 인수로 그 함수에 차례로 들어갈 반복 가능한 자료형을 받는다. 그리고 두 번째 인수인 반복 가능한 자료형 요소가 첫 번째 인수인 함수에 입력되었을 때 반환 값이 참인 것만 묶어서(걸러 내서) 돌려준다.
https://wikidocs.net/32#filter
#lambda 사용
print(list(filter(lambda x: x > 0, [1,-2,3,-5,8,-3])))

 

#lambda 미사용
def plus(x):
    return x > 0

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

5번

int(x, radix)는 radix 진수로 표현된 문자열 x를 10진수로 변환하여 돌려준다.
https://wikidocs.net/32#int

ex) itn('11', 2)
2진수로 표현된 11의 10진수 값 3

int('0xea', 16)

 

6번

map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다.
https://wikidocs.net/32#map
# map 미사용, lambda 미사용
a = [1, 2, 3, 4]
def three_times(numbers):
    result = []
    for number in numbers:
        result.append(number * 3)
    return result
result = three_times(a)
print(result)
#<map object at 0x000002AB5AA23C70> 오류 발생
a = [1, 2, 3, 4]
def three_times(numbers):
   return numbers * 3

print(map(three_times, a))
list(map(함수, 리스트))
tuple(map(함수, 튜플))
형태로 사용

이 상태로는 안에 들어있는 값을 볼 수 없으므로 list를 사용해서 리스트로 출력

a = [1, 2, 3, 4]
def three_times(numbers):
   return numbers * 3

print(list(map(three_times, a)))

7번

#최댓값
a = [-8, 2, 7, 5, -3, 5, 0, 1]
print(max(a))
#최솟값
a = [-8, 2, 7, 5, -3, 5, 0, 1]
print(min(a))

 

8번

round(number[, ndigits]) 함수는 숫자를 입력받아 반올림해 주는 함수이다.
round 함수의 두 번째 매개변수는 반올림하여 표시하고 싶은 소수점의 자릿수(ndigits)이다.
※ [, ndigits]는 ndigits가 있을 수도 있고 없을 수도 있다는 의미이다.
https://wikidocs.net/32#round
a = 17 / 3
print(round(a, 4))

9번

# myargv.py
import sys
sum(argv)
print(sys.argv)

sys는 개념 읽을 때도 잘 이해 못했던 거라 내 생각 한번 적어보고 바로 해답 봄

import sys
xs = sys.argv[1:] # [0]은 파일 이름 명, 파일 이름 명 제외한 명령행의 모든 입력
result = 0
for x in xs:
    result += int(x) # 모든 결괏값은 '문자열', 정수로 바꿔준다
print(result)

10번

# idle에서 실행
import os
os.chdir("C:\doit")
f = os.popen("dir")
print(f.read())

11번

# idle에서 실행
import glob
glob.glob("c:/doit/*.py")

*.py : .py로 끝나는 모든 파일

12번

# idle에서 실행
import time
time.strftime('%c', time.localtime(time.time()))

 

시간에 관계된 것을 표현하는 포맷 코드
포맷코드 설명
%a 요일 줄임말 Mon
%A 요일 Monday
%b 달 줄임말 Jan
%B January
%c 날짜와 시간을 출력함 06/01/01 17:22:21
%d 날(day) [01,31]
%H 시간(hour)-24시간 출력 형태 [00,23]
%I 시간(hour)-12시간 출력 형태 [01,12]
%j 1년 중 누적 날짜 [001,366]
%m [01,12]
%M [01,59]
%p AM or PM AM
%S [00,59]
%U 1년 중 누적 주-일요일을 시작으로 [00,53]
%w 숫자로 된 요일 [0(일요일),6]
%W 1년 중 누적 주-월요일을 시작으로 [00,53]
%x 현재 설정된 로케일에 기반한 날짜 출력 06/01/01
%X 현재 설정된 로케일에 기반한 시간 출력 17:22:21
%Y 년도 출력 2001
%Z 시간대 출력 대한민국 표준시
%% 문자 %
%y 세기부분을 제외한 년도 출력 01

https://wikidocs.net/33#time

 

13번

import random
lotto = []
while len(lotto) < 7:
   num = random.randint(1, 45)
   if num not in lotto: #중복된 숫자 배제
        lotto.append(num)
print(lotto)

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

6장. 파이썬 프로그래밍, 어떻게 시작해야 할까?  (0) 2021.10.20
vscode 단축키  (0) 2021.10.18
5장 클래스 + baekjoon  (0) 2021.10.16
4장  (0) 2021.10.16
Comments