memostack
article thumbnail
Python으로 XML-RPC 서버 구축
Language/Python 2021. 3. 26. 14:54

XML-RPC란? XML-RPC는 XML로 인코딩을 하는 RPC(Remote Procedure Call) 프로토콜의 종류 중 하나로, Server와 Client가 통신할때 사용한다. 이때, HTTP 프로토콜로 통신한다. XML-RPC를 사용하면, client에서 server의 프로그램을 마치 로컬에 있는 프로그램을 사용하듯이 원격 실행이 가능하다. 이후에는 좀 더 부가기능을 추가하여 SOAP 프로토콜이 개발되었지만, 단순하고 사용하기 쉬운 XML-RPC를 더 많이 사용하고 있다. (비슷한 프로토콜로는 JSON-RPC가 존재) XML-RPC XML 예시 XML-RPC Call examples.getStateName 40 XML-RPC Response South Dakota REST API vs XML-RP..

article thumbnail
Programmers - 두 개 뽑아서 더하기 (Python 풀이)
Algorithm 2021. 2. 23. 23:00

문제 [문제 설명] 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. [제한사항] numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. [입출력 예] numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 예시 설명은 아래 클릭 더보기 입출력 예 #1 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.) 3 = 2 + 1 입니다. 4 = 1 + 3 입니다. 5 = 1 + 4 = 2 + 3 입니다. 6 = 2 + 4..

article thumbnail
Python 문자와 문자열 다루기
Language/Python 2020. 11. 26. 21:46

문자와 문자열 파이썬에서는 문자와 문자열을 따로 구분하지 않는다. 문자와 문자열을 사용할 때는 홑 따옴표(') 또는 쌍 따옴표 (") 둘 다 사용 가능하다. 문자 위에서 말했듯이 문자와 문자열을 따로 구분하지 않지만, 굳이 문자를 표현하면 문자 한 글자를 따옴표로 감싼다 alphabet_a = 'a' print(alphabet_a) # a alphabet_b = "b" print(alphabet_b) # b print('c') # c print("d") # d 홑 따옴표(')와 쌍 따옴표(") 둘 다 사용 가능하다 문자열 여러 개의 문자를 따옴표로 감싼다. 마찬가지로 홑 따옴표(')와 쌍 따옴표(") 둘 다 사용 가능하다 greet = "Hello, Python!" print(greet) language..

