Python 140

python 딕셔너리에 관하여, 파이써닉하게 코드 짜기

http://khanrc.tistory.com/entry/PyCon-%EC%9C%84%EB%8C%80%ED%95%9C-dict-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 에서 내용을 가져와서 정리했습니다. 문제시 바로 삭제하겠습니다 댓글달아주세요!. 파이썬의 기본 문법에 대해서는 진짜 거의 모르는게 없다고 생각했는데... 저 블로그를 보면서 아직 부족함을 느꼈습니다. 1. 키와 값 바꾸기. 간단하게 아래와 같은 딕셔너리 컴프리핸션 으로 되네요... 리스트로 만들어서 dict()함수로 덮어씌우고 그랬었는데.. # -*- encoding: cp949 -*- a = {'a': 1, 'c': 3, 'b': 2} print ..

다차원 리스트를 만들고 복사하는 것에 대해서.

파이썬에서 다차원 리스트는 여러가지 방법으로 만들수 있다. 5칸의 1차원 리스트는 아래와 같이 만들수 있다. a = [0 for i in xrange(5)] 또는 a = [0]*5. 5*5칸의 2차원 리스트는 아래와 같이 만들수 있다. a = [[0 for j in xrange(5)] for i in xrange(5)] 또는 a = [[0]*5]*5 파이썬을 많이 안써본 분들은 오 후자가 더 짧고 좋네. 전자는 버리고 후자만 외워둬야지. 하겠지만 난 주로 전자의 방법을 쓴다. 후자는 안 쓰는 편이다. 이유는 후자처럼 다차원 리스트를 만들면 리스트가 제대로 복사가 안되기 때문이다. 1차원 리스트는 문제가 없다. a = [0]*5 a[1] = 1 print a a = [0 for i in xrange(5)]..

next_permutations, prev_permutation, k permutations

https://www.huangwenchao.com.cn/2015/05/python-permutation.html 쓸일이 많을것같아서 저장. 파이썬의 itertools모듈에 permutations가 있지만 다음거 구하는게 없이 전부 다 구하는거다. 종종 다음 permutations가 필요할 때가 있는데 그때를 위해 저장. # -*- encoding: cp949 -*- def next_permutation(a): if len(a) = 0 and a[i] >= a[i+1]: i -= 1 if i = a[k]: k -= 1 (a[i], a[k..

vector, hashmap,

1. vector의 정렬.sort()함수는 앞자리를 보고 정렬하는걸 알수있다. 근데 함수를 선언해서 정렬할수 있다. #include #include #include #include using namespace std; bool _reverse(pair a, pair b) { return a.first > b.first; } bool _reverse2(pair a, pair b) { return a.second > b.second; } int main() { vector v1; v1.push_back(make_pair(1,"abc")); v1.push_back(make_pair(3,"def")); v1.push_back(make_pair(2,"ghi")); v1.push_back(make_pair(4,"j..

파이썬의 변수에 관하여.

파이썬으로 코딩을 하다 보면 이런 경우가 있다. 앞의 TSP문제를 조금 바꿨다. http://qkqhxla1.tistory.com/677 아래의 코드에서 난 global_ret이라는 전역변수에 tsp의 경로 정보를 담고 싶다. 그래서 경로를 다 돌았으면 리턴되기 전에 경로를 전역변수인 global_ret에 저장해놨다. 그러고 마지막에 global_ret을 출력해보면 함수 안에서 경로 정보를 할당했으니 경로 정보가 있을거라고 예측할수있다. 그런데... 뭔가 이상하다.아래의 출력부를 보면 final_path = 으로 path값이 공백이 아니라는걸 확인하기위해 출력해봤다. 공백이 아닌걸 확인후 바로 아랫줄에 global_ret에 path를 할당해줬다. 그런데 맨 마지막에 global_ret 을 출력해보면 공백..

dict과 list에서 어떤 값을 찾을 경우.

