2020년 8월 22일 토요일

[파이썬] 윤성우의 열혈 파이썬: 중급편, Story 15. 함수 호출과 매개변수 선언에 있어서 *와 **의 사용 규칙

Untitled
In [1]:
# -*- encoding : utf-8 -*-

# 함수 호출 시, dict 매개변수 앞에 ** 를 사용하여 dict의 values 를 전달할 때 주의하여야 할 사항
#
# 1) 함수 정의에 있는 매개변수의 갯수와
#    함수 호출 시, 전달하는 dict 매개 변수의 구성 요소 갯수가 같아야 함.   ( 쉬움 )
#
# 2) 함수 정의에 있는 매개변수의 이름들과
#    함수 호출 시, 전달하는 dict 매개 변수의 key 이름들이 같아야 함. ( 책의 앞 부분에 설명되어 있으나 91 page 에서 강조가 안 되어 있음. )
#    
#    who_2 함수의 정의에 매개변수 이름은 ( c, b, a ) 임.
#
#    해당 함수 호출 시, 
#    who_2( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )
#    key 이름과 동일한 매개변수에 각 value 가 전달됨.



def who ( a, b, c):
    print( a, b, c)
    print( "1st ", a)
    print( "2nd ", b)
    print( "3rd ", c, "\n------\n")

def who_2 ( c, b, a):
    print( c, b, a)
    print( "1st ", c)
    print( "2nd ", b)
    print( "3rd ", a, "\n------\n")


list_3 =  [ 11, 12, 13 ] 
who( *list_3 )

who( *[21, 22, 23 ] )
who( *(21, 22, 23 ) )
who( * "abc" )

who( * [ 1, 2, [ 3, 4, 5 ] ] )

# dictionary 를 전달할 경우,
# func( * dict ) 하면 , key 값이 풀어서 매개변수에 할당한다. 
who( *{ 'x' : -1, 'y' : -2, 'z' : -3 } )

# dictionary 를 전달할 경우,
# func( ** dict ) 하면 , value 값이 풀어서 매개변수에 할당한다. 
# who( **{ 'x' : -1, 'y' : -2, 'z' : -3 } )  # 이렇게 하면 dict의 key 가 함수 매개변수 이름과 달라서 안 된다.
who  ( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )


who_2( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )
11 12 13
1st  11
2nd  12
3rd  13 
------

21 22 23
1st  21
2nd  22
3rd  23 
------

21 22 23
1st  21
2nd  22
3rd  23 
------

a b c
1st  a
2nd  b
3rd  c 
------

1 2 [3, 4, 5]
1st  1
2nd  2
3rd  [3, 4, 5] 
------

x y z
1st  x
2nd  y
3rd  z 
------

-1 -2 -3
1st  -1
2nd  -2
3rd  -3 
------

-3 -2 -1
1st  -3
2nd  -2
3rd  -1 
------

2020년 8월 7일 금요일

주피터 노트북 구동 시, chrome 새 창 연결시키기.

Windows 10 에서 

Jupyter notebook 이나

jupyterlab 을 구동시킬 때, 


기본적으로는 Microsoft Edge 로 창이 띄워지고,

여기서 시작된다. 


Window 에서 default browser를 변경시키지 않고,

설정만으로 Edge 가 아닌 chrome 을 동작시키려면,

 jupyter_notebook_config.py 에서

와 같이 기입해 주면 된다. 


--new-window 옵션을 주어서

이미 구동되어

여러 창이 띄워져 있는 chrome 창이 아니라,

새로운 chrome 을 새로 띄우고, 

여기에 jupyter notebook을 띄워 준다. 



2020년 7월 18일 토요일

[python ] find 와 rfind 사용 예제

str = "what isAisBisCis"

print( "location : ", str.find("is") )
print("\n\n")


############ finding from first #####################
index = -1
while True:
    index = str.find( "is", index + 1 )


    if (index == -1) :
        break

    print("num : {:3d} : {}".format( index, str[index:] )  )

print("\n\n")
location :  5



num :   5 : isAisBisCis
num :   8 : isBisCis
num :  11 : isCis
num :  14 : is



In [2]:
print( "location : ", str.rfind("is"                        ) )
print( "location : ", str.rfind("is", 0         , len(str)  ) )



############ finding from first #####################
index =len(str) 
while True:
    index = str.rfind( "is", 0, index )


    if (index == -1) :
        break

    print("num : {:3d} : {}".format( index, str[index:] )  )

# num :  14 : is
# num :  11 : isCis
# num :   8 : isBisCis
# num :   5 : isAisBisCis
location :  14
location :  14
num :  14 : is
num :  11 : isCis
num :   8 : isBisCis
num :   5 : isAisBisCis

2020년 5월 28일 목요일

