조건문이나 반복문 안에서 들여쓰기
문장 안에서 줄바꿈으로 여러 문자열을 사용하게 되면 같이 들여쓰기가 됨
\n을 사용하면 해결 가능
# 홀수, 짝수 구분하는 프로그램
number = int(input("정수를 입력하세요> "))
if number % 2 == 0: # 짝수
print("""\\
입력한 숫자는 {}입니다.
{}는 짝수입니다.\\
""".format(number, number))
else: # 홀수
print("""\\
입력한 숫자는 {}입니다.
{}는 홀수입니다.\\
""".format(number, number))
-----------------------------------------------------
정수를 입력하세요> 16
입력한 숫자는 16입니다.
16는 짝수입니다
**해결1**
number = int(input("정수를 입력하세요> "))
if number % 2 == 0: # 짝수
print("입력한 숫자는 {}입니다.\\n{}는 짝수입니다.".format(number, number))
else: # 홀수
print("입력한 숫자는 {}입니다.\\n{}는 홀수입니다.".format(number, number))
-----------------------------------------------------
정수를 입력하세요> 16
입력한 숫자는 16입니다.
16는 짝수입니다.
함수 join( )
리스트 안의 문자열을 지정한 문자로 연결하여 합쳐줌
print("-".join(["010", "1234", "5678"]))
print(" ".join(["010", "1234", "5678"]))
print("|".join(["010", "1234", "5678"]))
-----------------------------------------------------
010-1234-5678
010 1234 5678
010|1234|5678
**해결2**
number = int(input("정수를 입력하세요> "))
if number % 2 == 0: # 짝수
print("\\n".join(["입력한 숫자는 {}입니다.", "{}는 짝수입니다."]).format(number, number))
else: # 홀수
print("\\n".join(["입력한 숫자는 {}입니다.", "{}는 홀수입니다."]).format(number, number))
-----------------------------------------------------
정수를 입력하세요> 16
입력한 숫자는 16입니다.
16는 짝수입니다.
소괄호로 문자열 연결하기
쉼표 없이 사용해야 함
# 소괄호로 문자 열결
a = (
"나는 "
"여름을 "
"좋아합니다"
)
print(a)
print(type(a))
-----------------------------------------------------
나는 여름을 좋아합니다
<class 'str'>
a = (
"나는 ",
"여름을 ",
"좋아합니다"
)
print(a) # 튜플이 되어버림
print(type(a))
-----------------------------------------------------
('나는 ', '여름을 ', '좋아합니다')
<class 'tuple'>
**해결3**
number = int(input("정수를 입력하세요> "))
if number % 2 == 0: # 짝수
print(("입력한 숫자는 {}입니다.**\\n**"
"{}는 짝수입니다.").format(number, number))
else: # 홀수
print(("입력한 숫자는 {}입니다.**\\n**"
"{}는 짝수입니다.").format(number, number))
-----------------------------------------------------
정수를 입력하세요> 16
입력한 숫자는 16입니다.
16는 짝수입니다.
이터레이터
이터러블 : 반복할 수 있는 것, 내부 요소를 순서대로 꺼내어 쓸 수 있는 객체 ex) 리스트, 딕셔너리, 문자열, 튜플
이터레이터 : 함수 next( )를 사용하여 꺼낼 수 있는 요소
a = [1, 2, 3]
b = reversed(a)
print(b)
print(list(b))
print(list(b)) # 메모리 효율성
-----------------------------------------------------
<list_reverseiterator object at 0x7fdbc68ffa30>
[3, 2, 1]
[]
a = [1, 2, 3]
b = list(reversed(a))
print(b); print(b)
-----------------------------------------------------
[3, 2, 1]
[3, 2, 1]
a = [1, 2, 3]
b = reversed(a)
print(next(b)) # 내부 요소를 순서대로 꺼내어 쓸 수 있음
print(next(b))
print(next(b))
-----------------------------------------------------
3
2
1
함수 만들기 - def 함수 이름( ):
매개변수 만들기
# 일반매개변수 = **값을 순서대로 입력**
def printntimes(value, n):
for i in range(n): # **n은 반드시 정수**
print(value) # **무슨 값이든 상관 없음**
printntimes("안녕", 3)
-----------------------------------------------------
안녕
안녕
안녕
**# 일반 매개변수**
def printntimes(value, n):
for i in range(n): # n은 반드시 정수
print(value) # 무슨 값이든 상관 없음
printntimes("안녕", 3)
-----------------------------------------------------
안녕
안녕
안녕
가변 매개변수 함수
사용시 주의점
# 가변매개변수 = 입력할 수 있는 값의 개수 제한이 없음
# 일반매개변수 뒤에 와야 함
def printntimes(n, * values):
for i in range(n): # n은 반드시 정수
for j in values:
print(j)
printntimes(3, "안녕", "파이썬", "재밌니")
-----------------------------------------------------
안녕
파이썬
재밌니
안녕
파이썬
재밌니
안녕
파이썬
재밌니
기본 매개변수와 가변 매개변수
키워드 매개변수
기본 매개변수와 가변 매개변수를 함께 사용하기 위한 방법
매개변수 이름을 지정해서 입력하는 매개변수
위치가 아닌 키워드(매개변수 이름 직접 입력)로 전달하는 방식으로 사용
위치 매개변수 전달 방식 : 매개변수를 순서대로 입력
주의할 점
# 키워드 매개변수를 사용하면 좋은 점
# 순서 고려하지 않아도 됨
def test(a, b = 3, c = 4):
print(a + b + c)
# 1) 기본 형태로 사용 = 매개변수 순서대로 입력
test(2, 4, 6)
-----------------------------------------------------
12
# 2) 키워드 매개변수로 입력
test(a = 2)
-----------------------------------------------------
9
# 3) 키워드 매개변수 순서를 바꿔 입력
test(b = 4, c = 7, a = 2)
-----------------------------------------------------
13
# 4) 키워드 매개변수 일부만 사용
test(a = 2, c = 7)
-----------------------------------------------------
12
test(2, c = 7)
-----------------------------------------------------
12
함수의 결과[반환값, 리턴값]
자료 없이 리턴
# 리턴 = 반환값, 리턴값 = 함수 적용 결과
# 1) 자료 없이 리턴
def return_test():
print("A")
return # 여기까지 실행
print("B")
return_test()
-----------------------------------------------------
A
자료와 함께 리턴
# 2) 자료와 함께 리턴
def return_test():
return ("B")
return_test()
-----------------------------------------------------
B
# 가장 일반적인 방식
def return_test():
a = 3 + 2
return (a)
return_test()
-----------------------------------------------------
5
아무것도 리턴하지 않기
# 3) None 리턴
def return_test():
return
a = return_test()
print(a)
-----------------------------------------------------
None
**입력한 값을 모두 더하는 함수**
# 일반매개변수
def sum_all(start, end):
output = 0
for i in range(start, end + 1):
output += i
return output
# 일반매개변수로 사용 = 순서대로 입력
sum_all(1, 3)
-----------------------------------------------------
6
# 키워드 매개변수로 사용 = 순서 상관 없음
sum_all(start = 1, end = 3)
-----------------------------------------------------
6
sum_all( end = 3, start = 1)
-----------------------------------------------------
6
# 기본매개변수
# 간격을 추가해서 합계
def sum_all(start = 1, end = 10, step = 2):
output = 0
for i in range(start, end + 1, step):
output += i
return output
sum_all()
-----------------------------------------------------
25
# 일반매개변수로 사용 = 순서대로 입력
sum_all(1, 5, 2)
-----------------------------------------------------
9
# 키워드 매개변수로 사용 = 순서 상관 없음
sum_all(start = 1, end = 5, step = 2)
-----------------------------------------------------
9
sum_all(step = 2, start = 1, end = 5)
-----------------------------------------------------
9
# 키워드 매개변수 일부만 사용
sum_all(start = 1, step = 2)
-----------------------------------------------------
25
재귀함수
반복문으로 팩토리얼 구하기
# 팩토리얼
# 반복문으로 구현
def factorial(n):
output = 1 # 초기값 설정
for i in range(1, n + 1):
output *= i
return output
print(factorial(1))
print(factorial(2))
print(factorial(3))
-----------------------------------------------------
1
2
6
재귀함수로 팩토리얼 구하기
# 재귀함수로 구현
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
# n = 3
# 3 * factorial(2)
# 3 * 2 * factorial(1)
# 3 * 2 * 1 * factorial(0)
# 3 * 2 * 1 * 1 = 6
print(factorial(1))
print(factorial(2))
print(factorial(3))
-----------------------------------------------------
1
2
6
피보나치 수열
# 피보나치 수열 = 앞의 두 숫자를 합한 것이 다음 숫자
def fibonacci(n):
if n == 1 :
return 1
elif n == 2 :
return 1
else :
return fibonacci(n-1) + fibonacci(n-2)
# n = 3
# f(3) = f(2) + f(1) = 1 + 1 = 2
# n = 4
# f(4) = f(3) + f(2) = 2 + 1 = 3
print(fibonacci(1))
print(fibonacci(2))
print(fibonacci(3))
print(fibonacci(4))
print(fibonacci(5))
-----------------------------------------------------
1
1
2
3
5
print(fibonacci(25)) # 같은 계산 반복하는 문제 발생
-----------------------------------------------------
75025
키워드 global
파이썬에서는 함수 내부에서 외부에 있는 변수 참조하지 못함
global을 사용하면 함수 내부에서 외부 변수 참조할 수 있음
# 재귀 함수 사용 횟수 계산
# 함수 밖에 있는 변수 참조하기 위해서 global 키워드가 필요
count = 0
def fibonacci(n):
global count
count += 1
if n == 1 :
return 1
elif n == 2 :
return 1
else :
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(25))
print(count)
-----------------------------------------------------
75025
150049
UnboundLocalError : 키워드 global 없이 외부 변수 참조하면 발생하는 에러
# global 키워드가 없는 경우
count = 0
def fibonacci(n):
count += 1
if n == 1 :
return 1
elif n == 2 :
return 1
else :
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(25))
print(count)
-----------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-34-b9bbcc4aa2a4> in <cell line: 11>()
9 else :
10 return fibonacci(n-1) + fibonacci(n-2)
---> 11 print(fibonacci(25))
12 print(count)
<ipython-input-34-b9bbcc4aa2a4> in fibonacci(n)
2 count = 0
3 def fibonacci(n):
----> 4 count += 1
5 if n == 1 :
6 return 1
UnboundLocalError: local variable 'count' referenced before assignment
메모화