전에도 알고있었는데 그냥 그렇구나 하고 넘어갔던 문제이다. 알고리즘 문제를 풀면서 아 이랬어도 됬구나! 하면서 다시 깨달았다. 역시 코딩은 실전. 리스트에서 어떤 값을 찾는다고 했을때는 O(n)의 시간복잡도가 걸린다. 왜냐하면 하나하나 반복문을 돌면서 값이 맞는지 검사를 해야 하기 때문이다. 그런데 딕셔너리같은경우는 시간복잡도가 O(1)이다. 딕셔너리는 해쉬 테이블이기 때문에 메모리에 값을 직접 저장해놓기 때문이다. 즉 딕셔너리는 메모리를 조금 더 먹는 대신 어떤값을 찾을때 빠르다고 보면 되겠다. 알고리즘 문제를 풀때 파이썬의 특성상 시간초과가 나는 경우가 많이 있는데 이때 리스트대신 딕셔너리를 쓰면 해결될수 있을것 같다. http://stackoverflow.com/questions/513882/pyt..

in operator 탐구.

요즘 알고리즘 공부를 하고있는데 파이썬보다는 c로 문제를 풀려고 노력중이다. 그런데 c로 코드를 짜던중 파이썬의 in operator가 c에는 없어서, 이걸 어떻게 만들어야하나 하고 생각하다가 갑자기 그럼 python의 in은 어떤 알고리즘으로 구현되있을까? 하는 생각이 들었다. in operator는 문자열 안에 특정 문자열이 들어있는지 검사하는 그런 operator이다.(리스트나 튜플, 딕셔너리의 경우에도 특정 원소가 있는지 검사.) 문자열 관련해서 검색 알고리즘은 내가 알고있는건 kmp,보이어 무어밖에 없다. 이런 비스무레한걸 사용하려나..? 추측해보고 리스트나 튜플 같은경우에는 아무리 생각해봐도 하나하나 찾아보는것 이외에 특정 알고리즘을 생각할수가 없다. 그래서 c 코딩을 하다 말고 python의..

Iterator, Generator, Decorator

예전에 참고하라고 링크를 블로그에 올리긴 했는데...(올려놓기만 하고 자세히 들여다보지는 않았다.) 이터레이터는 뭔지 알겠는데 데코레이터와 제너레이터의 개념을 잘 모르겠어서 좋은 블로그를 보고 정리했다. 이터레이터, 제너레이터 참고 : http://friberry.com/?p=254데코레이터 참고 : http://ravenkyu.github.io/python_investigation/2015/09/07/decorator/ 이터레이터.이터레이터가 뭔지 쓰려다가 말로 표현을 못 하겠어서 예시를 찾아봤다.간단한건데 여기 블로그(c로 설명됨)처럼 반복적으로 처리하는 것을 말한다. 이터레이터에 관한 설명은 저 블로그보다는 자바나 c++(을 아는 사람은)관련해서 같이 참고하면 이해하기가 조금 더 편할것 같다.c++..

함수 리팩토링 관련 모듈들.

파이썬코리아에 어떤 분이 글을 올리셨다.눈팅하다 나라면 어떻게 할까 생각해봤는데 아래 댓글에도 있었지만 *args, **kwargs등을 이용해서 어떻게든 만들겠다.. 라고 구상만 하고 있었는데 이게 진짜 되는지 여러가지 방법론이 올라왔다.당연히 나중에 쓸 일이 있을지 모르지만 쓰게되면 엄청나게 유용하게 보이기에 정리함. 1. multimethods 모듈이 있다고 한다. https://pypi.python.org/pypi/multimethods/(아무리 찾아봐도 어떻게 쓰는지 잘 모르겠다.;) 2. 파이썬 3.4버전 이상에서는 https://docs.python.org/3/library/functools.html 요걸 사용할수 있다고 한다. 아래 코드는 예제. from functools import sin..

시력 테스트 자동화 스크립트 2.

시력 테스트 자동화 스크립트 1 : http://qkqhxla1.tistory.com/359 이번엔 좀 다른거다. 생코에서 어떤분이 색약 관련해서 누가 더 색깔을 잘 구별하는지에 관한 게임을 만드셨다.링크 : http://noda.me/game/eagleye들어가면 게임이 있고 밝은 순서대로 누르면 된다. 근데 당연히 컴공학도로서 그냥 게임만 하면 재미없으니까 자동화시키는 코드를 만들어봤다. 영상. (무한으로 갈것같아 중간에서 중단시켰다.) 코드 # -*- encoding: cp949 -*- import pyscreenshot as ImageGrab import Image import win32api, win32con import time import math while True: time.sleep(2..