article thumbnail
Python 사칙연산을 통한 실수형 데이터 다루기 (+, -, *, **, /, //)
Language/Python 2020. 11. 26. 21:45

더하기 연산 + num1과 num2라는 변수를 생성하여, 2개의 변수를 더한 값을 print() 함수로 출력한다 수학에서 사용하는 더하기(+)와 동일하다 num1 = 10 num2 = 6 print(num1 + num2) # 16 빼기 연산 - num1 = 10 num2 = 6 print(num1 - num2) # 4 곱하기 연산 * 프로그래밍에서는 곱하기를 x 기호 대신에 * 를 사용한다. 읽을때는 *를 '에스테르크'라고 읽음 num1 = 10 num2 = 6 print(num1 * num2) # 60 제곱 연산 (**) * 1개를 사용하면 단순히 곱하기 연산이지만, ** 2개를 사용하면 제곱(pow) 연산이된다. print(2 ** 4) # 16 2^4 = 2 * 2 * 2 * 2 = 16 나누기 연..

article thumbnail
Windows에 Python 3.7.9 설치하기
Language/Python 2020. 11. 26. 21:42

MacOSX에서 설치하려면 아래 글 참고해주세요 2020/11/26 - [Language/Python] - MacOS에 Python 3.7.9 버전으로 설치하기 MacOS에 Python 3.7.9 버전으로 설치하기 Python을 사용하려면 설치를 먼저 해야하기 때문에, 우선 설치부터 진행해본다. Python3 설치 파일 다운로드 파이썬을 설치하는 방법은 여러가지 방법이 있다. (본 글에서는 파이썬 공식 페이지에서 memostack.tistory.com 윈도우에서 Python 설치하기 아래 사이트에 접속 www.python.org/ Welcome to Python.org The official home of the Python Programming Language www.python.org .msi 인스톨..

article thumbnail
python으로 qrcode 생성기 만들기
Language/Python 2020. 8. 8. 13:41

모듈 다운로드 python 3.4버전 이상 pip install --upgrade pip pip install qrcode Pillow 설치 확인 hong@TaehongcBookPro ~ % python3 Python 3.7.7 (v3.7.7:d7c567b08f, Mar 10 2020, 02:56:16) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import qrcode 코딩 # -*- coding: utf-8 -*- import os import qrcode url = r"https://memostack.tistory.com/" img_form..

article thumbnail
퀵 정렬 (Quick Sort) 알고리즘 (with Python3)
Algorithm 2020. 3. 25. 16:45

퀵 정렬 퀵 정렬(Quick Sort)은 병합 정렬(Merge Sort)과 비슷하게 재귀 호출을 하여 정렬을 한다. 다만 퀵 정렬은 기준점과 미리 비교를 한다는 차이점이 있다. 코딩 아래 코드는 unittest 기반으로 작성되었다. 일반적인 퀵 정렬 # -*- coding: utf-8 -*- import unittest class Exam11(unittest.TestCase): @classmethod def setUp(cls): pass def test_quick_sort(self): """일반적인 퀵 정렬""" def _quick_sort(data, start, end): # 종료 조건: 정렬을 할 원소가 1개 이하인 경우 if start >= end: return # 피봇 설정 (편의상 맨 마지막 원..

article thumbnail
병합 정렬 (Merge Sort) 알고리즘 (with Python3)
Algorithm 2020. 3. 25. 16:44

병합 정렬 병합 정렬(Merge sort)은 그룹을 반으로 나눈다음 합칠때 크기에 맞게 합친다. 이 과정을 재귀적으로 수행한다. (그림 참고) 코딩 아래 코드는 unittest 기반으로 작성되었다. 일반적인 병합 정렬 # -*- coding: utf-8 -*- import unittest class Exam10(unittest.TestCase): @classmethod def setUp(cls): pass def test_merge_sort(self): """일반적인 병합 정렬""" def _merge_sort(group): # 재귀 종료 조건: 그룹이 없을때 n = len(group) if n

article thumbnail
삽입 정렬 (Insertion Sort) 알고리즘 (with Python3)
Algorithm 2020. 3. 21. 17:36

삽입 정렬 삽입 정렬(Insertion Sort)은 첫번째 원소부터 하나하나 차례대로 비교해가면서, 자신보다 큰 값이 나타나면 그 큰 값 앞에 놓는 방식이다. 예를들어, [2, 4, 5, 1, 3] 이 있을때, 비교 대상 2 / 정렬 후 [2, 4, 5, 1, 3] 비교 대상 4 / 정렬 후 [2, 4, 5, 1, 3] 비교 대상 5 / 정렬 후 [2, 4, 5, 1, 3] 비교 대상 1 / 정렬 후 [1, 2, 4, 5, 3] 비교 대상 3 / 정렬 후 [1, 2, 3, 4, 5] 코딩 일반적인 삽입 정렬 unittest 기반으로 작성되었다. test_insertion_sort() 를 참고한다. # -*- coding: utf-8 -*- import unittest class Exam09(unittes..

article thumbnail
피보나치 알고리즘과 메모이제이션 (with Python3)
Algorithm 2020. 3. 17. 20:05

피보나치 알고리즘 피보나치(Fibonacci) 수열은 첫번째와 두번째 원소가 0 과 1이고, 세번째 원소부터는 이전 원소 두 개의 합인 수열을 말한다. 예를들어, 0, 1, 1, 2, 3, 5, 8, 13, 21, ... Python3 코드 아래 코드는 unittest 기반으로 작성했다. 전체 로직은 fibo() 메소드를 참고한다. # -*- coding: utf-8 -*- import unittest class Exam06(unittest.TestCase): @classmethod def setUp(cls): pass def fibo(self, k): if k == 1: return 0 elif k == 2: return 1 return self.fibo(k-1) + self.fibo(k-2) def ..

article thumbnail
최대 공약수와 유클리드 알고리즘 (with Python3)
Algorithm 2020. 3. 17. 19:09

최대공약수 구하기 1을 제외한 공통 약수 중 최댓값을 최대 공약수(Greater common factor)라고 한다. 예를들어, 4 와 6 의 최대공약수는 2 이다. 15와 40의 최대 공약수는 5 이다. 최대 공약수는 두 수 중 작은 수보다 클 수 없다. 따라서 초기값을 두 수중 작은 값으로 하여 1씩 감소하면서 두 수를 나눴을때 나머지가 없는지 확인한다. 예를들어, 4와 6 중 4가 작다. 4와 6을 4로 나눈다. (4는 나누어 떨어지지만, 6은 나누어 떨어지지 않는다) 3으로 나눈다. (4는 나누어 떨어지지 않는다, 6은 나누어 떨어진다) 2로 나눈다. (둘 다 나누어 떨어진다) 따라서 2가 최대 공약수이다. Python 코드 아래 코드는 unittest 기반으로 작성했다. 주요 로직은 gcd() ..

article thumbnail
팩토리얼 구하기 알고리즘 (with Python3)
Algorithm 2020. 3. 16. 22:10

팩토리얼 문제 1부터 n 까지의 곱, 팩토리얼(factorial)을 구하기 1! = 1 2! = 1 * 2 3! = 1 * 2 * 3 예제. 팩토리얼 구하기 아래 예제는 unittest 기반으로 작성했습니다. 그렇다고 알고리즘을 파악하는데 어려움은 없을것 같습니다. 팩토리얼을 구하는 방법에는 2가지 방법이 있다. test1(): 단순히 for 문을 이용하여 팩토리얼을 구한다. test2(): 재귀함수(recursive)를 이용하여 팩토리얼을 구한다. n! = n * (n-1)! 라는 점화식을 이용하여 재귀함수로 풀 수 있다. # -*- coding: utf-8 -*- import unittest class Exam04(unittest.TestCase): @classmethod def setUp(cls):..

article thumbnail
zipfile 모듈로 압축하기
Language/Python 2020. 3. 10. 10:50

zipfile 모듈은 Python 3.3 이상부터 지원해준다. 파일 압축 본 예제에서는 디렉토리와 그 하위 모든 파일들을 압축하고 있다. src_path = r"압축하고 싶은 디렉토리 경로" base_path, dir_name = os.path.split(src_path) trg_zip_name = dir_name + ".zip" cur_path = os.getcwd() # 현재 디렉토리 경로 변경 os.chdir(base_path) try: with zipfile.ZipFile(trg_zip_name, "w", zipfile.ZIP_DEFLATED) as f: for base_dir, dirs, files in os.walk(src_path): for file in files: # 상대 경로를 구한다...