numbers = (0, 1, 2, 3, 4, 5)
print(numbers, sep=',')
print(*numbers, sep=',') # *의 기능은 시퀀트 타입의 각 아이템을 언팩킹하는 것
print(0, 1 ,2, 3, 4, 5, sep=',') #이 라인에서 튜플이 언팩킹 됨을 보여줌
print('-' * 40)
# * 를 시퀀스 타입을 언팩킹 하는데 쓸 수 있겠지만, 실제로는 그런 방법보다 역으로 사용하는게 더 효과적인 방법임:
# 함수 파라미터가 언팩킹될 시퀀스임을 역으로 미리 보여주는게 바로 그 방법.
def test_star(*args): # *args이 unpacked tuple임을 선제적으로 말해주고 가는것임
print(args) # 위에서 *표시로 unpack임을 명시했으니 이 라인에서의 arg는 그냥 기본pack되어있는 튜플임
for x in args:
print(x)
test_star(0, 1, 2, 3, 4, 5)
print() #아무런 설정을 심어놓은게 없어서 그냥 기본값 print가 되었기 때문에 출력값 공백임
test_star() #14번 패킹된 튜플이 나오게됨
def banner_text(text): #return 값이 없고 행동만 하는 함수임
screen_width = 80
if len(text) > screen_width - 4:
print("Oops,")
print("the text is too long to fit in the specified width")
if text == "*":
print("*" * screen_width)
else:
centred_text = text.center(screen_width - 4)
output_string = "**{0}**".format(centred_text)
print(output_string)
banner_text("*")
banner_text("All the colors and personalities")
banner_text("You can't see right through what I truly am")
banner_text("You are hurting me, without noticing")
banner_text("I'm so so broke like someone just robbed me")
banner_text("I have much memories of getting more weaker")
banner_text("*")
#다른 예시, none 리턴됨
numbers = [4, 2, 7, 5, 1, 2, 3]
print(numbers.sort()) #sort 메쏘드는 그냥 action만 하는 기능을 지님, 리턴하는 메소드가 아님.
def func(p1, p2, *args, k, **kwargs):
print("positional-or-keyword:...{}, {}".format(p1, p2))
print("var-positional (*args):..{}".format(args))
print("keyword..................{}".format(k))
print("var-keyword:............{}".format(kwargs))
func(1, 2, 3, 4, 5, 9, k=6, key1=7, key2=8)
#중간에 k를 삭제해보면 파라미터가 기대하는 5번라인의 값이 부재해서 코드가 crash된다.
#파라미터 기입 순서를 제대로 해서 오류가 어디서 났는지 파악하는게 중요!
4.1 함수 예제 풀어보기 - 피보나치 수열
def fibonacci(n: int) -> int: #function annotation (n: 인자타입): -> (반환타입)
"""Return the `n`th Fibonacci number, for positive `n`."""
if 0 <= n <= 1:
return n
n_minus1, n_minus2 = 1, 0 #전, 전전값을 지칭하는 것
result = None
for f in range(n - 1):
result = n_minus2 + n_minus1
n_minus2 = n_minus1
n_minus1 = result
return result
for i in range(36):
print(i, fibonacci(i))
4.2 함수 예제 풀어보기 - 팩토리얼
# 일반 풀이법
def factorial(n: int) -> int:
"""Return n! (0! is 1)."""
if n <= 1:
return 1
result = 2
for x in range(3, n + 1):
result *= x
return result
for i in range(36):
print(i, factorial(i))
# recursive 풀이법 위랑 비교해서 어느게 더 나은건가? 고민해보기
def factorial(n: int) -> int:
"""
Return n! (0! is 1).
Valid for `n` in the range 0 to 998 (inclusive).
Larger values of `n` will cause a RecursionError.
"""
if n <= 1:
return 1
return n * factorial(n - 1)
for i in range(36):
print(i, factorial(i))
4.3 함수 예제 풀어보기 - Plaindrome
def is_palindrome(string):
# backwards = string[::-1]
# return backwards == string
return string[::-1].casefold() == string.casefold() #위 두줄보다 더 짧고 효율적인 코드
word = input("Please enter a word to check: ")
if is_palindrome(word):
print("'{}' is a palindrome".format(word))
else:
print("'{}' is not a palindrome".format(word))