Python/2.7 for fun. 2016.05.07

raw 소켓 파악하기 2.

아래 글에서 에러 발견. 아직 제대로 읽지 말 것. raw 소켓으로 이전 http://qkqhxla1.tistory.com/532 에서 하려했던 tcp 통신을 구현해보자. 앞에서 해봤던 icmp는 그냥 내가 한방향으로 보내기만 하면 와이어샤크에서 잡아서 볼수 있었는데, 이건 아니다. tcp는 3 핸드 쉐이킹을 한다. 이걸 다 구현해야 될것 같다.(아직 해보지는 않음.) 근데 3핸드쉐이킹이던 뭐던 생각하기 전에 일단 tcp패킷 자체를 만들어야 한다. TCP/IP이론은 예전에 수업에서 다 배웠었다. 가물가물해가며 찾은 결과 TCP는 IP위에 올라간다. 올라간다.? 는 말은 알고 있지만 구현하려면 뭐 어떻게 구현해야 한다는겨? 또 여기저기 찾아본결과 올라간다는 말은 구현하면 IP헤더 + TCP헤더 이런형식으로..

raw 소켓 파악하기 1.

최근에 개인적인 어플리케이션을 만들어보려고 했는데 네트워크에 대한 깊은 지식이 필요했다. 나름 공부도 열심히 해왔다고 자부했는데 이걸 만들려면 raw 소켓에 대한 지식이 필요하다는걸 알았고, raw 소켓을 파이썬에서 써본 적이 없다는 사실도 깨달았다.(간단히 해결할수있을것같아서 해봤으나 결국 포기. 자료가 별로 없어서 빡셌다.) 시간은 조금 있으니 일단 raw 소켓부터 공부하자는 마음으로 정리. 목표 : 아래의 기본적인 구글로 요청을 보내고 받아오는 tcp코드를 raw 소켓으로 만들어본다.구글로 요청을 보내고 받아오는 'tcp'소켓 코드. # -*- encoding: cp949 -*- import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)..

파이썬 내부구조 이해하기. 2.x

문제될시 댓글달아주시면 글 삭제하겠습니다.파이썬코리아에서 얻은 정보입니다.http://www.slideshare.net/dahlmoon/20160302-58759476에서 정보를 얻었으며 'Moon Yong Joon'님이 정리해주신 슬라이드를 바탕으로 얻어가는게 많은것 같아 공부를 위해 따로 정리했습니다.(제 공부를 위함이므로 앞 글에서 정리했거나 아는 내용은 제거했습니다.) 위에 적었듯이 문제될시 글 삭제하겠습니다. Keyword정보를 확인하기 위해 keyword를 import해서 출력해볼 수 있다. # -*- encoding: cp949 -*- import keyword print keyword print keyword.kwlist 파이썬 2.x버전은 print가 키워드라 함수처럼 처리가 안되어 함수..

python lambda function

나머지는 더 필요하면 찾아보고 좋은 블로그를 발견해서 그냥 쓰임새, 이렇게도 쓰일 수 있다 등만 간단히 정리. 항상 새로운거 볼때마다 생각의 폭이 넓어지는 느낌이 든다. 1. 일반적인 람다함수. 인자가 2개인 경우. a = lambda x,y:(x+3)*y print a(3,2) 2. 디폴트 매개변수 사용 가능 a = lambda x=4,y=3:x*y print a() 3. 다른 함수의 이름을 받아서 호출 가능. a = lambda a,b,c:a(b,c) def x(y,z): return y+z print a(x,2,3) 4. 아래 출처의 블로그 분이 보통 이렇게 사용한다고 함. def a(b,c,d): return b(c,d) print a(lambda x,y:x+y,3,4) 5. 가변 인자. 별개 다..

벤쿠버 유학생을 위한 craigslist에서 다운타운 방찾기 2

