'''
* 함수 (function)
- 함수는 지속적으로 사용되는 코드블록에 이름을 붙여놓은 형태입니다.
- 함수는 한 번 정의해 두면 지정된 함수 이름을 통해
언제든지 해당 코드 블록을 실행할 수 있습니다.
- 함수를 정의할 때는 def라는 키워드를 사용합니다.
- 정의해 놓은 함수를 사용하는 것을 호출(call) 이라고 부릅니다.
- 파이썬에서는 함수를 호출하려면 반드시 호출문보다 상단부에
함수를 먼저 정의해야 합니다.
'''
# 함수의 정의 (1~x까지의 누적합을 구하는 로직)
def calc_sum(end):
sum = 0
for n in range(1, end + 1):
sum += n
return sum
# 함수의 호출
print('1~100까지의 누적합:',calc_sum(100))
'''
* 인수, 매개변수 (arguments)
- 인수는 함수를 호출할 때 함수 실행에 필요한 값들을 전달하는
매개체 역할을 하며, 그렇기 때문에 매개변수(parameter)라고도
부릅니다.
- 인수의 개수는 제한이 없어 많은 값을 함수에 전달할 수도 있고
하나도 전달하지 않을 수 있습니다.
- 파이썬의 경우에는 데이터 타입을 작성하지 않기 때문에
이 함수를 처음 사용하는 사람도 인수 이름만 보고 무슨 값을
전달해야 할 지 의미를 알기 쉽게 지정하는 것이 좋습니다.
'''
'''
* 연습
1. 인수를 정수형태로 시작값(start), 끝값(end)을 입력받아
반복문으로 start부터 end까지의 누적 총합을 구하는 함수를 정의하세요.
2. 함수 이름은 calc_rangesum으로 정의하세요.
ex) calc_rangesum(3, 7) -> 3부터 7까지의 누적합을 구해와야 함.
3. 출력예시: "x~y까지의 누적합: z"
사용자에게 입력받은 값을 함수로 전달해서 값을 출력해 보세요.
'''
def calc_rangesum(start, end):
if(start > end):
start, end = end, start
total = 0
for n in range(start, end + 1):
total += n
return total
print('-' * 40)
n1 = int(input('정수1: '))
n2 = int(input('정수2: '))
print(f'{n1} ~ {n2}까지의 누적합: {calc_rangesum(n1, n2)}')
'''
* 반환값(return value)
- 반환값이란 함수를 호출한 곳으로 함수의 최종 실행 결과를
전달하는 값입니다.
- 인수는 여러 개 존재할 수 있지만, 반환값은 언제나
하나만 존재해야 합니다.
- 모든 함수가 반환값이 있는 것은 아닙니다.
함수 실행 후에 딱히 반환할 값이 없다면 return을 생략할 수 있습니다.
'''
def add(n1, n2):
return n1 + n2
result = add(10, 5)
print(add(add(5,7), add(9,8))) # add(12, 17)
# n = int(input('정수: ')) -> n = int('3')
# 만약 여러 개의 값을 한번에 return해야 할 때는
# 컬렉션 자료형을 사용합니다. (list, tuple, set)
def operate_all(n1, n2):
return n1 + n2, n1 - n2, n1 * n2, n1 / n2 # tuple
# return n1 - n2
# return n1 * n2
print(type(operate_all(10, 5)))
def multi(n1, n2):
result = n1 * n2
print(f'{n1} x {n2} = {result}')
# abc = multi(9, 6) --> None
# print(abc)
'''
* 내장함수 map
- map()은 첫번째 인수로 자료형 함수를 지정하고, 두 번째 인수로
리스트를 지정하면 해당 리스트 내부 요소값을 일괄적으로
첫번째 인수로 지정한 타입으로 변경한 데이터를 반환합니다.
'''
# 3개의 숫자 중 최대값을 판별하여 리턴하는 함수를 정의
from posixpath import split
def max_of_three(n1, n2, n3):
if n1 > n2:
if n1 > n3:
return n1
else:
return n3
else:
if n2 > n3:
return n2
else:
return n3
'''
n1 = int(input('정수1: '))
n2 = int(input('정수2: '))
n3 = int(input('정수3: '))
'''
n1, n2, n3 = map(int, input('정수 3개를 공백으로 구분해서 입력하세요.').split())
print('최대값:',max_of_three(n1,n2,n3))
def multi_triple(number):
return number ** 3
li = [2, 4, 6, 8, 10]
'''
multi_triple(2)
multi_triple(4)
multi_triple(6)
multi_triple(8)
multi_triple(10)
'''
# map(함수, 리스트) -> 리스트 내부 요소를 함수로 전달.
# 여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해 사용.
# li안에 있는 데이터들을 모두 multi_triple 함수로 전달해서
# 값을 변환하기 위해 사용.
# map 함수가 리턴하는 객체를 list로 변환해서 확인.
result = list(map(multi_triple, li))
print(result)
'''
* 인수의 기본값
- 파이썬에서는 인수의 기본값을 설정하여 자주 바뀌지 않는
매개값은 기본값으로 처리할 수 있도록 해 줍니다.
'''
def calc_stepsum(begin, end, step=1):
sum = 0
for n in range(begin, end + 1, step):
sum += n
return sum
print(calc_stepsum(1, 10))
print(calc_stepsum(1, 10, 2))
# 기본값이 지정된 인수를 오른쪽으로 몰아주셔야 합니다.
def calc_sum(end, begin=0, step=1):
sum = 0
for n in range(begin, end+1, step):
sum += n
return sum
print(calc_sum(100))
'''
* 키워드 인수 (keyword argument)
- 인수의 개수가 많아지면 인수의 순서를 파악하기 어렵고
함수를 호출할 때 전달할 값의 위치를 헷갈릴 가능성이
높아집니다.
ex) def signup_user(id, pw, name, addr, email, phone, ....)
- 파이썬에서는 순서와 무관하게 인수를 전달할 수 있는
방법을 제공하여 인수의 이름을 직접 지정하여 값을 전달하는
키워드 인수 방식을 제공합니다.
'''
from os import sep
def calc_sum(begin, end, step):
sum = 0
for n in range(begin, end+1, step):
sum += n
return sum
# 일반적인 함수 호출 (위치 인수 -> positional argument)
calc_sum(3, 7, 1)
# 키워드 인수 사용 (순서 상관 x)
print(calc_sum(end=7, step=1, begin=3))
print(calc_sum(step=1, begin=3, end=7))
# 위치 인수와 키워드 인수의 혼합 사용 시에는
# 무조건 위치 인수가 앞에 와야 합니다.
print(calc_sum(3, step=1, end=7))
# print(calc_sum(end=7, 3, 1)) (x)
# print(calc_sum(3, 1, end=7)) (x)
# print(calc_sum(3, end=7, 1)) (x)
print(3, 6, 9, sep='->', end='!')
# print(sep='->', end='!', 3, 6, 9) (x)
from tkinter import N
def add (n1, n2):
return n1 + n2
def add3 (n1, n2, n3):
return n1 + n2 + n3
def add (n1, n2, n3, n4):
return n1 + n2 + n3 + n4
'''
* 위치 가변 인수
- 함수를 호출할 때는 함수 정의시에 지정한 인수의 개수만큼
값을 전달해야 합니다.
- 하지만 가변 인수를 사용하면 하나의 인수로 여러개의 값을
받아서 처리할 수 있습니다.
- 위치 가변인수는 함수 정의부에서 인수를 선언할 때
인수 앞에 * 기호를 붙여 선언하며, 이런 경우에 여러 개의
데이터를 튜플로 묶어서 함수 내부로 전달합니다.
'''
def calc_total(*nums):
# print(type(nums)) -> type: tuple
total = 0
for n in nums:
total += n
return total
print(calc_total(5, 7, 9, 100, 122, 133, 233))
def calc_points(*points, name):
print(f'{name} 학생의 성적 계산:' )
total = 0
for p in points:
total += p
return total / len(points)
# 가변인수와 일반 인수를 동시에 사용할 때는
# 일반 인수를 반드시 키워드 인수 방식으로 전달해야 합니다.
result = calc_points(97, 45, 78, 100, 88, '김철수')
print(f'평균: {result}점')
'''
* 연습 - n개의 정수를 전달받아 가장 큰 숫자를 찾아서
리턴하는 함수를 작성 하세요. (get_max)
사용자에게 map()를 사용해서 여러 개의 값을 하나의 input()으로
입력 받은 후 get_max()에게 전달해서 가장 큰 값을 리턴받으세요.
입력받을 값은 5개로 하겠습니다.
'''
def get_max(*nums):
max = nums[0]
for n in nums:
if n > max:
max = n
return max
n1, n2, n3, n4, n5 = map(int, input('정수 5개: ').split())
print('최대값: ', get_max(n1, n2, n3, n4, n5))
'''
* 지역 변수 (local variable)
- 지역 변수란 함수 내부에 선언된 변수를 말합니다.
- 지역 변수는 함수 내부에서만 사용할 수 있으며
함수의 호출이 종료되는 순간 메모리에서 자동 소멸합니다.
- 지역 변수의 사용을 함수 내부로 제한하는 이유는
변수의 이름 충돌을 피하고, 메모리를 절약하기 위함입니다.
'''
def info():
name = '안녕'
print(name)
info()
# print(name) (x)
'''
* 전역 변수 (global variable)
- 지역변수가 함수 내부에서만 사용하는 변수라면
전역변수는 프로그램 전체에서 사용하는 공용 변수입니다.
- 파이썬에서는 들여쓰기 없이 선언된 변수를 전역변수로
취급하며, 전역변수는 함수 내부, 제어문 내부 등
프로그램 어디에서나 사용이 가능합니다.
'''
sale_rate = 0.2 # 전역 변수
def calc_price(price):
print(f'오늘의 할인율: {sale_rate * 100}%')
today_price = price - (price * sale_rate) #지역 변수
print(f'오늘의 가격: {today_price:0.0f}원')
print('-' * 40)
t_price = calc_price(2000)
print(t_price)
# print(today_price) (x)
a = 3
b = a
print(a, b)
a = 5
print(a, b)
list1 = [1, 2, 3]
list2 = list1
print('list1:', list1)
print('list2:', list2)
list2[0] = 6
list1[1] = 9
print('list1:', list1)
print('list2:', list2)
print('list1의 주소값:', id(list1))
print('list2의 주소값:', id(list2))
print('-' * 40)
list1 = [1,2,3]
list2 = []
list2 = list1.copy() # 리스트 내부 요소들을 복사하여 전달합니다.
list2[0] = 6
list1[1] = 9
print('list1:', list1)
print('list2:', list2)
print('list1의 주소값:', id(list1))
print('list2의 주소값:', id(list2))
'''
* 모듈 임포트
- 모듈은 파이썬 코드를 작성해 놓은 스크립트 파일이며
모듈 안에는 변수, 함수, 클래스 등이 정의되어 있습니다.
- 파이썬에서는 주요 기능들을 표준 모듈로 구성하여
표준 라이브러리로 제공하고 있습니다.
- 표준 모듈이나 외부 모듈을 현재 모듈로 불러서 사용할 때는
import라는 키워드를 사용합니다.
'''
import math
# pi = 3.14
print(5 * 5 * math.pi)
print(math.sqrt(3))
print(math.factorial(6))
print(math.log10(2))
print(math(pow(7,4)))
# 모듈 내에 존재하는 변수, 함수, 클래스를 직접 임포트하는 방법
from math import factorial, gcd
print(factorial(6))
print(factorial(5))
print(gcd(12, 18))
# 임포트할 모듈을 별칭을 지정해서 사용하기
import statistics as st
li = [45, 67, 78, 36, 68, 89]
print('평균: ', st.mean(li))
print('분산: ', st.variance(li))
print('표준편차:', st.stdev(li))
from math import factorial as fac
print(fac(10))