반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.




사전 데이터 타입

리스트와 마찬가지로 사전은 많은 값의 모음이다.
리스트의 인덱스와는 달리 사전의 인덱스는 다양한 데이터 유형을 사용할 수 있다.
사전의 인덱스를 키라고 하며, 키와 그에 연관된 값을 키-값 쌍이라고 한다.
코드에서 사전은 중괄호 {}로 정의된다.


사전과 리스트

리스트와는 달리 사전의 아이템들은 순서가 없다.
사전은 순서가 없지만 키로 임의의 값을 쓸 수 있다.


사전 메소드

 메소드 

 기능 

 keys()

 사전의 키를 튜플로 돌려준다.

 values()

 사전의 값을 튜플로 돌려준다.

 items()

 사전의 키 - 값 쌍을 튜플로 돌려준다.

 get()

 키에 해당하는 값을 가져온다. 존재하지 않을 때 돌려줄 값을 설정할 수 있다.

 setdefault()

 특정 키에 값이 존재하지 않는 경우에 돌려줄 값을 설정한다. 





반응형

'프로그래밍 > Python' 카테고리의 다른 글

7. 정규 표현식  (0) 2019.01.09
6. 문자열 다루기  (0) 2019.01.08
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.




리스트 


- 순서를 가진 여러 가지 값의 배열

- [] (대괄호) 로 표기

- 쉼표를 구분자로 하여 리스트에 아이템들을 초기화 할 수 있음

- 아이템들의 타입이 달라도 상관 없음


>>> [1, 2, 3]

>>> ['a', 'b', 'c']

>>> [1, True, 'A', [1, 2, 3]]



인덱스를 이용해서 리스트의 개별 아이템 얻기


리스트 이름에 대괄호를 사용해서 0부터 시작하는 정수로 순차적인 접근이 가능하다.


>>> test = ['a', 'b', 'c']

>>> test[0]

'a'

>>> test[1]

'b'

>>> test[2]

'c'


리스트 값의 개수를 초과하는 인덱스를 사용하면 IndexError 오류가 발생한다.


인덱스는 정수값만 가능하며, 그 이외의 타입에는 TypeError 오류가 발생한다.


음수 인덱스도 사용이 가능하며, -1은 리스트의 마지막 값을 뜻하고, -2는 리스트의 끝에서 두 번째 값을 의미힌다.



부분 리스트


- 슬라이스를 이용해서 부분 리스트를 얻을 수 있다.

- 리스트 이름 [시작 인덱스 : 포함하지 않는 마지막 인덱스] 으로 정의 한다.


>>> test = ['a', 'b', 'c']

>>> test[0:3]

['a', 'b', 'c']

>>> test[0:2]

['a', 'b']

>>> test [1:3]

['b', 'c']

>>> test [0:-1]

['a', 'b', 'c']


콜론(:)을 기준으로 앞의 값을 비워두면 앞의 값은 0으로 처리된다.

콜론(:)을 기준으로 뒤의 값을 비워두면 뒤의 값은 리스트 길이 혹은 -1로 처리된다.



리스트 변경


인덱스를 지정해서 할당을 하면 값이 변경된다.


>>> test = [1, 2, 3]

>>> test[0] = 'a'

>>> test

['a', 2, 3]



리스트 병합


>>> [1, 2, 3] + ['a', 'b', 'c']

[1, 2, 3, 'a', 'b', 'c']


>>> ['a', 'b'] * 2

['a', 'b', 'a', 'b']



리스트 값 제거


del 명령어를 사용한다.


>>> test = [1, 2, 3]

>>> del test[1]

>>> test

[1, 3]



다중 할당


한 줄의 코드로 리스트 안에 있는 값을 여러 변수에 할당한다.


>>> test = [1, 2, 3]

>>> a, b, c = test

>>> a

1

>>> b

2

>>> c

3



리스트 메소


메소드는 함수와 기능은 같지만 객체 내에 정의되어 있는 멤버 함수를 메소드라고 한다.


 메소드 

 기능 

 index()

 리스트 내에 있는 값의 첫번째 인덱스를 리턴한다. 

 append()

 리스트에 새 값을 마지막에 추가한다.

 insert()

 리스트에 새 값을 지정한 인덱스에 추가한다.

 remove()

 리스트 내에서 값을 찾아서 첫번째로 나오는 값을 제거한다. 

 sort()

 리스트 안의 값을 정렬한다. (reverse 키워드로 역순 정렬 가능)



튜플 (tuple)


- 리스트와 비슷하지만 한 번 정의되면 변경이 불가능하다.

- () 로 표기



리스트와 튜플의 전환


list() 함수를 이용하면 튜플에서 리스트를 생성해 준다.


>>> list(('a', 'b', 'c'))

['a', 'b', 'c']


tuple() 함수를 이용하면 리스트에서 튜플을 생성해 준다.


>>> tuple([1, 2, 3])

(1, 2, 3)



참조 전달