http://qkqhxla1.tistory.com/499 에서 만들었었는데 보면 볼수록 잡스러운 gui배치때문에 마음이 불안해서 다른일에 집중을 못하겠어서 개선을 해버렸다. 개선점.1. gui 재배치 수정2. 필요없는 코드 삭제, 알고리즘 일부 개선, 에러처리(인터넷 연결 안됬을 시 에러 처리 등.)3. 사소한것 처리(왼쪽위의 아이콘, 배경이 딱딱해보여서 백그라운드 추가, 블로그 주소 첨부) 허접해보였던 이전과 달리(내코드지만 내가봐도 허접해보였다.) 깔끔하고 예뻐졌다.수정해야 될거 같은점.(2016-01-27 추가) 1. 종종 start버튼누르면 널 참조 오류같은(?) 느낌이 나면서 프로그램이 그냥 죽는다. 왜 그런지 발견.2. 필터 추가.(female이 들어가있으면 안보겠다. 이런느낌)3. 가능하면 ..

Python/2.7 for fun. 2015.12.30

gotoxy, 콘솔 창 색깔 변화 colorama모듈.

종종 파이썬 시작하는사람들중에 c처럼 익숙해지기위해서 콘솔로 게임 만들어보는 사람들이 있는데 gotoxy같은것들이 없어서 찾다가 포기하고 tkinter같은걸 이용해서 어색하게 gui로 만드는걸 봐서... 1. c언어 gotoxy함수를 파이썬으로 구현해보기. 구글링해봤을때 확 나오는게 없길래 없는줄알았는데 의외로 네이버에서 발견... http://foreblog.tistory.com/812 아니면 win32api가 설치되있는분들은 이렇게 간단하게 가능... # -*- encoding: cp949 -*- import win32api from ctypes import Structure, c_short, windll, POINTER def gotoxy(x,y): class COORD(Structure): _fi..

벤쿠버 유학생을 위한 craigslist에서 다운타운 방찾기.

개선 : http://qkqhxla1.tistory.com/501 개요.캐나다 벤쿠버에 도착한지 좀 되서, '다운타운'으로 이사가고자 하는 사람들이 많은데, craigslist사이트에서 찾는게 처음인 만큼 뭘 어떻게 찾아야 할지, 필터는 어떻게 걸어야 좋은지, 어떻게 해야 효율적으로 다운타운에 있는 방만 찾을지 모르는 사람들을 위한 프로그램을 만들었다. 요점 : craigslist에서 다운타운에 위치한 방만 찾아서 갖고오기. 계획.1. craigslist에서 downtown으로 검색했을때의 결과 링크 전부 파싱. 2. 링크중에서 되도록 다운타운에 위치할 가능성이 높은 링크만 가져옴. (원래 계획은 머신러닝까지 이용해서 downtown이란 글자가 어디에 얼마나 들어가있냐 그런 정보로 판별하려고 했지만 힘들..

Python/2.7 for fun. 2015.12.27

지도 모듈 (구글맵, folium 등등.)

페이스북에서 http://blog.rtwilson.com/my-top-5-new-python-modules-of-2015/ 에 관한 정보를 봤다. 다른것도 나중에 언젠가 유용할것 같긴 한데 아직은 별로 쓸일이 없어서 따로 정리는 안해둠. 여기서 지도 모듈에 유용할것 같은 folium을 찾았고, 전에 쓰려다가 어려워서 묻어두었던 구글맵까지 같이 정리함. 1. 구글맵.공식 홈페이지 : https://pypi.python.org/pypi/googlemaps/ geocode 키 얻기 : https://developers.google.com/maps/ geocode를 이용해서 위치찾기(지금보니 별 쓸모는 없음. 그냥 참고.) : http://www.google.com/maps/api/geocode/json?lat..

Hello world 난독화하기.(번역)

source : https://benkurtovic.com/2014/06/01/obfuscating-hello-world.html 번역(translation) 이상한 해석이나 틀린점 있으면 지적해주시면 감사하겠습니다. 일부 의역 했습니다.(번역을 다 하긴 했는데 몇번 읽어보고 이해후 이상한 부분 수정이나 추가 설명 추가할 계획입니다.) 몇달 전에 엄청나게 난독화한 Hello world!라는 문자열을 출력하는 프로그램을 만들기 위해 Code Golf contest를 처음으로 갔다. 아래 코드가 결과물이고, 어떻게 작동하는지 설명해보기로 하겠다. 파이썬 2.7 환경에서 돌아간다. (lambda _, __, ___, ____, _____, ______, _______, ________: getattr( __i..