javascript 의 ==, === , if 연산자 비교

https://dorey.github.io/JavaScript-Equality-Table/

2020년 5월 9일 토요일

k * nCk = n * ( n-1 C k-1) : 공식 연상 방법

​ 
k * nCk = n * ( n-1 C k-1)

해당 식의 증명은

https://www.youtube.com/watch?v=E0T5D5vczhg
의 10:00 에 수악중독님이 설명해 주심.

쉽게 연상하는 방법도 수악 중독님이 댓글에 설명해 주심.

n명 중 k명의 임원진을 뽑고, 그 중에 한 명을 대표로 결정하는 방법이 nCk * k 가지가 있다고 볼 수 있죠. 아니면 대표를 한 명 먼저 뽑고, 나머지 k-1 명의 임원진을 뽑는다고 본다면 경우의 수는 n * (n-1 C k-1) 이 됩니다.


이렇게 빨리 답변 주셔서 감사합니다. 선생님께서 알려주신 방법대로 임원진 k 명을 뽑고, 임원진 중 1명은 대표인 이 경우를 생각하니까, 1) 임원진 k명 먼저 선택하고, 선택된 k명의 임원진에서 대표 1명을 선택하면, nCk * kC1 = nCk * k = k * nCk 2) 대표이자 임원이 될 사람을 먼저 1명 선택하고, 나머지 n-1 명에서 k-1 명의 임원진 선택 nC1 * (n-1 C k-1 ) = n * (n-1 C k-1 ) 선생님 덕분에 이 공식 아주 오랜 시간 잊지 않을 것 같고, 잊더라도, 금방 다시 생각해 낼 수 있을 것 같습니다. 정말 감사합니다 X 10!

2020년 5월 8일 금요일

k (n C k )^2 정리

https://www.youtube.com/watch?v=XQ2IgQs9a-4


이항정리 - 대표유형12

9분 43초 부터...

k (n C k )^2 정리하는 것 복습하기.


또 k * nCk = n *  n-1 C k-1

이것의 단순 증명 말고...
직관적으로 이 정리가 어떤 내용인지 고민해 보기.

2020년 4월 16일 목요일

중복조합을 조합으로 변형하는 것 뒤에 숨어 있는 의미.



https://mathjk.tistory.com/3200?category=399649

https://www.youtube.com/watch?v=RaQ0MpATPxY&feature=youtu.be

수악중독님의 풀이를 보다가 풀이 방법이 아주 신기해서
직접 하나 하나 따져보는 그림을 그려 보다가,

정리를 하다 보니,
지금까지

아래 수식과 같이 중복조합을 조합으로 변환하는 방법은 배웠는데

nHr = n-1+cCr

중복조합을 정말 경우의 수를 하나씩 하나씩 모두 표시해 보는 작업은
한 번도 해 보지 않은 것을 알게 되었다.

노가다 작업을 해보니,
저 위의 식에 숨겨진 의미를 조금 알 것 같고,
그 의미를 파스칼의 삼각형 그림을 보면, 아주 쉽게 설명이 되었다.

중복조합 경우의 수를 따져 볼 때 사용한
구체적인 그림 및 표는
아래 첨부 파일을 다운로드 해서 보아 주세요.
( 다운로드해서 볼 것, chrome 뷰어로 볼 때, 수식이 안 보이는 부분 있음 )
https://drive.google.com/file/d/1Ezo9rkxVvYpZillU2vCxJas9lia20dn8/view?usp=sharing


( 블로그에 정리를 하고 싶은데 수식을 예쁘게 입력하는 게 쉽지 않네 T.T)


정석책에서 배우는 내용으로 쉽게 유도할 수는 있지만,
아래와 같은 방법으로 일반화된 수식은 표시가 되어 있지 않아서
아래와 같이 한 번 정리해 보았다.










시그마가 늘어나도 모두 조합으로 표시가 가능하다.
( 수식 입력이에 nCr 과 같은 표시는 입력이 불가능하고, 괄호로 표시하는 것 밖에 없음. )

참 오묘하다~~

파스칼의 삼각형이 이항계수를 보기 쉽게 해 주고,
이항계수의 특징을 파악하기에 좋은데,

어떻게 보면 시그마의 삼각형이라고 불러도 좋을 것 같다.














그래도 뭔가 본질적인 부분을 완전히 이해하지 못한 것 같다.

일반적인 책들은 이항 정리 계수의 공식은 모두 설명하고 있지만,
그 계수가 계산되는 과정에 대해서 좀 더 핵심적인 원리에 대해서
무릎을 탁 치게 만드는 그런 멋진 설명이 좀 부족한 것 같다.

좀 더 생각해 보자.

나중에 시간이 나면 좀 더 예쁘게 정리하고
좀 더 생각해 보자.



팔로어