정수형, 숫자형, 문자열 값을 매개 변수로 함수를 호출하는 경우, 해당 값은 파라미터 변수로 복사된다.

그 외의 타입을 매개 변수로 함수를 호출하면, 해당 타입의 참조가 파라미터로 전달된다. 

(참조 값은 복사되어도 같은 실제 값을 가리키게 된다.)



copy() vs deepcopy()


리스트 등의 데이터의 사본을 만들기 위해서는 copy 라이브러리에 있는 copy() 혹은 deepcopy() 명령어를 사용할 수 있다.

리스트의 모든 아이템이 정수형, 숫자형, 문자열 값으로만 되어 있다면 copy() 를 쓰는 것으로 충분하지만, 아이템에 다른 리스트나 튜플 등이 들어 있다면 deepcopy() 를 사용해야 제대로 사본이 생성된다. 




반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
3. 함수  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
1. 파이썬 기초  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



함수



파이썬에서는 여러 가지 내장 함수를 제공하지만, 필요한 함수를 직접 만들어 쓸 수도 있다.


함수를 사용하는 목적은, 코드의 묶음을 여러 차례 실행시키는 것이다. 함수를 사용하지 않으면 필요할 때마다 매번 코드를 복사해서 써야 하는데, 중복되는 부분이 많아지면, 코드의 가독성이 떨어지고, 디버깅도 어려워진다. 중복을 제거하면 프로그램은 짧아지고, 읽기 쉽고, 고치기 쉬워진다.



함수 정의 하기


def 구문을 이용해서 함수를 정의한다.


def hello():
    print ('Hello')



함수에 매개변수 추가하기


def hello(name):
    print ('Hello', name)



반환값과 return 문


def hello(name):
    return 'Hello ' + name


None 값


파이썬에는 None 이라는 값이 있다. 이는 값이 없음을 의미한다. 



키워드 매개변수와 print()


print() 함수에 다음과 같은 매개 변수 사용이 가능하다.


print ('Hello', end='')            # 출력 후 줄바꿈을 하지 않음
print ('a', 'b', 'c', sep=',')     # 출력시 구분자로 ',' 로 사용



지역 및 전역 범위


- 전역 범위의 코드는 지역 변수를 사용할 수 없다.

- 지역 범위는 전역 변수를 사용할 수 있다.

- 함수의 지역 범위 안에 있는 코드는 다름 지역 범위의 변수를 사용할 수 없다.

- 범위가 서로 다르다면 같은 이름의 지역 변수를 사용할 수 있다.



global 문


함수 안에서 전역 변수를 수정해야 하는 경우 사용



예외 처리


try: ~ except: 구문을 이용하여 예외를 처리한다.


def test(div):
    try:
        return 100 / div
    except ZeroDivisionError:
        print ('Error')










반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
1. 파이썬 기초  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.

 


비교 연산자


 연산자 

 의미 

 ==

 같음 

 !=

 같지 않음

 <

 작다

 >

 크다

 <=

 작거나 같다

 >=

 크거나 같다



And 연산


 표현식

 결과 

 True and True

 True 

 True and False

 False 

 False and True

 False 

 False and False

 False 



Or 연산


 표현식

 결과 

 True or True

 True 

 True or False

 True 

 False or True

 True

 False or False

 False 



Not 연산


 표현식

 결과 

 not True 

 False

 not False

 True



흐름 제어 요소


흐름 제어문은 조건으로 시작하고, 코드 블록이 항상 그 뒤를 뒤따른다.



조건


조건은 항상 True 혹은 False 인 하나의 Bool 값으로 평가된다. Bool 표현식은 모두 조건으로 간주될 수 있다.



코드 블록


파이썬 코드의 여러 줄을 블록으로 묶을 수 있다. 블록의 시작과 끝은 들여쓰기를 통해 표시한다. 다음은 블록에 대한 규칙이다.


- 블록은 들여쓰기가 증가할 때 시작된다.

- 블록은 다른 블록을 포함할 수 있다.

- 블록은 들여쓰기가 없거나 그 블록을 포함한 블록의 들여쓰기 수준으로 감소할 때 끝난다.



흐름 제어문


 if

 조건을 평가하여 True 일 때, 다음에 오는 코드 블록을 실행

 else

 if 와 함께 쓰이며, 조건이 False 일 때, 다음에 오는 코드 블록을 실행

 elif

 if 와 함께 쓰이며, 다시 조건을 평가하여 True 일 때, 다음에 오는 코드 블록을 실행

 while

 조건이 True인 동안, 코드 블록을 반복 실행

 break

 반복문의 코드 블록에서 벗어남

 continue

 반복문에서 continue 구문 이하의 코드를 실행하지 않고, 다음 반복 코드를 실행

 for

 정해진 횟수 동안 코드 블록을 실행



반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
1. 파이썬 기초  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



수학 연산자 (우선순위 순)


 **

 지수 계산

 %

 나머지

 //

 몫의 정수 부분

 /

 나누기

 *

 곱하기

 -

 빼기

 +

 더하기



기본 자료형