수학 관련 모듈 sympy, scipy

sympy와 scipy는 수학 식 관련해서 쓰기에 좋을 것 같다.sympy : http://docs.sympy.org/dev/modules/solvers/solvers.htmlscipy : http://www.scipy.org/ 두개의 방정식이 있을때 그것의 해를 파이썬으로 어떻게 구하느냐. 가 목적이어서 찾았는데 스택오버플로우에 이런 좋은 예시가 있었다. http://stackoverflow.com/questions/8739227/how-to-solve-a-pair-of-nonlinear-equations-using-python 혹시 모르니 예제도 복사해놓음. scipy예제.x+y^2 = 4e^x+ xy = 3 from scipy.optimize import fsolve import math def e..

poster module (upload image or file)

사진이나 파일을 업로드할 경우가 있을때, 사진같은경우 내부정보가 바이너리로 변경되고 multipart/form-data형식으로 전송된다. 그래서 막상 프로그래밍으로 구현하려면 어떻게 해야될지 몰랐다.(사진파일이 그냥 바이너리로만 바뀌어서 보내지는지, 추가되는점은 없는지 등등 중간 인코딩방식을 잘 몰라서. 생각해보니까 찾아보기도 귀찮아서 안찾은듯) 예전에 webhacking.kr 37번같은경우에는 그냥 마구잡이로 보내지는 패킷을 잡아서 소켓으로 어떻게어떻게 문서찾아가면서 구현했었는데, 지금보면 좀 억지로 만든 프로그램이다. 다시 읽어보니까 되게 원시적인 방법으로 했다. (지금 생각해보면 그거 하나 구현하려고 이리저리 삽질한게 공부에 많은 도움이 됬다.) 이번에 적을 poster모듈을 쓰면 메소드가 알아서 ..

pyexiv2 module (read and modify exif)

파이썬으로 exif정보를 읽고 수정할 수 있다.공식 : http://tilloy.net/dev/pyexiv2/download.html 튜토리얼(docs) : http://tilloy.net/dev/pyexiv2/tutorial.html 일반적으로 exif정보는 그냥 사진같은거에서 오른쪽클릭후 속성에서 자세히로 들어가 입력함으로서 바꿀수 있다. 그런데 당연하게도 자동화할 경우가 생기는데 이때 프로그래밍적으로 만지작거리기에 좋은것 같다. 이쪽은 잘 몰라서 이보다 더 좋은 모듈이나 툴이 있을지 모르겠다. 그냥 나처럼 가볍게 만지작거리기에는 좋음. # -*- encoding: cp949 -*- import pyexiv2 metadata = pyexiv2.ImageMetadata('camera.jpg') meta..

아이들용 덧셈색칠퍼즐 만들기.

페이스북을 눈팅하다 어떤 프로그래머분의 글을 보게되었다. 어린 아들이 있는데 덧셈을 해서 색칠하는 퍼즐을 너무 좋아해서 사달라고 했다는것이었다. 퍼즐은 아래와 같다. 프로그래머인 그분은 프로그래밍의 열정이 살아나서(!) 본인이 만들어주겠다고 했고, 막상 해보려니 일반 이미지를 아래와 같은 격자 모양의 이미지로 만드는것부터가 고역이었다... 라고 글을 쓰셨었다. http://myzone.coloringsquared.netdna-cdn.com/wp-content/uploads/2013/10/Free-Addition-Worksheet-Activities-AE4-Cute-Lion-Color-math-for-kids.pdf 요러한 이미지인데 간단한 덧셈을 해서 그 결과에 맞게 색칠하면 그림이 나오는 문제이다. 이..

Python/2.7 for fun. 2015.08.14

selenium

selenium download : https://pypi.python.org/pypi/selenium docs : https://selenium-python.readthedocs.org 크롬 드라이버 : https://sites.google.com/a/chromium.org/chromedriver/downloads selenium이란게 있다. 예를 들어 어떤 사이트에서 어떤 동작을 자동화시키는 파이썬 스크립트를 짜려고 할 때에 난감한 경우가 있다. 예를들면 입력한 데이터가 암호화되서 전송되는 경우에는 암호화 시키는 알고리즘까지 찾아서 구현을 해야하기때문에 구현난이도가 올라간다. 그런데 이 selenium을 쓰면 내가 직접 입력하는것처럼 데이터가 들어간다. 그러므로 전송되면서 내가 입력한 데이터가 바뀐다..

