[제로베이스] 데이터 사이언스 15기 - (05-08 파이썬 중급 스터디노트)

윤태호·2023년 5월 8일
0
post-thumbnail

오늘 수강한 강의 - 파이썬 중급 (1 ~ 13)

01 함수 ~ 03 함수 내에서 또 다른 함수 호출

함수

  • 수학의 함수와 동일하다

  • 파이썬에서 기본으로 제공하는 내장 함수와 사용자가 직접 선언하는 사용자 함수가 있다

내장 함수

print('Hello python!')

사용자 함수

def printUserName(name):
    print(f'{name}고객님, 안녕하세요')
  • 함수는 특정 기능을 재사용하기 위하여 사용한다
def addCal():
    n1 = int(input('n1 입력 : '))
    n2 = int(input('n2 입력 : '))
    print(f'n1 + n2 = {n1 + n2}')    
addCal()
addCal()
addCal()
addCal()
addCal()

함수 선언

  • 함수는 def 키워드, 함수명, :, 들여쓰기를 이용하여 선언한다
def calFun():
    n1 = int(input('n1 입력 : '))
    n2 = int(input('n2 입력 : '))
    print(f'n1 * n2 = {n1 * n2}')
    print(f'n1 / n2 = {round(n1 / n2, 2)}')
calFun()

함수 호출

  • 함수 내에서 또 다른 함수를 호출할 수 있다
def fun1():
    print('fun1 호출!')
    fun2()
def fun2():
    print('fun2 호출!')
    fun3()
def fun3():
    print('fun3 호출!')
fun1()
fun2()
fun3()
  • pass 사용

pass를 사용하면 error생기지 않음

def printTodayWeather():
    pass
def printTomorrowWeather():
    pass
printTodayWeather()
printTomorrowWeather()
  • (실습) 구구단 연쇄적으로 출력

맨 밑줄의 guguDan2() 부터 실행되고 그 이후는 위에서부터 순차적으로 실행됨

def guguDan2():
    for i in range(1, 10):
        print('2 * {} = {}'.format(i, 2*i))
    guguDan3()
def guguDan3():
    for i in range(1, 10):
        print('3 * {} = {}'.format(i, 3*i))
    guguDan4()
def guguDan4():
    for i in range(1, 10):
        print('4 * {} = {}'.format(i, 4*i))
    guguDan5()
def guguDan5():
    for i in range(1, 10):
        print('5 * {} = {}'.format(i, 5*i))
guguDan2()

04 인수와 매개변수 ~ 08 lambda 함수

인수와 매개변수

  • 함수 호출 시 함수에 데이터를 전달할 수 있다
def greet(customer): -> 매개변수(함수 내부에서만 사용가능)
    print(f'{customer} 고객님 안녕하세요.')
greet('홍길동') -> 인수
  • 인수와 매개변수 개수는 일치해야 한다

개수가 일치하지 않으면 TypeError 생김

def addFun(n1, n2): -> 매개변수 2print(f'{n1} + {n2} = {n1+n2}')
addFun(10) -> 인수 1
  • 매개변수 개수가 정해지지 않은 경우 '*' 를 이용한다
def printNumber(*numbers): -> 매개변수 개수가 정해지지 않았을때
    for number in numbers:
        print(number, end='')
    print()
  • (실습) 점수의 총점, 평균 출력
def printScore(kor, eng, mat):
    total = kor + eng + mat
    average = total / 3
    print('총점: {}'. format(total))
    print('평균: {}'. format(average))
korScore = int(input('국어 점수 입력: '))
engScore = int(input('영어 점수 입력: '))
matScore = int(input('수학 점수 입력: '))
printScore(korScore, engScore, matScore)

데이터 반환

  • return 키워드를 이용하면 함수 실행 결과를 호출부로 반환할 수 있다
def calculator(n1, n2):
    result = n1 + n2
    return result
returnValue = calculator(20, 10)
print(f'returnValue: {returnValue}')
  • 함수가 return을 만나면 실행을 종료한다

return 아래부분은 실행되지 않음

  • (실습 1) cm를 입력하면 mm로 환산한 값을 반환하는 함수
def cmToMm(cm):
    result = cm * 10
    return result
length = float(input('길이(cm)입력: '))
returnValue = cmToMm(length)
print('returnValue: {}mm' .format(returnValue))
  • (실습 2) 1부터 100까지의 정수 중 홀수인 난수를 반환하는 함수
import random
def getOddRandomNumber():
    while True:
        rNum = random.randint(1, 100)
        if rNum % 2 != 0:
            break
    return rNum
print('returnValue: {}' .format(getOddRandomNumber()))

전역 변수

  • 함수 밖에서 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할 수는 없다

지역 변수

  • 함수 안에 선언된 변수로 안에서만 사용 가능하다