정수, 부동소수점 숫자, 문자열



문자열 연산


문자열 합

>>> 'Hello' + ' ' + 'World'

'Hello World'


문자열 곱 (정수만 가능)

>>> 'Hello' * 3

HelloHelloHello


문자열에 숫자를 연결하려면, 숫자를 명시적으로 형변환해야 한다.

>>> 'Hello' + str(123)

Hello123



변수 이름 규칙


- 한 단어로 되어야 함

- 문자, 숫자, 밑줄 문자 사용 가능

- 첫 글자는 숫자여서는 안됨



기본 함수


 print() 

 괄호 안의 문자열을 화면에 표시한다.

 input()

 사용자의 키보드 입력을 받아온다. (Enter 키로 입력)

 len()

 문자열의 길이 혹은 리스트 항목의 개수를 돌려준다. 

 str()

 전달되는 값을 문자열로 변환해준다.

 int()

 전달되는 값을 정수로 변환해준다.

 float()

 전달되는 값을 부동 소수점 값으로 변환해준다.



반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
반응형

보통 팩토리얼의 경우 숫자가 너무 커지기 때문에 정확한 값을 계산할 수 없는 경우가 많습니다.


하지만 팩토리얼 값을 소인수 분해했을 때, 지수가 어떻게 되는 지는 계산이 가능합니다.



다음 링크에서 자세한 설명을 보실 수 있습니다.


https://janmr.com/blog/2010/10/prime-factors-of-factorial-numbers/



특정 소수에 대한 지수를 계산하는 코드는 다음과 같습니다.


import math

def factorialExp(n, p):
    tRet = 0
    tVal = int(math.log(n, p))
    for i in xrange(1, tVal+1):
        tRet += n // p**i
    return tRet


반응형

'알고리즘 (기초)' 카테고리의 다른 글

Pell's Equation  (0) 2020.04.28
Combination 소인수 분해  (0) 2019.10.04
유클리드 호제법을 이용한 최대공약수 (GCD) 구하기  (0) 2019.08.28
오일러 피 함수  (0) 2018.08.30
에라토스테네스의 체  (0) 2018.08.17
반응형

소수 계산과 함께 많이 쓰이는 오일러 피 함수 입니다.


피 함수는 자신보다 작은 양수 중에서 자기 자신과의 최대 공약수가 1인 숫자가 몇 개인지를 나타냅니다.


따라서 소수 p의 경우 모든 숫자가 서로 소 이기 때문에 다음과 같이 쓸 수 있습니다.


φ(p) = p - 1



그리고 p와 q가 서로 소인 경우 다음과 같은 식이 성립합니다.


φ(pq) = φ(p)φ(q)



자세한 설명은 다음 링크를 참고하세요.


https://en.wikipedia.org/wiki/Euler%27s_totient_function


def totient(n):
    phi = int(n > 0 and n)
    for p in range(2, int(n ** .5) + 1):
        if not n % p:
            phi -= phi // p
            while not n % p:
                n //= p
    if n > 1: phi -= phi // n
    return phi


반응형
반응형

수학에서 에라토스테네스의 체는 소수를 찾는 방법입니다. 고대 그리스 수학자 에라토스테네스가 발견하였습니다.

 

방법은 다음과 같습니다.

 

1. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열합니다.

2. 2는 소수이므로 소수 리스트에 적어두고,

3. 자기 자신을 제외한 2의 배수를 모두 지웁니다.

4. 남아 있는 수 가운데 3은 소수 이므로 소수 리스트에 적어두고,

5. 자기 자신을 제외한 3의 배수를 모두 지웁니다.

6. 위의 과정을 반복하면 구하는 구간의 모든 소수를 찾을 수 있습니다.

 

다음은 파이썬을 이용한 예시이며, 소수인지를 체크할 수 있는 배열 정보와 소수 리스트를 리턴해 줍니다.

 

def findPrimes(n):
        tPrimes = [2]
        tArr = [True] * (n+1)
        tArr[0], tArr[1] = [False] * 2

        for i in xrange(4, n+1, 2):
                tArr[i] = False

#        for i in xrange(3, n+1, 2):
#                j = 3
#                while True:
#                        tmp = i * j
#                        if (tmp > n):
#                                break
#                        tArr[tmp] = False
#                        j += 2

        for i in xrange(3, int(n**0.5)+1, 2):
            if (tArr[i]):
                for j in xrange(i**2, n+1, 2*i):
                    tArr[j] = False

        for i in xrange(3, n+1, 2):
                if (tArr[i]):
                        tPrimes.append(i)

        return tArr, tPrimes

 

반응형

'알고리즘 (기초)' 카테고리의 다른 글

Pell's Equation  (0) 2020.04.28
Combination 소인수 분해  (0) 2019.10.04
유클리드 호제법을 이용한 최대공약수 (GCD) 구하기  (0) 2019.08.28
팩토리얼에서의 지수 계산  (0) 2018.09.09
오일러 피 함수  (0) 2018.08.30

+ Recent posts