함수
함수의 기본 구조
def 함수명(매개변수): <수행할 문장1=""> <수행할 문장2="">수행할>수행할>
def add(a,b): #a, b는 매개변수
return a+b
print(add(3,4)) #3,4 는 실행인자
def print_root(a,b,c): #(a,b,c)매개변수
r1 = (-b + (b ** 2 - 4 * a **c) ** 0.5) / (2 * a)
r2 = (-b + (b ** 2 - 4 * a **c) ** 0.5) / (2 * a)
print('해는 {} 또는 {}'.format(r1,r2))
x = 1 #실행인자
y = 2
z = -8
일반적인 함수
def add(a,b): # def 함수이름(매개변수):
result = a + b # 수행할 문장
reutrn result # return 결괏값
a = add(3,4) # 결괏값을 받을 변수 = 함수이름(수행인자1, 수행인자2 ...)
print(a)
7
def add_10(value):
'''value 에 10을 더한 값을 돌려주는 함수'''
#return 10 을 하면 10의 값을 주고 뒷부분은 실행하지 않음. 즉시종료
result = value + 10
return result #함수가 값을 갖도록 하는 기능
n = add_10(42) #add_10(42)만 쓰면 아무것도 출력 안됨
print(n) #근데 이렇게 쓰면 52가 출력됨
입력값과 결괏값이 여러개인 경우
def root(a,b,c):
r1 = (-b + (b ** 2 - 4 * a **c) ** 0.5) / (2 * a)
r2 = (-b + (b ** 2 - 4 * a **c) ** 0.5) / (2 * a)
return r1, r2 # 갯수를 맞춰 쉼표로 구분만 해주면 여러개의 값을 반환할 수 있다
# 아까 같은경우는 여기에 바로 print를 썼지만
# 지금은 return으로 값을 저장하고 그걸 함수로 부르면 되는것
x= 1
y = 2
z = -8
r1, r2 = root(x,y,z)
print('근은 {}'.format(r1, r2))
입력값이 없는 함수
def say(): # () 입력값이 없다
return 'HI' # return이 있어서 결괏값은 존재하는 것
a = say() # 결괏값을 받을 변수 = 함수이름()
print(a)
결괏값이 없는 함수
def add(a,b):
print('{},{}의 합은 {}입니다.'.format(a,b,a+b)) #이것은 결괏값이 아님
add(3,4) # 함수이름(수행인자1, 수행인자2...)
3,4의 합은 7입니다.
입력값도 결괏값도 없는 함수
def function():
print('안녕, 함수') #이것만 쓴상태로 실행하면 아무것도 출력하지 않음
function() #이것을 써야지만 함수가 호출, 실행된다
안녕, 함수
함수의 초깃값
def say_myself(name, old, woman=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d 살입니다." % old)
if woman:
print("여자입니다.")
else:
print("남자입니다")
say_myself("김갈릭", 25)
say_myself("김갈릭", 25, True)
나의 이름은 김갈릭입니다.
나이는 25 살 입니다.
여자입니다.
# 여기서 조심해야하는 것은 woman=True 와 같은 초깃값은 항상 뒤쪽에 놔야한다.
# def say_myself(name, woman=True, old)의 순서는 안된다는 것!
round 함수
def print_round(number):
rounded = round(number) #반올림 해주는 함수
print(rounded)
print_round(4.6)
5
print_round(2.2)
2
연습문제 1
주어진 자연수가 홀수인지 짝수인지 판별해주는 함수(is_odd)를 작성해 보자.
def is_odd(number):
#number = input() 여긴아닌거같은데말이지
if number % 2 == 0:
print('even')
else:
print('odd')
is_odd(3)
Q : 만약 내가 입력하는 숫자를 number에 대입하고 싶다면 어디에 input()을 써야하는것인지?
연습문제2
입력으로 들어오는 모든 수의 평균 값을 계산해 주는 함수를 작성해 보자. (단 입력으로 들어오는 수의 개수는 정해져 있지 않다.)
def avg_numbers(*args): # 입력 개수에 상관없이 사용하기 위해서
result = 0
for i in args:
result += i # result = result + i
return result / len(args)
avg_numbers(1,2,3,4,5)
*args 라는 개념이 생각이 나지 않아 한번에 못풀었다.
연습문제 3
이 프로그램에서 3과 6을 입력했을 때, 9가 나오도록 프로그램을 수정해보자
input1 = input("첫번째 숫자를 입력하세요:")
input2 = input("두번째 숫자를 입력하세요:")
total = input1 + input2
print("두 수의 합은 %s 입니다" % total)
input1 = input("첫번째 숫자를 입력하세요:")
input2 = input("두번째 숫자를 입력하세요:")
total = int(input1) + int(input2) #int로 바꿔줘야하는 이유는 input1이 문자열로 들어갔기 때문
print("두 수의 합은 %s 입니다" % total)
int를 써야한다는 것은 알았으나 입력이 문자열로 들어가기 때문이라는 것을 몰랐다.