global 키워드

  • global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다
num_out = 10
def printNumbers():
    global num_out
    num_out = 20
    print(f'num_out: {num_out}')
printNumbers()
print(f'num_out: {num_out}')

global을 사용하여 값이 변경됨

num_out: 20
num_out: 20

중첩함수

  • 함수안에 또 다른 함수가 있는 형태이다

  • 내부 함수를 함수 밖에서 호출할 수 없다

  • (실습) 덧셈, 뺄셈, 곱셈, 나눗셈 함수 선언

def calculator(n1, n2, operator):
    def addCal():
        print('덧셈 연산: {}' .format(n1 + n2))
    def subCal():
        print('뺄셈 연산: {}'.format(n1 - n2))
    def mulCal():
        print('곱셈 연산: {}' .format(n1 * n2))
    def divCal():
        print('나눗셈 연산: {}' .format(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.덧셈, 2.뺄셈, 3.곱셉, 4.나눗셈, 5.종료'))
    if operatorNum == 5:
        print('Bye~')
        break
    calculator(num1, num2, operatorNum)

lambda 함수

  • lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다
def calculator(n1, n2):
    return n1 + n2

위의 두줄을 lamda 함수를 이용하여 간단히

calculator = lambda n1, n2: n1 + n2
  • (실습) 삼각형, 사각형, 원의 넓이를 반환하는 lambda 함수
getTriangleArea = lambda n1, n2: n1 * n2 / 2
getSquareArea = lambda n1, n2: n1 * n2
getCircleArea = lambda r: radius * radius * 3.14
width = int(input('가로 길이 입력: '))
height = int(input('세로 길이 입력: '))
radius = int(input('반지름 길이 입력: '))
triangleValue = getTriangleArea(width, height)
squareValue = getSquareArea(width, height)
circleValue = getCircleArea(radius)
print('삼각형 넓이: {}' .format(triangleValue))
print('사각형 넓이: {}' .format(squareValue))
print('원 넓이: {}' .format(circleValue))

09 모듈 ~ 11 모듈 사용

모듈

  • 이미 만들어진 훌륭한 기능으로 사용자는 쉽게 사용할 수 있다(계산 모듈, 난수 모듈, 날짜/시간 모듈)

  • 파이썬 모듈의 구분

    내부모듈 -> 파이썬 설치 시 기본적으로 사용할 수 있는 모듈

    외부 모듈 -> 별도 설치 후 사용할 수 있는 모듈

    사용자 모듈 -> 사용자가 직접 만든 모듈

  • (실습) random 모듈을 이용해 난수 발생

1부터 10까지의 정수 중 난수 1개 발생

import random
rNum = random.randint(1, 10)
print('rNum: {}' .format(rNum))

0부터 100사이의 난수 10개를 발생

import random
rNums = random.sample(range(101), 10)
print('rNums: {}' .format(rNums))

모듈 만들기

  • 모듈은 특정 기능을 가지고 있는 파이썬 파일을 말한다

모듈 사용

  • import 키워드를 이용해서 모듈을 임포트 한다
import calculator
  • as 키워드를 이용해서 모듈 이름을 단축 시킬 수 있다
import calculator as cal
cal.add(10, 20)
cal.sub(10, 20)
cal.mul(10, 20)
cal.div(10, 20)
  • from ~ as 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있다
from calculator import add
from calculator import sub
add(10, 20)
sub(10, 20)

','를 이용하여 더 줄일 수 있음

from calculator import add, sub
  • (실습) 국어, 영어, 수학의 총점, 평균을 출력하는 모듈

실행 파일 12 ~ 13

__name__ 전역변수

  • __name__ 에는 모듈 이름이 저장되거나 '__main__' 이 저장된다

실행 파일(시작 파일)일 경우에만 '__main__' 이 저장된다

  • (실습) 단위 환산 모듈을 만들고 cm를 mm, inch, m, ft로 변환

총평

재미있었던 부분

중급으로 넘어와 드디어 함수를 배웠는데 새롭지만 익숙한 부분이 많아서 강의와 함께 실습문제를 풀어볼때 재미있었다

어려웠던 부분

뒤로 갈수록 기억안나는 부분이 조금씩 생겨서 헷갈리는 느낌이 들었고 함수에 조건문과 반복문을 응용해 사용하는것이 가장 어려웠다

느낀점 및 내일 학습 계획

가장 좋은 방법은 반복해서 문제를 풀어보는 것이란걸 느꼈다 해도해도 손에 붙지 않을때가 많으니 직접 코드를 작성해보면서 느낌을 손에 익히도록 노력해야겠다
내일은 따로 강의 스케줄이 없으니 지금까지 한 부분의 실습 문제들을 중심으로 풀어볼 생각이다

profile
데이터 부트캠프 참여중

0개의 댓글