제로베이스_데이터스쿨_1주차_학습_정리

김지태·2023년 4월 10일
0
post-thumbnail

이번 제로베이스 데이터스쿨 1주차에 파이썬 중급 개념과 중급 문제 풀이 일부를 학습하였다.
1주일 학습 내용을 정리할겸 날짜별로 모르는 내용들을 정리하고자 한다.

함수 내에서 또 다른 함수 호출

def fun1():
print('fun1 호출')
fun2()
print('fun2 호출 후에 실행')

def fun2():
print('fun2 호출')
fun3()
def fun3():
print('fun3 호출')

fun1()

개념은 이해가 가지만 아직 이에 관련된 문제풀이를 하지 않아 활용하는데에는 어려울 것 같다..

매개 변수 개수가 안정해지면 *를 사용한다.

def printNumber(*numbers):
for number in numbers:
print(number, end=', ')
print()

printNumber()
printNumber(13)
printNumber(2, 33, 44)
printNumber(3, 44)

매개 변수의 개수가 정해지지 않는 경우? 이 또한 익숙치 않다. 출력 결과를 보며 잠시 다시 복습하자.

13,
2, 33, 44,
3, 44,

랜덤 모듈

import random

def getOddRandomNumber():
while True:
rNum = random.randint(1, 100)
if rNum % 2 != 0:
break

return rNum

print(f'returnValue: {getOddRandomNumber()}')

returnValue: 83

이제 랜덤 모듈 쓰는 방법은 간단하게라도 외워야겠지?
n = random.randint(1, 200)..

while True: 의 원활한 사용

def calculator(n1, n2, operator):
def addCal():
print(f'덧셈 연산: {n1 + n2}')

def subCal():
print(f'뺄셈 연산: {n1 - n2}')
def mulCal():
print(f'곱셈 연산: {n1 * n2}')
def divCal():
print(f'나눗셈 연산: {n1 / n2}')

if operator == 1:
addCal()
elif operator == 2:
subCal()
elif operator == 3:
mulCal()
elif operator == 4:
divCal()

while True:
num1 = float(input('실수 n1 입력: '))
num2 = float(input('실수 n2 입력: '))
operatorNum = int(input('계산법 선택 (1~4 중 택 1 / 5 = 종료): '))
if operatorNum == 5:
print('bye')
break

calculator(num1, num2, operatorNum)

while True: 는 정말 많이 나왔는데 왜 아직도 나에게 익숙치 않는걸까...? if 와 else 랑도 비슷한 느낌이 나서 우선 if 구문을 먼저 떠올리곤 하는 것 같다..

람다 함수 사용

getTriangleArea = lambda n1, n2: n1n2/2
getSquareArea = lambda n1, n2: n1
n2
getCircleArea = lambda r: rr3.14

width = int(input('width length: '))
height = int(input('height length: '))
radius = int(input('radius length: '))

triangleresult = getTriangleArea(width, height)
squareresult = getSquareArea(width, height)
circleresult = getCircleArea(radius)

print('가로 = {}, 세로 = {}, 반지름 = {}'.format(width, height, radius))
print(triangleresult)
print(squareresult)
print(circleresult)

우선 간단하게 쓰는 법이라도 확실히 다시 익혀두자. 함수 기능이 복잡하지 않은 함수를 만들 때 굉장히 편하게 사용할 수 있을 것 같다.

append

05 011 국어수학영어 평균 점수 모듈

scores = []

def addScores(s):
scores.append(s)

def getScores():
return scores

def getTotalScore():
total = 0
for s in scores:
total += s

return total

def getAvgScore():
avg = getTotalScore() / len(scores)

return avg

자료형 [], {}, () 등이 할당된 변수에 ex) 'sample', sample.append(n) (n 은 인자) 이렇게 사용한다.

05 016 자주 쓰는 모듈들

listVar = [2, 3, 4, 5,6 , 11, 33, 4]
print(f'sum(listVar) = {sum(listVar)}')

최대값

print(f'max(listVar) = {max(listVar)}')

최소값

print(f'min(listVar) = {min(listVar)}')

거듭제곱

print(f'거듭제곱(밑, 지수) {pow(13, 11)}')

반올림

print(f'round(소수, 몇째 자리){round(3.142434243, 3)}')

import math

절댓값

print(math.fabs(-10))
print(math.fabs(-1.534235235))

올림

print(f'올림 {math.ceil(6.66)}')
print(f'올림 {math.ceil(-6.66)}')

내림

