함수(2)
나눗셈 결과 반환 함수
- 두 개의 숫자를 입력받아 몫과 나머지를 튜플로 반환하는 함수
- 작은 수로 큰 수를 나눈 몫과 나머지를 반환하며, 작은 수가 0일 경우 예외 처리
// 실습 코드
def div(a,b):
return (a//b, a%b)
div(3, 5)
// 실습 코드
def div3(a, b):
if a < b:
big = b
small = a
elif b <= a:
big = a
small = b
else:
print("정수가 아닙니다.")
if small == 0:
print("0을 사용할 수 없습니다.")
else:
q = big // small
r = big % small
return (q, r)
매개변수 기본값 설정
- 매개변수의 초기값을 미리 설정해 사용하는 함수
// 실습 코드
def function(a, n=2):
print("%d의 제곱은 %d 입니다." %(a, a**n))
function(4)
- 매개변수 개수가 정해지지 않은 경우 *args를 사용하여 입력을 튜플로 묶는 함수
// 실습 코드
def test(*args):
print(args)
test(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
test([1, 2, 3, 4, 5])
test[1, 2, 3, 4, 4]
- **kwargs를 사용해 입력된 데이터를 딕셔너리로 처리하는 함수
// 실습 코드
def test(**kwargs):
print(kwargs)
test(a=1, b=2, c=3)
문자열을 일정 단위로 나누어 출력하는 함수
- 문자열을 입력받아 기본 단위로 나누거나 지정된 단위로 나누어 출력
// 실습 코드
def func(string, unit = 2):
i = 0
while i < len(string):
print(string[i:i+unit])
i += unit
func('테스트를 위한 문장입니다.')
func('테스트를 위한 문장입니다.', 4)
여러 숫자의 합 계산 함수 (add_all)
- 다양한 형식의 입력값(튜플, 리스트, 튜플과 리스트 혼합)을 받아 합을 계산하는 함수
// 실습 코드
def add_all(*inputs):
sum = 0
for i in range(len(inputs)):
sum += inputs[i]
print(inputs)
print(sum)
add_all(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// 실습 코드
def add_all(*args):
sum = 0
for i in args:
for j in i:
sum += j
print(args)
return sum
add_all([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
// 실습 코드
def add_all(*args):
temp = 0
for i in range(len(args)):
if type(args[i]) == list:
for j in args[i]:
temp += j
else:
temp += args[i]
return temp
print(add_all(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(add_all([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
함수의 지역변수와 전역변수
- 함수 내부 변수(지역변수)와 외부 변수(전역변수)의 동작 방식
- global 키워드를 사용하여 전역변수를 수정하는 예시
// 실습 코드
def myfunction():
in_val = '함수 안의 변수'
print(myfunction())
a = 1
def myfunction2(a):
a += 1
print(a)
myfunction2(a)
print(a)
def myfunction3():
global a
a += 1
print(a)
myfunction3()
print(a)
// 실습 코드
a = 1
print('처음에 있는 전역변수', a)
def myfunction4():
global a
a += 1
print('안에 있는 a', a)
myfunction4()
print('밖에 있는 a', a)
// 실습 코드
def myfunction3(a):
a += 1
print(a)
return a
def myfunction4():
global a
a += 1
print(a)
// 실습 코드
for _ in range(5):
c = myfunction3(a)
print('함수의 결과 : %d' %c)
print('a의 값 : %d' %a)
// 실습 코드
for _ in range(5):
myfunction4()
print('a의 값 : %d' %a)
- 함수 외부에서 데이터가 변경되는 예시(딕셔너리)
// 실습 코드
data = {"a": 1}
def myfunction3(data):
data["a"] += 1
print(data["a"])
myfunction3(data)
print("함수 밖의 a: ", data["a"])
팩토리얼 계산 함수
// 실습 코드
def fact(num):
f = 1
for i in range(1, num+1):
f = f*i
return f
fact(5)
// 실습 코드
def fact(num):
if num <= 1:
return 1
return num * fact(num-1)
fact(5)
파이썬 심화(1)
- 리스트로 받은 사람들에게 대기번호를 부여하고 출력하며, 대기번호와 이름의 튜플 리스트를 반환하는 함수
// 실습 코드
people = ['펭수', '뽀로로', '뚝딱이', '텔레토비']
def func1(line):
new_lines = []
i = 1
for x in line:
print("대기번호 : %d 번 : %s" %(i, x))
new_lines.append((i, x))
i += 1
return new_lines
func1(people)
enumerate 사용 예제
- 반복 가능한 객체의 인덱스와 원소를 동시에 접근하는 방법
- 리스트, 문자열, 집합, 딕셔너리를 사용한 예제
// 실습 코드
lst = ['a', 'b', 'c']
for x in enumerate(lst):
print(x)
print("===")
st = 'abcd'
for x in enumerate(st):
print(x)
print("===")
se = {'a', 'b', 'c'}
for x in enumerate(se):
print(x)
print("===")
dic = {0 : 'p', 1 : 'b', 2 : 'd'}
for x in enumerate(dic):
print(x)
print("===")
- enumerate를 활용한 대기번호 부여 함수
// 실습 코드
people = ['펭수', '뽀로로', '뚝딱이', '텔레토비']
def func1_with_enu(line):
new_lines = []
for idx, val in enumerate(line):
print("대기번호 %d번 : %s" %(idx+1, val))
new_lines.append((idx+1, val))
return new_lines
lines = func1_with_enu(people)
zip 사용 예제
- 여러 반복 가능한 객체를 병렬로 묶어주는 함수
- 리스트와 문자열 등 다양한 조합을 사용하는 예제
// 실습 코드
str_list = ['one', 'two', 'three', 'four']
num_list = [1, 2, 3, 4]
for i in zip(num_list, str_list):
print(i)
s1 = '123'
s2 = 'abc'
s3 = 'ㄱㄴㄷ'
list(zip(s1, s2, s3))
lambda 함수 예제
- 익명 함수와 이를 활용한 다양한 계산 및 함수 정의 예제
// 실습 코드
def plus_two(num):
return num+2
a = 2
b = plus_two(a)
print(b)
lambda x : x + 2
func2 = lambda x : x + 2
c = func2(2)
print(c)
map 함수와 lambda를 사용한 리스트 변환
// 실습 코드
items = [1, 2, 3, 4, 5]
squared = []
for i in items:
squared.append(i * i)
print(squared)
squared_map = list(map(lambda x:x**2, items))
print(squared_map)
squared_map = map(lambda x:x**2, items)
print(squared_map)
// 실습 코드
items = [1, 24, 3, 6, 7]
def str_1(items):
for i in range(len(items)):
items[i] = str(items[i])
return items
print(str_1(items))
items = [1, 24, 3, 6, 7]
str_items = list(map(lambda x:str(x), items))
print(str_items)
리스트 컴프리헨션
- 특정 조건에 맞는 리스트 생성
- 리스트 요소를 처리하는 빠르고 간결한 방법
// 실습 코드
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(map(lambda x:x**2, a))
print(result)
result = list(map(lambda x:pow(x,2), a))
print(result)
// 실습 코드
list_2 = []
for x in range(10):
list_2.append(x)
print(list_2)
list_3 = [x for x in range(10)]
print(list_3)
- 주어진 문장을 띄어쓰기 기준으로 나누고, 각 요소의 길이를 리스트로 저장
// 실습 코드
s = "코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합니다. 마스크를 끼고 손씻기를 생활화 합시다."
lis = []
for s in s.split():
lis.append(len(s))
print(lis)
s = "코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합니다. 마스크를 끼고 손씻기를 생활화 합시다."
func = [len(s) for s in s.split()]
print(func)
// 실습 코드
lc_2 = [x for x in range(10, 21) if x % 2 == 0]
print(lc_2)
// 실습 코드
lc_3 = [x**2 for x in range(1, 11) if x**2 <= 50]
print(lc_3)
// 실습 코드
s = "코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합니다. 마스크를 끼고 손씻기를 생활화 합시다."
lis = []
for s in s.split():
if len(s) < 5:
lis.append(len(s))
print(lis)
s = "코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합니다. 마스크를 끼고 손씻기를 생활화 합시다."
len_condition = [s for s in s.split() if len(s) < 5]
print(len_condition)
리스트 컴프리헨션에서 if-else 활용
// 실습 코드
list_4 = []
for x in range(1, 11):
if x % 2 == 0:
list_4.append(x**2)
else:
list_4.append(x**3)
print(list_4)
list_5 = [x**2 if x % 2 == 0 else x**3 for x in range(1, 11)]
print(list_5)
- 40 이하의 숫자는 5를 더하고, 초과는 41로 저장
// 실습 코드
list_6 = [12, 67, 32, 48, 19, 57, 29, 49]
list_7 = [x + 5 if x <= 40 else 41 for x in list_6]
print(list_7)
- 주어진 학생 점수 데이터로 컷트라인 기준 통과 여부를 판단하여 결과를 튜플로 구성하여 리스트에 저장
// 실습 코드
students = {"보라돌이" : 61, "뚜비" : 35, "나나" : 78, "뽀" : 88}
result = [(name, True) if score >= 60 else (name, False) for name, score in students.items()]
print(result)