함수란, 특정 기능을 재사용하기 위해서 사용한다.
def add_cal ():
n1 = int(input('n1: '))
n2 = int(input('n2: '))
print(f'n1 + n2 = {n1+n2}')
add_cal()
def cal_fun():
n1 = int(input('num1: '))
n2 = int(input('num2: '))
print(f'n1 * n2 = {n1 * n2}')
print(f'n1 / n2 = {round(n1/n2)}')
cal_fun()
def greet(customer): ---> 매개변수
print(f'{customer})
greet('홍길동') ---> 인수
#매개변수 개수가 정해지지 않은 경우 '*'를 이용한다.
def print_number(*numbers):
for number in numbers:
print(number, end= '')
print()
print_number()
print_number(1,2,3)
print_number(1,2,3,4,5,6)
실습
국어, 영어, 수학 점수를 입력받고, 입력받은 점수를 이용해서 총점과 평균을 출력하는 함수를 만들어 보자.
def print_score(kor, eng, math):
sum = kor +eng + math
avg = sum / 3
print(f'총점: {sum}')
print(f'평균: {avg}')
kor_score = int(input('korean score: '))
eng_score = int(input('english score: '))
math_score = int(input('math score: '))
print_score(kor_score, eng_score, math_score)
젼역 변수란, 함수 밖에서 정의한 변수. 함수 내부에서 수정할 수 없다.
지역 변수란, 함수 내에서 정의된 변수. 함수가 호출되는 그 순간에만 존재한다.
num_out = 10 #전역변수
def print_numbers():
num_out = 20 #지역변수
print(f'num_out: {num_out}')
print_numbers() #값은 20 지역변수 영향
print(f'num_out: {num_out}') #값은 10 전역변수 영향
실습
사용자가 가로, 세로 길이를 입력하면 삼각형과 사각형의 넓이를 출력하는 함수를 만들어보자.
width = int(input('가로 길이: '))
height = int(input('세로 길이: '))
def print_area():
triangle = width * height/2
square = width * height
print(f'삼각형의 넓이는: {triangle}')
print(f'사각형의 넓이는: {square}')
print_area()
global을 사용하면 함수 안에서도 전역 변수의 값을 수정할 수 있다.
num_out = 10
def print_numbers():
global num_out #전역변수 값 수정 가능
num_out = 20
print(f'num_out: {num_out}')
print_numbers() #값은 20 지역변수 영향
print(f'num_out: {num_out}') #값은 20 global 영향
실습
방문객 수를 카운트하는 함수를 만들어보자.
total_visit = 0
def total_visit_count():
global total_visit
total_visit = total_visit + 1
print(f'누적 방문객 = {total_visit}')
total_visit_count()#누적 방문객 = 1
total_visit_count()#누적 방문객 = 2
total_visit_count()#누적 방문객 = 3
total_visit_count()#누적 방문객 = 4
중첩 함수란, 함수안에 또 다른 함수가 있는 형태이다.
내부 함수를 함수 밖에서 호출할 수 없다.
def out_func():
print('outfunc called')
def in_func():
print('infunc called')
in_func()
out_func()
in_func() --> error
실습
calculator()함수를 선언하고 이 함수안에 덧셈, 뺄셈, 곱셈, 나눗셈 함수를 선언하자.
def calculator(n1, n2, operator):
def add_cal():
print(f'덧셈 = {n1 + n2}')
def sub_cal():
print(f'뺄셈 = {n1 - n2}')
def mul_cal():
print(f'곱셈 = {n1 * n2}')
def div_cal():
print(f'나눗셈 = {n1 / n2}')
if operator == 1:
add_cal()
elif operator == 2:
sub_cal()
elif operator == 3:
mul_cal()
elif operator == 4:
div_cal()
while True:
num1 = float(input('첫 번째 숫자 입력: '))
num2 = float(input('두 번째 숫자 입력: '))
operator = int(input('1. 덧셈, 2. 뺄셈, 3. 곱셈, 4. 나눗셈, 5. 종료'))
if operator == 5:
print('Thank you')
break
calculator(num1, num2, operator)
lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있다.
def calculator(n1,n2):
return n1 + n2
return_value = calculator(10,20)
print(f'result = {return_value}')
#lambda를 사용하면
calculator = lambda n1,n2: n1 + n2
return_value = calculator(10,20)
print(f'result = {return_value}')
실습
삼각형, 사각형, 원의 넓이를 반환하는 lambda 함수를 만들어보자.
get_triangle_area = lambda n1,n2: n1 * n2 / 2
get_square_area = lambda n1,n2: n1 * n2
get_circle_area = lambda r: r * r * 3.14
weight = int(input('가로 길이: '))
height = int(input('세로 길이: '))
radius = int(input('반지름 길이: '))
triangle = get_triangle_area(weight, height)
square = get_square_area(weight, height)
circle = get_circle_area(radius)
print(f'triangle area = {triangle}')
print(f'square area = {square}')
print(f'circle area = {circle}')
모듈이란, 이미 만들어진 훌륭한 기능으로 사용자들이 쉽게 사용할 수 있다.
실습
1. random 모듈을 이용해서 1부터 10까지의 정수 중 난수 1개를 발생시켜 보자.
2. random 모듈을 이용해서 0부터 100사이의 난수 10개를 발생시켜 보자.
import random
r_number = random.randint(1,10) #random.randint(범위)
print(f'random number = {r_number}')
r_numbers = random.sample(range(1,101),10) #random.sample(범위, 갯수)
print(f'random numbers = {r_numbers}')
def add(n1, n2):
print(f'덧셈의 결과 = {n1 + n2}')
def sub(n1, n2):
print(f'뺄셈의 결과 = {n1 - n2}')
def mul(n1, n2):
print(f'곱셈의 결과 = {n1 * n2}')
def div(n1, n2):
print(f'나눗셈의 결과 = {n1 / n2}')
import calculator
calculator.add(10,20)
calculator.sub(10,20)
calculator.mul(10,20)
calculator.div(10,20)
import 키워드를 이용해서 모듈을 임포트 한다.
import키워드를 이용해서 모듈을 임포트 한다.
import calculator
calculator.add(10,20)
calculator.sub(10,20)
calculator.mul(10,20)
calculator.div(10,20)
as 키워드를 이용해서 모듈 이름을 단축 시킬 수 있다.
import calculator as cal
calculator.add(10,20)
calculator.sub(10,20)
calculator.mul(10,20)
calculator.div(10,20)
from~as 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있다.
from calculator import add
add(10,20)
from calculator import add, sub
add(10,20)
sub(10,20)
from calculator import * -> 칼큘레이터에 있는 모든것을 가져오겠다.
실행 파일: 내가 모듈을 실행하는 파일
__name__ 전역 변수: 모듈 이름이 저장되거나, 실행 파일일 경우 '__main__'이 저장된다.
실습
실습
#1번 모듈 파일 (unitconversion)
def cm_to_mm(n):
return round(n * 10,3)
def cm_to_inch(n):
return round(n *0.393, 3)
def cm_to_m(n):
return round(n * 0.01, 3)
def cm_to_ft(n):
return round(n * 0.032, 3)
if __name__ == '__main__':
print(f'10cm: {cm_to_mm(10)}mm')
print(f'10cm: {cm_to_inch(10)}inch')
print(f'10cm: {cm_to_ft(10)}ft')
print(f'10cm: {cm_to_m(10)}m')
2번 실행 파일
import unitconversion as uc
if __name__ == '__main__':
user_number = int(input('길이(cm) 입력: '))
result_mm = uc.cm_to_mm(user_number)
result_inch = uc.cm_to_inch(user_number)
result_m = uc.cm_to_m(user_number)
result_ft = uc.cm_to_ft(user_number)
print(f'해당 길이의 mm 변환은 {result_mm}mm입니다.')
print(f'해당 길이의 inch 변환은 {result_inch}inch입니다.')
print(f'해당 길이의 m 변환은 {result_m}m입니다.')
print(f'해당 길이의 ft 변환은 {result_ft}ft입니다.')
math 모듈: 수학 관련 모듈
#합
list = [2, 4, 5, 3, 29]
print(sum(list))
#최댓값
print(max(list))
#최솟값
print(min(list))
#거듭제곱
print(pow(12,2)) #12의 2제곱
#반올림
print(round(3.13432,2))
import math
#절댓값
print(math.abs(-10))
#올림
print(math.ceil(5.81))
#내림
print(math.floor(5.22))
#버림
print(math.trunc(5.32))
#최대공약수
print(math.gcd(14,21))
#팩토리얼
print(math.factorial(10))
#제곱근
print(math.sqrt(4))
random 모듈: 난수 관련 모듈
#1~10까지 난수 1개
random.randint(1,10)
#1~50까지 난수 5개
random.sample(range(1,50),5)
time 모듈: 시간 관련 모듈
#년도
print(f'localtime year: {local_time.tm_year}')
#월
print(f'localtime month: {local_time.tm_mon}')
#일자
print(f'localtime day: {local_time.tm_mday}')
#시
print(f'localtime hour: {local_time.tm_hour}')
#분
print(f'localtime min: {local_time.tm_min}')
#초
print(f'localtime second: {local_time.tm_sec}')
#요일 (0부터 월요일)
print(f'localtime week of day: {local_time.tm_wday}')