print(f'내림 {math.floor(5.59)}')
print(f'내림 {math.floor(-5.59)}')

버림

print(f'버림 {math.trunc(5.21)}')
print(f'버림 {math.trunc(-5.21)}')

최대공약수

print(f'최대공약수 {math.gcd(144, 36)}')

팩토리얼

print(f'팩토리얼 {math.factorial(10)}')

제곱근

print(f'제곱근 {math.sqrt(121)}')

import time

now = time.localtime()

print(f'{now}')

#연도만
print(f'{now.tm_year}')
#월
print(f'{now.tm_mon}')
#일
print(f'{now.tm_mday}')
#시간
print(f'{now.tm_hour}')
#분
print(f'{now.tm_min}')
#초
print(f'{now.tm_sec}')

출력
sum(listVar) = 68
max(listVar) = 33
min(listVar) = 2
거듭제곱(밑, 지수) 1792160394037
round(소수, 몇째 자리)3.142
10.0
1.534235235
올림 7
올림 -6
내림 5
내림 -6
버림 5
버림 -5
최대공약수 36
팩토리얼 3628800
제곱근 11.0
time.struct_time(tm_year=2023, tm_mon=4, tm_mday=4, tm_hour=13, tm_min=36, tm_sec=34, tm_wday=1, tm_yday=94, tm_isdst=0)
2023
4
4
13
36
34

모듈 사용

class Calculator:
def init(self):
self.number1 = 0
self.number2 = 0
self.result = 0

def add(self):
self.result = self.number1 + self.number2
return self.result

def sub(self):
self.result = self.number1 - self.number2
return self.result

def mul(self):
self.result = self.number1 * self.number2
return self.result

def div(self):
self.result = self.number1 / self.number2
return self.result

calculator = Calculator()
calculator.number1 = 10
calculator.number2 = 20

print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')

calculator.number1 = 88
calculator.number2 = 45

print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')

출력
calculator.add(): 30
calculator.sub(): -10
calculator.mul(): 200
calculator.div(): 0.5
calculator.add(): 133
calculator.sub(): 43
calculator.mul(): 3960
calculator.div(): 1.9555555555555555

깊은 복사, 얕은 복사

얕은 복사, 깊은 복사

class TemCls:
def init(self, n, s):
self.number = n
self.str = s

def printClsInfo(self):
print(f'self.number: {self.number}')
print(f'self.str: {self.str}')

tc1 = TemCls(10, 'Hello')
tc2 = tc1

tc1.printClsInfo()
tc2.printClsInfo()

tc2.number = 3.14
tc2.str = 'bye'

tc1.printClsInfo()
tc2.printClsInfo()

깊은 복사

import copy

tc1 = TemCls(10, 'Hello')
tc = copy.copy(tc1)

tc1.printClsInfo()
tc2.printClsInfo()

tc2.number = 3.14
tc2.str = 'no'

tc1.printClsInfo()
tc2.printClsInfo()

self.number: 10
self.str: Hello
self.number: 10
self.str: Hello
self.number: 3.14
self.str: bye
self.number: 3.14
self.str: bye
self.number: 10
self.str: Hello
self.number: 3.14
self.str: bye
self.number: 10
self.str: Hello
self.number: 3.14
self.str: no

이 부분은 아무리 봐도 잘 모르겠다.

sort 와 pop

sort는 특정 순서대로 나열, pop 은 제외

상속

BasicCalculator와 DeveloperCalculator 클래스를 다음과 같이 만들고 이들 클래스를 상속해서 Calculator 클래스를 만들고 사용하기

class BasicCalculator:

def add(self, n1, n2):
return n1 + n2

def sub(self, n1, n2):
return n1 - n2

def mul(self, n1, n2):
return n1 * n2

def div(self, n1, n2):
return n1 / n2

class DeveloperCalculator:
def mod(self, n1, n2):
return n1 % n2

def flo(self, n1, n2):
return n1 // n2

def exp(self, n1, n2):
return n1 ** n2

class NewCalculator(BasicCalculator, DeveloperCalculator):
def init(self):
pass

cal = NewCalculator()

print(cal.add(10, 55))
print(cal.sub(10, 55))
print(cal.mul(10, 55))
print(cal.div(10, 55))

print(cal.mod(10, 55))
print(cal.flo(10, 55))
print(cal.exp(10, 55))

상속은 문풀에서 확실히 다져놔야겠다는 생각.. 계속 눈으로 이해를 하지 말고 실행을 해보자

profile
데이터 분석가

0개의 댓글