python .doc to .pdf, .xls to .pdf

공부때문에 이것저것 자료를 찾아보고 있는데, 자료가 .doc확장자로 있다. 개인사정으로 doc확장자인 파일을 열지 못해서, 변환 프로그램을 찾아보려다가 파이썬에 더 간단한 방법이 있음을 알았다. http://stackoverflow.com/questions/6011115/doc-to-pdf-using-python 소스 그대로 가져왔다. in_file에는 basic.doc라는 파일이 있을경우 이름인 basic만 넣어주고, out_file에도 .pdf는 알아서 붙여서 나오므로 이름만 넣어준다. pdf가 만들어지기 까지 5~10초정도 걸린다. # -*- encoding: cp949 -*- import sys import os import comtypes.client wdFormatPDF = 17 in_file..

is operator, raw string(r'', repr함수)

is 연산자는 주소값을 기반으로 값을 비교한다. ==는 순수하게 값이 같은지 비교하는데 반해,is는 주소값을 기반으로 값이 같은지 비교한다. ex) a = b = 10print a is b 그런데 이상한 예제가 하나 있다. 아래를 보자. a = int(str(5))b = 5print a is b 단순히 숫자 5를 str로 변환했다가 다시 int함수로 정수로 만들었다. 이건 True가 출력될것이다. 그리고 또다시 아래 예제를 실행해보자. a = int(str(500))b = 500print a is b ??? 숫자가 500으로 바뀌었을뿐인데 False가 출력된다. 왜그럴까?? 아래 링크에 답이 나와있다.http://stackoverflow.com/questions/132988/is-there-a-diffe..

시력 테스트 자동화 스크립트 1.

시력 테스트 자동화 스크립트 2 : http://qkqhxla1.tistory.com/556 심심해서 재미로 만들어봤다. http://wvw.igame.com/eye-test/?fbs=665%7C%7CKO 이 사이트를 들어가보면 색깔 구별 테스트가 나온다. 저기에 써있는데도 다른 색깔을 고르면 된다. 가면 갈수록 난이도가 높아지고, 사람의 경우에는 눈이 좋으면 35정도까지는 간다. 이걸 자동화해보기로 했다. 처음에는 크롬 콘솔에서 자바스크립트로 입력을 처리할까.. 생각하다가 쉽고 일반적인 방법이라는 생각이 들었다. 그래서 일부러 더 어렵게 해보려고 직접 저 부분을 캡쳐해서, 각각의 도형들로 나눈 후, RGB값을 조사해서 나머지와 다른 부분의 위치를 계산해서 그 부분을 직접 클릭하는 스크립트를 만들었다. ..

Python/2.7 for fun. 2015.06.26

pyqt를 이용한 나만의 웹툰 뷰어 만들기3 (개선,기능추가)

이전글 : http://qkqhxla1.tistory.com/347 개선점. 1. 웹툰이 길 경우 한번에 내려가는 스크롤바가 너무 적어서 손 아픈 문제 개선. ->실행시 마우스 휠 스크롤 사이즈를 10으로 늘리고, 웹툰뷰어를 종료하면 스크롤 사이즈가 원래 설정대로 돌아감. 2. 네이버의 이번달 신작 웹툰 랜덤하게 3개, 다음의 오늘차 새로운 웹툰목록 추가. 스크롤 사이즈 변경 방법론. 위의 개선점 1번에서 적어놨듯이 웹툰이 길 경우 한번에 내려가는 스크롤바가 너무 적어서 손이 아팠다. 이걸 개선하기 위한 방법론이다. 웹툰 뷰어를 시작할때 원래의 스크롤 사이즈를 저장해놓고, 10으로 변경. 웹툰 뷰어를 종료하면 스크롤 사이즈를 원래의 저장해놨던 값으로 재설정.처음에 스크롤 사이즈 변경하는건 앞에서 프록시 ..

Python/2.7 for fun. 2015.06.25