def 함수 이름():
. . . . 문장
아래는 '코드의 집합'이라는 목적으로 활용한 코드이며 세 문장을 포함하는 print_3_times 함수를 만든 후 호출하여 실행하는 간단한 예제임
# 기본적인 함수.py
def print_3_times():
print("안녕하세요")
print("안녕하세요")
print("안녕하세요")
print_3_times()
# 실행 결과
----------
안녕하세요
안녕하세요
안녕하세요
예를 들어 print() 함수를 작성할 때 print(value, .... sep='', end=\n', file=sys.stdout, flush=False)와 같이 괄호 안에 많은 것들이 있으며 이러한 것들을 모두 매개변수라 부름
def 함수 이름(매개변수, 매개변수,...):
문장
아래는 매개변수와 관련된 간단한 예제
# value, n식별자 입력 매개변수가 됨
# 매개변수는 함수 호출 시 값 입력해 함수쪽으로 전달 가능
def print_n_times(value, n):
for i in range(n):
print(value)
# 함수호출
# value: 안녕하세요, n: 5입력 ---> 안녕하세요 5번 출력
print_n_times("안녕하세요", 5)
# 실행 결과
----------
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
def print_n_times(value, n): # 매개변수 2개 지정
for i in range(n):
print(value)
print_n_times("안녕하세요") # 안녕하세요 1개만 입력
# 실행 결과
----------
TypeError: print_n_times() missing 1 required positional argument: 'n'
위의 코드는 매개변수가 적을 경우에 발생함
아래의 코드는 매개변수가 많을 경우에 발생함
def print_n_times(value, n):
for i in range(n):
print(value)
print_n_times("안녕하세요", 10, 20)
# 실행 결과
----------
TypeError: print_n_times() takes 2 positional arguments but 3 were given
따라서 함수를 호출할 때는 함수를 선언할 때와 같은 개수의 매개변수를 입력해야 한다.
매개변수를 원하는 만큼 받을 수 있는 함수
def 함수 이름(매개변수, 매개변수, ..., *가변 매개변수):
. . . . 문장
가변매개변수는 2개의 제약이 존재함
1. 가변매개변수 뒤에는 일반 매개변수가 올 수 없음
2. 가변 매개변수는 하나만 사용할 수 있음
# 가변 매개변수 함수
def print_n_times(n, *values):
# n번 반복
for i in range(n):
# values는 리스트처럼 활용함
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times(3, "안녕하세요", "즐거운", "파이썬 프로그래밍")
# 실행 결과
----------
안녕하세요
즐거운
파이썬 프로그래밍
안녕하세요
즐거운
파이썬 프로그래밍
안녕하세요
즐거운
파이썬 프로그래밍
def print_n_times(value, n=2): # n을 입력하지 않으면 기본값을 2로 입력함
# n번 반복
for i in range(n):
print(value)
# 함수 호출
print_n_times("안녕하세요")
# 실행 결과
----------
안녕하세요
안녕하세요
기본 매개변수 뒤에 일반 매개변수가 올 수 없는 이유는, print_n_times(value, n=2)에서 print_n_times(n=2, value)로 사용할 경우 첫 번째 매개변수에 할당되어야 하는지, 두 번째 매개변수에 할당되어야 하는지 확실하게 알 수 없기 때문
def print_n_times(n=2, *values):
# n번 반복
for i in range(n):
#values는 리스트처럼 활용 가능
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍")
# 실행 결과
----------
TypeError: 'str' object cannot be interpreted as an integer
def print_n_times(*values, n=2):
# n번 반복
for i in range(n):
#values는 리스트처럼 활용 가능
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍", 3)
# 실행 결과
----------
안녕하세요
즐거운
파이썬 프로그래밍
3
안녕하세요
즐거운
파이썬 프로그래밍
3
매개변수와 가변 매개변수를 함께 쓰는 상황에서는 매개변수에 직접 변수명을 지정하여 값을 입력하여 사용함
즉, 매개변수 이름을 직접적으로 지정하여 값을 입력하는 매개변수
# while 반복문 사용
while True:
# "."을 출력
# 기본적으로 end가 "\n"이라 줄바꿈이 일어나는데
# 빈 문자열 ""로 바꿔서 줄바꿈이 일어나지 않게 함
print(".", end = "") # 여기서 end="" 키워드 매개변수
이전 코드에서 ["안녕하세요", "즐거운", "파이썬 프로그래밍"]을 세 번 출력하도록 실행하려면 위와같이 매개변수 이름을 직접적으로 지정하여 값을 입력함
# 키워드 매개변수.py
def print_n_times(*values, n=2):
# n번 반복함
for i in range(n):
# values는 리스트처럼 활용함
for value in values:
print(value)
#단순한 줄바꿈
print()
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍", n=3) # 여기서 n은 매개변수
# 실행 결과
----------
안녕하세요
즐거운
파이썬 프로그래밍
안녕하세요
즐거운
파이썬 프로그래밍
안녕하세요
즐거운
파이썬 프로그래밍
이처럼 매개변수 이름을 지정해서 입력하는 매개변수를 키워드 매개변수라 함
키워드 매개변수는 기본 매개변수들로 구성된 함수에도 많이 사용됨
def test(a, b=10, c=100):
print(a + b + c)
# 1) 기본 형태
test(10, 20, 30)
# 2) 키워드 매개변수로 모든 매개변수를 지정한 형태
test(a=10, b=100, c=200)
# 3) 키워드 매개변수로 모든 매개변수를 마구잡이로 지정한 형태
test(c=10, a=100, b=200)
# 4) 키워드 매개변수로 일부 매개변수만 지정한 형태
test(10, c=200)
# 실행 결과
----------
60
310
310
220
def return_test():
print("A 위치입니다.")
return # 리턴
print("B 위치 입니다.")
# 함수 호출
return_test()
# 실행 결과
----------
A 위치입니다.
# 함수 정의
def return_test():
return 100
# 함수 호출
value = return_test()
print(value)
# 실행 결과
----------
100
# 함수 정의
def return_test():
return
# 함수 호출
value = return_test()
print(value)
# 실행 결과
----------
None
def 함수(매개변수):
. . . . 변수 = 초깃값
. . . . # 여러 가지 처리
. . . . # 여러 가지 처리
. . . . # 여러 가지 처리
. . . . return 변수
# 함수 선언
def sum_all(start, end):
# 변수 선언
output = 0
# 반복문을 돌려 숫자를 더함
for i in range(start, end + 1):
output += i
# 리턴
return output
# 함수 호출
print("0 to 100:", sum_all(0, 100))
print("0 to 1000:", sum_all(0, 1000))
print("50 to 100:", sum_all(50, 100))
print("500 to 1000:", sum_all(500, 1000))
# 실행 결과
----------
0 to 100: 5050
0 to 1000: 500500
50 to 100: 3825
500 to 1000: 375750
# 기본 매개변수와 키워드 매개변수를 활용해 범위의 정수를 더하는 함수.py
# 함수 선언
def sum_all(start=0, end=100, step=1):
# 변수 선언
output = 0
# 반복문을 돌려 숫자를 더함
for i in range(start, end + 1, step):
output += i
# 리턴
return output
# 함수 호출
print("A.", sum_all(0, 100, 10))
print("B.", sum_all(end=100))
print("C.", sum_all(end=100, step=2))
# 실행 결과
----------
A. 550
B. 5050
C. 2550
n으로 표현
1부터 n까지의 숫자를 곱하는 연산
n! = n (n-1) (n-2) ... 1
# 반복문으로 팩토리얼 구하기.py
# 함수 선언
def factorial(n):
# 변수 선언
output = 1
# 반복문 돌려 숫자 더하기
for i in range(1, n + 1):
output *= i
# 리턴
return output
# 함수 호출
print("1!:", factorial(1))
print("2!:", factorial(2))
print("3!:", factorial(3))
print("4!:", factorial(4))
print("5!:", factorial(5))
# 실행 결과
----------
1!: 1
2!: 2
3!: 6
4!: 24
5!: 120
n! = n (n-1) (n-2) ... 1
factorial(n) = n * factorial(n -1) (n >= 1 일 때)
factorial(0) = 1
#재귀 함수를 사용해 팩토리얼 구하기
# 함수 선언
def factorial(n):
# n이 0이라면 1을 리턴
if n == 0:
return 1
# n이 0이 아니라면 n * (n-1)을 리턴
else:
return n * factorial(n - 1)
# 함수 호출
print("1!:", factorial(1))
print("2!:", factorial(2))
print("3!:", factorial(3))
print("4!:", factorial(4))
print("5!:", factorial(5))
# 실행 결과
----------
1!: 1
2!: 2
3!: 6
4!: 24
5!: 120
팩토리얼의 경우는 어떤 형태로 만들어도 크게 상관 없음
# 피보나치 수열_1
# 함수 선언
def fibonacci(n):
if n == 1:
return 1
if n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# 함수 호출
print("fibonacci(1):", fibonacci(1))
print("fibonacci(2):", fibonacci(2))
print("fibonacci(3):", fibonacci(3))
print("fibonacci(4):", fibonacci(4))
print("fibonacci(5):", fibonacci(5))
# 실행 결과
----------
fibonacci(1): 1
fibonacci(2): 1
fibonacci(3): 2
fibonacci(4): 3
fibonacci(5): 5
# 피보나치 수열_2
# 변수 선언
counter = 0
# 함수 선언
def fibonacci(n):
# 어떤 피보나치 수를 구하는지 출력
print("fibonacci({})를 구합니다.".format(n))
global counter
counter += 1
# 피보나치 수 구하기
if n == 1:
return 1
if n == 2:
return 1
else:
return fibonacci (n - 1) + fibonacci(n -2)
# 함수 호출
fibonacci(10)
print("---")
print("fibonacci(10) 계산에 활용된 덧셈 횟수는 {}번 입니다.".format(counter))
# 실행 결과
----------
fibonacci(10)를 구합니다.
fibonacci(9)를 구합니다.
...생략...
fibonacci(1)를 구합니다.
fibonacci(2)를 구합니다.
---
fibonacci(10) 계산에 활용된 덧셈 횟수는 109번 입니다.
# 메모 변수를 만듬
dictionary = {
1: 1,
2: 1
}
# 함수 선언
def fibonacci(n):
if n in dictionary:
# 메모가 되어 있으면 메모된 값 리턴
return dictionary[n]
else:
# 메모가 되어 있지 않으면 값을 구함
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
# 함수 호출
print("fibonacci(10):", fibonacci(10))
print("fibonacci(10):", fibonacci(20))
print("fibonacci(10):", fibonacci(30))
print("fibonacci(10):", fibonacci(40))
print("fibonacci(10):", fibonacci(50))
# 실행 결과
----------
fibonacci(10): 55
fibonacci(10): 6765
fibonacci(10): 832040
fibonacci(10): 102334155
fibonacci(10): 12586269025
# 함수 선언
def fibonacci(n):
if n in dictionary:
# 메모되어 있으면 메모된 값을 리턴
return dictionary[n]
else:
# 메모되어 있지 않으면 값을 구함
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
# 함수 선언
def fibonacci(n):
if n in dictionary:
# 메모되어 있으면 값을 구함
return dictionary[n]
# 메모되어 있지 않으면 값을 구함
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
(데이터, 데이터, 데이터, ...)
>>> tuple_test = (10, 20, 30)
>>> tuple_test[0]
10
>>> tuple_test[1]
20
>>> tuple_test[1] = 15
TypeError: 'tuple' object does not support item assignment
(a, b) = (10, 20) # 괄호가 있는 튜플
c, d = 30, 40 # 괄호가 없는 튜플
print("a:", a)
print("b:", b)
print("c:", c)
print("d:", d)
# 실행 결과
----------
a: 10
b: 20
c: 30
d: 40
# 함수 선언
def test():
return (10, 20)
# 여러 개의 값을 리턴받음
a, b = test()
# 출력
print("a:", a)
print("b:", b)
# 실행 결과
----------
a : 10
b: 20
# 매개변수로 받은 함수를 10번 호출한느 함수
def call_10_items(func):
for i in range(10):
func()
# 간단히 출력하는 함수
def print_hello():
print("안녕하세요")
# 조합하기
call_10_times(print_hello)
# 실행 결과
----------
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
안녕하세요
map(함수, 리스트)
filter(함수, 리스트)
# 함수 선언
def power(item):
return item * item
def under_3(item):
return item < 3
# 변수 선언
list_input_a = [1, 2, 3, 4, 5]
# map() 함수 사용
output_a = map(power, list_input_a)
print("# map() 함수의 실행 결과")
print("map(power, list_input_a):", output_a)
print("map(power, list_input_a):", list(output_a))
print()
# filter() 함수 사용
output_b = filter(under_3, list_input_a)
print("# filter() 함수의 실행 결과")
print("# filter(under_3, list_input_a):", output_b)
print("# filter(under_3, list_input_a):", list(output_b))
# 실행 결과
----------
# map() 함수의 실행 결과
map(power, list_input_a): <map object at 0x000002748491FDF0>
map(power, list_input_a): [1, 4, 9, 16, 25]
# filter() 함수의 실행 결과
# filter(under_3, list_input_a): <filter object at 0x000002748491FEB0>
# filter(under_3, list_input_a): [1, 2]
lamda 매개변수: 리턴값
# 함수 선언
power = lambda x: x * x
under_3 = lambda x: x < 3
# 변수 선언
list_input_a = [1, 2, 3, 4, 5]
# map() 함수를 사용함
output_a = map(power, list_input_a)
print("#map() 함수의 실행 결과")
print("map(power, list_input_a):", output_a)
print("map(power, list_input_a):", list(output_a))
print()
# filter() 함수 사용
output_b = filter(under_3, list_input_a)
print("# filter()함수의 실행 결과")
print("filter(under_3, list_input_a):", output_b)
print("filter(under_3, list_input_a):", list(output_b))
# 실행 결과
----------
#map() 함수의 실행 결과
map(power, list_input_a): <map object at 0x00000274849A4790>
map(power, list_input_a): [1, 4, 9, 16, 25]
# filter()함수의 실행 결과
filter(under_3, list_input_a): <filter object at 0x00000274849A56F0>
filter(under_3, list_input_a): [1, 2]
# 변수 선언
list_input_a = [1, 2, 3, 4, 5]
# map() 함수 사용
output_a = map(lambda x: x * x, list_input_a)
print(" map() 함수의 실행 결과")
print("# map(power, list_input_a):", output_a)
print("# map(power, list_input_a):", list(output_a))
# filter() 함수 사용
output_b = filter(lambda x: x < 3, list_input_a)
print("# filter() 함수의 실행 결과")
print("filter(under_3, list_input_a):", output_b)
print("filter(under_3, list_input_a):", list(output_b))
파일 객체 = open(문자열: 파일 경로, 문자열: 읽기 모드)
모드 | 설명 |
---|---|
w | write 모드(새로 쓰기 모드) |
a | append 모드(뒤에 이어스 쓰기 모드) |
r | read 모드(읽기 모드) |
파일 객체.close()
# 파일 열기
file = open("basic.txt", "w")
# 파일에 텍스트 작성
file.write("Hello Python Programming...!")
# 파일 닫기
file.close()
with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체:
. . . . 문장
# 파일 열기
with open("basic.txt", "w") as file:
# 파일에 텍스트 씀
file.write("Hello Python Programming...!")
파일 객체.read()
# 파일 열기
with open("basic.txt", "r") as file:
# 파일 읽고 출력
contents = file.read()
print(contents)
# 실행 결과
----------
Hello Python Programming...!
원판 개수가 4개일 때 어덯게 원판을 옮겨야 하는지 출력하도록 프로그램 구현하기
원판의 개수를 입력하세요: 4
A 탑 -> C탑
A 탑 -> B탑
C탑 -> C탑
...생략...
A탑 -> C탑
A탑 -> B탑
C탑 -> B탑
# 하노이 탑에서 필요한 요소를 모두 매개변수로 받음
def 하노이탑(원판, 시작기둥, 대상기둥, 보조기둥):
if 원판 == 1:
print(시작기둥, "->", 대상기둥)
else:
# 아래의 원판을 제외하고, 시작 기둥에서 보조 기둥으로 이동
하노이탑(원판 -1, 시작기둥, 보조기둥, 대상기둥)
print(시작기둥, "->", 대상기둥)
# 아래의 원판을 제외하고, 보조 기둥에서 대상 기둥으로 이동
하노이탑(원판 - 1, 보조기둥, 대상기둥, 시작기둥)
n = int(input("원판의 개수를 입력하세요: "))
하노이탑(n, "A탑", "B탑", "C탑")
하노이탑의 이동 횟수를 다음과 같이 출력하기
원판의 개수를 입력해주세요: 20
이동 횟수는 1048575회입니다.
위의 코드에서 횟수만 추가하면 됨
횟수 = 0
def 하노이탑(원판, 시작기둥, 대상기둥, 보조기둥):
global 횟수
if 원판 == 1:
#print(시작기둥, "->", 대상기둥)
횟수 += 1
else:
하노이탑(원판 -1, 시작기둥, 보조기둥, 대상기둥)
#print(시작기둥, "->", 대상기둥)
횟수 += 1
하노이탑(원판 - 1, 보조기둥, 대상기둥, 시작기둥)
n = int(input("원판의 개수를 입력하세요: "))
하노이탑(n, "A탑", "B탑", "C탑")
print(f"이동 횟수는 {횟수}입니다.")
아래의 코드는 수학코드로 작성했을 경우에 나타나는 방법
def 하노이탑이동횟수(n):
return(2 ** n) -1
n = int(input("원판의 개수를 입력하세요: "))
print(f"이동 횟수는 {하노이탑이동횟수(n)}회 입니다."
좋은 글 감사합니다. 자주 올게요 :)