AI학습 8

이유진·2024년 6월 27일

-- 12.사용자정의 함수.ipynb --

1. 함수

  • 변수 x, y에 대해 x값이 정해지면 그에 따라 y값을 결정하는 것
  • 반복적으로 사용되는 가치있는 부분을 묶어서 하나의 집합으로 만듦
  • 코드를 재활용하기 위한 목적

1-1.이름만 있는 함수

def 함수명() :
    함수가 호출되면 실행할 문장
    ...
함수명() #호출

def func1() :
print('1.처음 만드는 함수')
print('2.처음 만드는 함수')

func1()

for i in range(5):
func1()

1-2.매개변수(parameter)가 있는 함수

def 함수명(변수1, 변수2, ...) :
    함수가 호출되면 실행할 문장
    ...
함수명(값1, 값2, ...) #호출

func2(10) 이 형태로 호출이 되었다면

num = 10 이 실행된 이후

함수 내에 선언되어 있는 코드가 실행이 된다.

def func2(num) :
print(f'매개변수로 넘어 온 값은 : {num}')

func2(10)
func2(20)
func2(30)
func2(40)

변수의 범위, 스코프

print(num) # 매개변수는 지역변수라서 해당 영역 내에서만 사용 가능.

func2() # 내가 만든 func2()함수는 매개변수를 1개를 설정하였기 때문에 매개변수가 없으면 오류

오류가 발생하지 않는 경우도 있다. 그건 밑에 디폴트 매개변수 참고!

두 정수를 매개변수로 받아서

start 부터 end 까지 정수의 합을 구하는 함수

def addAll(start, end) :
sum = 0
for i in range(start, end+1) :
sum += i
print(f'{start}부터 {end}까지의 합은 {sum}입니다.')

addAll(1,100)

매개변수는 기본적으로 작성해준 순서대로 들어가게 된다.

단, 순서대로 넣고싶지 않다면 매개변수 명을 명시해준다.

addAll(end = 100, start = 1)

1-3.리턴값이 있는 함수

def 함수명(변수1, 변수2, ...) :
    함수가 호출되면 실행할 문장
    ...
    return 값
변수 = 함수명(값1, 값2, ...) #호출
변수 = 함수명() #에러

리턴이 있는 함수는!

함수가 호출된 부분 전체를 리번 값으로 볼 줄 알아야한다.

def printMind():
return '설날이 빨리 됐음 좋겠다'

Temp = printMind()
print(Temp)

start에서 end까지 정수의 합을 리턴

def addAll_re(start, end) :
sum = 0
for i in range(start, end+1) :
sum += i
return sum

start, end = map(int,input('시작과 끝을 스페이스바로 구분>> ').split(' '))

result = addAll_re(start, end)
print(f'{start}부터 {end}까지의 총 합은 {result}입니다.')

1-4. 디폴트 매개변수

def 함수명(변수1=디폴트값, 변수2=디폴트값, ...):
    함수가 호출되면 실행할 문장
    ...
    return 값
변수 = 함수명(값1, 값2, ...) # 호출
변수 = 함수명() # 호출 (에러가 나지 않는다.)

디폴트 매개변수를 사용하지 않은 함수

def multiple(num1,num2):
return num1 * num2

print(multiple(4,9))

매개변수가 무조건 초기화가 되어야 실행이 가능하다.

def multiple_de(num1=4, num2=3):
return num1 * num2

에러가 나지 않고 디폴트로 초기화 해준 값이 들어간다.

print(multiple_de())

여러가지 테스트

def multiple_de1(num1, num2=3):
return num1 * num2

print(multiple_de1(8)) # 스크립트나 프로그램에서 중간 결과를 확인하거나 사용자에게 정보를 보여주기 위해 print함수를 사용하는게 일반적이다.

여러가지 테스트

def multiple_de2(num1=3, num2): # 디폴트 값을 정해놓은 위치 이후에 다른 변수들은 전부 디폴트 값이 존재해야한다.

return num1 * num2

1-5.매개변수의 개수가 가변적인 함수

def 함수명(*변수):
    함수가 호출되면 실행할 문장
    ...
    return 값
변수 = 함수명(값1, 값2, ...) # 호출
변수 = 함수명() # 호출

def add(*args): # 가변적인 함수 : 값을 많이 넣어도 해결 OKAY
print(args)
sum = 0
for i in args:
sum += i
return sum

print(add(10,20,30))

리스트 타입의 값을 넘겨서 실행!

def add(nums):
sum = 0
for i in nums:
sum += i
return sum,nums

add([10,20,30,40])

1-6.매개변수를 딕셔너리 구조로 전달받는 함수

def 함수명(**변수):
    함수가 호출되면 실행할 문장
    ...
    return 값
변수 = 함수명(키1=값1, 키2=값2, ...) # 호출

def func1(**args):
print(args)
print(type(args))

func1(user_id = 'dldbwls', name = '이유진', age = 25)

1-7.리턴값이 여러개인 함수

def 함수명(변수1, 변수2, ...):
    함수가 호출되면 실행할 문장
    ...
    return 값1, 값2, ...
변수1, 변수2, ... = 함수명(값1, 값2, ...) # 호출

def getResult(num1, num2):
return num1+num2, num1-num2, num1*num2, num1/num2

여러 값을 리턴하면 그 값들이 튜플에 묶여 리턴된다.

getResult(5,7)

튜플의 원소를 각각 저장

plus, minus, multiple, divide = getResult(5,7)
print(plus)
print(minus)
print(multiple)
print(divide)

내가 사용하고 싶은 친구만 저장!

, , temp, = getResult(4,9) # 물론 다른 값도 변수를 줄 수 있지만 굳이 사용하지 않는다면 를 사용해 메모리 낭비가 되지 않게 하기 위함!
print(temp)

문제

  • 700원 짜리 음료수를 뽑을 수 있는 자판기 프로그램을 구현해보자.
  • 매개변수로 금액을 입력!
  • 아래 텍스트가 나오도록 구현.
  • 출력 예시
vending_machine(3000) #호출
실행결과
음료수 = 0개, 잔돈 = 3000원
음료수 = 1개, 잔돈 = 2300원
음료수 = 2개, 잔돈 = 1600원
음료수 = 3개, 잔돈 = 900원
음료수 = 3개, 잔돈 = 200원

def vending_machine(money):
price = 700
count = money // price
for i in range(count+1):
change = money - price *i
print(f'음료수 {i:2d}개, 잔돈 = {change:5d}원')

vending_machine(3000)

def vending_machine_w(money):
drink = 0
price = 700
while(money > 0):
print(f'음료수 = {drink:2d}개, 잔돈 = {money:4d}원')
drink += 1
money -= price

vending_machine_w(3000)

profile
독해지자

0개의 댓글