'c/c++' 카테고리의 다른 글
multimap에서 equal_range()로 아무것도 못찾은 경우 (0) | 2012.09.01 |
---|---|
STL iterator로 erase()사용시 주의해야할 점 (0) | 2012.08.27 |
가상함수 virtual은 어떤 경우에 써야 할까 ? (0) | 2012.07.18 |
c/c++ 연산자 우선순위표 (0) | 2012.07.13 |
(void) param (0) | 2012.07.12 |
multimap에서 equal_range()로 아무것도 못찾은 경우 (0) | 2012.09.01 |
---|---|
STL iterator로 erase()사용시 주의해야할 점 (0) | 2012.08.27 |
가상함수 virtual은 어떤 경우에 써야 할까 ? (0) | 2012.07.18 |
c/c++ 연산자 우선순위표 (0) | 2012.07.13 |
(void) param (0) | 2012.07.12 |
ftp 보안 (0) | 2012.12.19 |
---|---|
서버 명령어 (0) | 2012.12.12 |
vim suspend ctrl-z ^z (0) | 2012.08.03 |
vim 소스코드 자동정렬 (0) | 2011.11.01 |
vim 소스코드를 html로 변환하기 (0) | 2011.11.01 |
void MyScene::scheduleCountOne(float dt)
{
this->unschedule(schedule_selector( MyScene ::scheduleCountThree));
this->schedule(schedule_selector( MyScene ::scheduleCountTwo), 0.0f, 0, 1.0f);
CCLog("One");
}
void MyScene ::scheduleCountTwo(float dt)
{
this->unschedule(schedule_selector( MyScene ::scheduleCountOne));
this->schedule(schedule_selector( MyScene ::scheduleCountThree), 0.0f, 0, 1.0f);
CCLog("Two");
}
void MyScene ::scheduleCountThree(float dt)
{
this->unschedule(schedule_selector( MyScene ::scheduleCountTwo));
this->schedule(schedule_selector( MyScene ::scheduleCountOne), 0.0f, 0, 1.0f);
CCLog("Three");
}
1초마다 scheduleCountOne->scheduleCountTwo->scheduleCountThree->scheduleCountOne
돌아가면서 호출된다.
cocos2d-x HelloWorld 실행시 오류 (1) | 2012.08.24 |
---|---|
cocos2d-x sharedDispatcher()대신 sharedDirector()->getTouchDispatcher() (0) | 2012.08.21 |
cocos2d-x Schedule에 대해 (0) | 2012.08.14 |
cocos2d-x에서 한글 출력하는 방법 (0) | 2012.08.14 |
particle 및 label 객체 관리 (0) | 2012.07.24 |
주기적으로 실행되게 하기 위해 각 객체의 schedule()함수를 이용한다.
schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);
첫번째 인자는, 스케쥴링시 호출할 함수
두번째 인자는, 호출할 함수의 시간 간격
세번째 인자는, 몇번 호출할 것인지 (무한대로 설정할 수도 있다)
네번째 인자는, 최초 schedule()에 등록된후 몇 초후 부터 스케쥴링 할 것인지를 넘겨주어야 한다.
unschedule(SEL_SCHEDULE selector) 나 unscheduleAllSelectors() 로 스케쥴 등록을 제거할 수 있다.
cocos2d-x HelloWorld 실행시 오류 (1) | 2012.08.24 |
---|---|
cocos2d-x sharedDispatcher()대신 sharedDirector()->getTouchDispatcher() (0) | 2012.08.21 |
cocos2d-x schedule 관리 (0) | 2012.08.16 |
cocos2d-x에서 한글 출력하는 방법 (0) | 2012.08.14 |
particle 및 label 객체 관리 (0) | 2012.07.24 |
1.
http://www.angelcode.com/products/bmfont/ 에서 폰트 변환 프로그램을 통해, 원하는 폰트, 원하는 글자를 변환 (*.tga, *.fnt) 파일 생성
예) mybmpfont.tga, mybmpfont.fnt
2.
strings.xml 파일 작성
...
<key>hello</key>
<string>안녕하세요</string>
...
3.
CCDictionary *strings = CCDictionary::create("strings.xml");
const char *hello= ((CCString*)strings->objectForKey("
hello "))->m_sString.c_str();
CCLabelBMFont *label1 = CCLabelBMFont::create(
hello , "mybmpfont.fnt", 200, kCCTextAlignmentLeft);
4.
만약 오류가 난다면, mybmpfont.tga를 mybmpfont.png로 변환하고, mybmpfont.fnt을 열어서
file="mybmpfont.tga" 를 file="mybmpfont.png" 로 수정
1.
http://www.angelcode.com/products/bmfont/ 에서 폰트 변환 프로그램을 통해, 원하는 폰트, 원하는 글자를 변환 (*.tga, *.fnt) 파일 생성
우선 Font Settings 에서 원하는 한글 출력 가능한 폰트를 선택한다.
Charset는 Unicode를 선택한다.
Export Options 에서 File format를 XML이 아닌 Text로 선택하고, Textures를 tga가 아닌 png를 선택한다. 생성하기 원하는 한글을 선택한 후, Save bitmap font as ... 로 저장한다.
그러면 *.png 와 *.fnt 파일이 생성 될 것이다. 참고로 *.fnt는 ANSI여도 된다.
2.
strings.xml 파일을 Unicode나 UTF-8로 생성한다.
...
<key>hello</key>
<string>안녕하세요</string>
...
다음과 같은 형태로 작성하되, <string>에 해당하는 한글은 반드시 *.fnt, *.png에 있어야 한다.
3.
CCDictionary *strings = CCDictionary::createWithContentsOfFile("strings.xml");
const char *strHello= ((CCString*)strings->objectForKey("hello"))->m_sString.c_str();
CCLabelBMFont *label1 = CCLabelBMFont::create( strHello, "mybmpfont.fnt", 200, kCCTextAlignmentLeft);
요렇게 사용하면 된다.
4.
mybmpfont3.fnt에서
info face="맑은 고딕" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0 common lineHeight=32 base=26 scaleW=256 scaleH=256 pages=3 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 page id=0 file="mybmpfont3_0.png" page id=1 file="mybmpfont3_1.png" page id=2 file="mybmpfont3_2.png" ... 중에서 page가 1이 아닌 값이면 안된다.
cocos2d-x HelloWorld 실행시 오류 (1) | 2012.08.24 |
---|---|
cocos2d-x sharedDispatcher()대신 sharedDirector()->getTouchDispatcher() (0) | 2012.08.21 |
cocos2d-x schedule 관리 (0) | 2012.08.16 |
cocos2d-x Schedule에 대해 (0) | 2012.08.14 |
particle 및 label 객체 관리 (0) | 2012.07.24 |
Web framework에 대해.. (0) | 2012.08.22 |
---|---|
MariaDB란.. (0) | 2012.08.22 |
data visualization (0) | 2012.07.31 |
IBM 시각화 manyeyes (0) | 2012.07.31 |
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
vim 에서 잠시 멈추고 쉘로 갔다가 돌아오는 방법
vim 을 잠시 멈추고 쉘로 가기
ctrl-z
다시 vim으로 돌아가기
> fg
출처:
http://stackoverflow.com/questions/1879219/vim-how-to-temporarily-exit-vim-and-go-back
ftp 보안 (0) | 2012.12.19 |
---|---|
서버 명령어 (0) | 2012.12.12 |
ubuntu 우분투 한글 (0) | 2012.08.16 |
vim 소스코드 자동정렬 (0) | 2011.11.01 |
vim 소스코드를 html로 변환하기 (0) | 2011.11.01 |
http://en.wikipedia.org/wiki/Treemapping
http://visualization4u.blogspot.kr/
http://openlab.tistory.com/category
http://www.smallake.kr/?p=1160
비슷한 예로
word cloud...
MariaDB란.. (0) | 2012.08.22 |
---|---|
색, color (0) | 2012.08.13 |
IBM 시각화 manyeyes (0) | 2012.07.31 |
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
색, color (0) | 2012.08.13 |
---|---|
data visualization (0) | 2012.07.31 |
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
빅 데이터 Big data 의 개념 (0) | 2012.07.08 |
data visualization (0) | 2012.07.31 |
---|---|
IBM 시각화 manyeyes (0) | 2012.07.31 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
빅 데이터 Big data 의 개념 (0) | 2012.07.08 |
루이스 폰 안: 대규모 온라인 협업 (0) | 2012.07.01 |
IBM 시각화 manyeyes (0) | 2012.07.31 |
---|---|
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
빅 데이터 Big data 의 개념 (0) | 2012.07.08 |
루이스 폰 안: 대규모 온라인 협업 (0) | 2012.07.01 |
쉽게 프로그래밍 하는 도구 (0) | 2012.07.01 |
m_emitter->runAction(
cocos2d::CCSequence::actions(
cocos2d::CCMoveTo::actionWithDuration(0.2f, dst->getPosition()),
cocos2d::CCDelayTime::actionWithDuration(3.0f),
cocos2d::CCBlink::create(2.0f, 1),
NULL
)
);
이런식으로 action에서 CCDelayTime과 CCBlink을 이용해서 객체를 제거해주었다.
-----------------------------------------------------------------------------------------
m_emitter->runAction(
cocos2d::CCSequence::actions(
cocos2d::CCMoveTo::actionWithDuration(0.2f, dst->getPosition()),
cocos2d::CCDelayTime::actionWithDuration(3.0f),
cocos2d::CCCallFuncN::create(
this, (cocos2d::SEL_CallFuncN)(&CMissile::destroy)
),
NULL
)
);
다음과 같이 제거한다.
cocos2d-x HelloWorld 실행시 오류 (1) | 2012.08.24 |
---|---|
cocos2d-x sharedDispatcher()대신 sharedDirector()->getTouchDispatcher() (0) | 2012.08.21 |
cocos2d-x schedule 관리 (0) | 2012.08.16 |
cocos2d-x Schedule에 대해 (0) | 2012.08.14 |
cocos2d-x에서 한글 출력하는 방법 (0) | 2012.08.14 |
http://www.winapi.co.kr/clec/cpp3/30-2-5.png
STL iterator로 erase()사용시 주의해야할 점 (0) | 2012.08.27 |
---|---|
C++ STL 에서 iterator사용시 주의점 (0) | 2012.08.20 |
c/c++ 연산자 우선순위표 (0) | 2012.07.13 |
(void) param (0) | 2012.07.12 |
c++ string 에서 c의 char 배열로 변환 (0) | 2012.07.05 |
우선순위 | 연산자 | 설명 | 결합법칙 |
---|---|---|---|
1 | :: | 범위 확인 (C++만) | 왼쪽에서 오른쪽 |
2 | ++ | 접미사 증가 | |
-- | 접미사 감소 | ||
() | 함수 호출 | ||
[] | 배열 첨자 | ||
. | 참조에 의한 요소 선택 | ||
-> | 포인터를 통해 요소 선택 | ||
typeid() | 런타임 형식 정보 (C++만) (typeid 참조) | ||
const_cast | 자료형 캐스트 (C++만) (const cast 참조) | ||
dynamic_cast | 자료형 캐스트 (C++만) (dynamic_cast 참조) | ||
reinterpret_cast | 자료형 캐스트 (C++만) (reinterpret cast 참조) | ||
static_cast | 자료형 캐스트 (C++만) (static cast 참고) | ||
3 | ++ | 접두사 증가 | 오른쪽에서 왼쪽 |
-- | 접두사 감소 | ||
+ | 단항 덧셈 | ||
- | 단항 뺄셈 | ||
! | 논리적 NOT | ||
~ | 논리적 비트 NOT | ||
(자료형) | 자료형 캐스트 | ||
* | 우회 (역참조) | ||
& | 의-주소 | ||
sizeof | 의-크기 | ||
new , new[] | 동적 메모리 할당 (C++만) | ||
delete , delete[] | 동적 메모리 할당취소 (C++만) | ||
4 | .* | 멤버로의 포인터 (C++만) | 왼쪽에서 오른쪽 |
->* | 멤버로의 포인터 (C++만) | ||
5 | * | 곱셈 | |
/ | 나눗셈 | ||
% | 계수 (나머지) | ||
6 | + | 덧셈 | |
- | 뺄셈 | ||
7 | << | 비트 왼쪽 쉬프트 | |
>> | 비트 오른쪽 쉬프트 | ||
8 | < | 관계적 연산자들에 대해 < 각각의 | |
<= | 관계적 연산자들에 대해 ≤ 각각의 | ||
> | 관계적 연산자들에 대해 > 각각의 | ||
>= | 관계적 연산자들에 대해 ≥ 각각의 | ||
9 | == | 관계적 = 각각의 | |
!= | 관계적 ≠ 각각의 | ||
10 | & | 비트 AND | |
11 | ^ | 비트 XOR (배타적 or) | |
12 | | | 비트 OR (포함적 or) | |
13 | && | 논리 AND | |
14 | || | 논리 OR | |
15 | ?: | 삼중 조건부 (?: 참조) | 오른쪽에서 왼쪽 |
16 | = | 직접 할당 (C++ 클래스를 위해 기본적으로 제공됨) | |
+= | 덧셈에 의한 할당 | ||
-= | 뺄셈에 의한 할당 | ||
*= | 곱셈에 의한 할당 | ||
/= | 나눗셈에 의한 할당 | ||
%= | 나머지에 의한 할당 | ||
<<= | 비트 왼쪽 쉬프트에 의한 할당 | ||
>>= | 비트 오른쪽 쉬프트에 의한 할당 | ||
&= | 비트 AND에 의한 할당 | ||
^= | 비트 XOR에 의한 할당 | ||
|= | 비트 OR에 의한 할당 | ||
17 | throw | 던지기 연산자 (던지기 예외, C++만) | |
18 | , | 쉼표 | 왼쪽에서 오른쪽 |
C++ STL 에서 iterator사용시 주의점 (0) | 2012.08.20 |
---|---|
가상함수 virtual은 어떤 경우에 써야 할까 ? (0) | 2012.07.18 |
(void) param (0) | 2012.07.12 |
c++ string 에서 c의 char 배열로 변환 (0) | 2012.07.05 |
fflush (0) | 2012.05.31 |
psyco
python send email with html, image (1) | 2012.11.29 |
---|---|
기본 자료형 (0) | 2012.05.25 |
파이썬 개발 환경 구성 (0) | 2012.05.23 |
토큰 분리 (0) | 2012.05.21 |
python ascii character to int, int to ascii character (0) | 2012.05.20 |
void foo( int param1, int param2 ){
(void)param1;
(void)param2;
return;
}
사용하지 않는 파라미터 param1, param2 경고를 제거하기 위해 (void)param1, (void)param2 을 사용한다.
가상함수 virtual은 어떤 경우에 써야 할까 ? (0) | 2012.07.18 |
---|---|
c/c++ 연산자 우선순위표 (0) | 2012.07.13 |
c++ string 에서 c의 char 배열로 변환 (0) | 2012.07.05 |
fflush (0) | 2012.05.31 |
STL - vector (0) | 2012.05.31 |
'빅 데이터'라는 단어는 상대적인 개념.
'Big data is a term applied to data sets whose size is beyond the ability of commonly used software tools to capture, manage, and process the data within a tolerable elapsed time. - wikipedia
데이터 크기 그 자체가 문제의 일부가 될때 "빅 데이터"라고 한다.
출처 :
IBM 시각화 manyeyes (0) | 2012.07.31 |
---|---|
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
루이스 폰 안: 대규모 온라인 협업 (0) | 2012.07.01 |
쉽게 프로그래밍 하는 도구 (0) | 2012.07.01 |
string str = "hello world";
const char * cstr = str.c_str();
c/c++ 연산자 우선순위표 (0) | 2012.07.13 |
---|---|
(void) param (0) | 2012.07.12 |
fflush (0) | 2012.05.31 |
STL - vector (0) | 2012.05.31 |
[c언어] 이차원 배열 사용 함수 (0) | 2012.04.21 |
IBM 시각화 manyeyes (0) | 2012.07.31 |
---|---|
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
빅 데이터 Big data 의 개념 (0) | 2012.07.08 |
쉽게 프로그래밍 하는 도구 (0) | 2012.07.01 |
IBM 시각화 manyeyes (0) | 2012.07.31 |
---|---|
네이버 '라인'의 NoSQL (0) | 2012.07.27 |
아이폰4 ‘레티나 디스플레이’는 과장된 마케팅 용어? (0) | 2012.07.25 |
빅 데이터 Big data 의 개념 (0) | 2012.07.08 |
루이스 폰 안: 대규모 온라인 협업 (0) | 2012.07.01 |
Visual Studio 2010 - [Project] - [Property]
Included Directories
C:\opencv\build\include
C:\tbb40_20120408oss\include
Library Directories
C:\opencv\build\x86\vc10\lib
C:\tbb40_20120408oss\lib\ia32\vc10
System Environment Value
PATH
C:\opencv\build\x86\vc10\bin
C:\tbb40_20120408oss\bin\ia32\vc10
opencv 1일차 (0) | 2012.06.18 |
---|
BlobLabeling.h 및 BlobLabeling.cpp 는 http://martinblog.net/826 에 있는 소스 사용
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <stdio.h>
#include "BlobLabeling.h"
extern void ThinningGonzalez(IplImage *inImg, IplImage *outImg);
int main(int argc, char *argv[])
{
IplImage *video_orig;
IplImage *video_gray;
IplImage *video_out;
IplImage *bmp_orig;
IplImage *bmp_gray;
IplImage *bmp_out;
CvCapture* capture;
IplConvKernel *kernel;
// 윈도우 생성
cvNamedWindow("video_orig",CV_WINDOW_AUTOSIZE);
cvNamedWindow("video_out",CV_WINDOW_AUTOSIZE);
cvNamedWindow("bmp_orig",CV_WINDOW_AUTOSIZE);
cvNamedWindow("bmp_out",CV_WINDOW_AUTOSIZE);
// 카메라 객체
printf("카메라 객체\n");
capture = cvCaptureFromCAM(1);
// 이미지 객체
printf("이미지 객체\n");
bmp_orig = cvLoadImage("C:\\hello_newyork.bmp");
bmp_gray = cvCreateImage(cvGetSize(bmp_orig), IPL_DEPTH_8U, 1);
bmp_out = cvCreateImage(cvGetSize(bmp_orig), IPL_DEPTH_8U, 3);
printf("영상 객체\n");
video_orig = cvQueryFrame(capture);
video_gray = cvCreateImage(cvGetSize(video_orig), IPL_DEPTH_8U, 1);
video_out = cvCreateImage(cvGetSize(video_orig), IPL_DEPTH_8U, 1);
// 필터 객체
kernel = cvCreateStructuringElementEx(9, 9, 4, 4, CV_SHAPE_RECT, NULL);
// 이미지 출력
printf("이미지 출력\n");
cvCvtColor(bmp_orig, bmp_gray, CV_RGB2GRAY);
cvCvtColor(bmp_gray, bmp_out, CV_GRAY2BGR);
//cvMorphologyEx(bmp_gray, bmp_gray, NULL, kernel, CV_MOP_TOPHAT, 3);
//cvMorphologyEx(bmp_out, bmp_out, NULL, kernel, CV_MOP_TOPHAT, 3);
cvThreshold( bmp_gray, bmp_gray, 200.0, 255.0,
CV_THRESH_BINARY|CV_THRESH_OTSU);
cvThreshold( bmp_gray, bmp_gray, 1, 255, CV_THRESH_BINARY_INV);
CBlobLabeling blob;
blob.SetParam( bmp_gray, 200 );
blob.DoLabeling();
for(int i=0; i<blob.m_nBlobs; i++){
CvPoint pt1 = cvPoint( blob.m_recBlobs[i].x,
blob.m_recBlobs[i].y );
CvPoint pt2 = cvPoint( pt1.x + blob.m_recBlobs[i].width,
pt1.y + blob.m_recBlobs[i].height );
CvScalar color = cvScalar( 0, 0, 255 );
printf("(%3d,%3d) - (%3d,%3d)\n", pt1.x, pt1.y, pt2.x, pt2.y);
cvDrawRect( bmp_out, pt1, pt2, color );
}
cvShowImage("bmp_orig", bmp_gray);
cvShowImage("bmp_out", bmp_out);
int i=0;
while(1){
if( cvWaitKey(10) == 27 ) break;
cvCvtColor(video_orig, video_out, CV_RGB2GRAY);
cvShowImage("video_orig", video_orig);
cvMorphologyEx(video_out, video_out, NULL, kernel, CV_MOP_TOPHAT, 1);
cvShowImage("video_out", video_out);
video_orig = cvQueryFrame(capture);
}
// 이미지 해제
cvReleaseImage(&video_out); printf("video_out 해제 완료\n");
cvReleaseImage(&bmp_orig); printf("bmp_orig 해제 완료\n");
// 캡쳐 해제
cvReleaseCapture(&capture); printf("capture 해제 완료\n");
// 윈도우 파괴
cvDestroyAllWindows(); printf("종료\n");
return 0;
}
opencv 2.3.1 + visual studio 2010 + windows 7 64bit (1) | 2012.06.20 |
---|
while( getchar() != '\n' ) ;
(void) param (0) | 2012.07.12 |
---|---|
c++ string 에서 c의 char 배열로 변환 (0) | 2012.07.05 |
STL - vector (0) | 2012.05.31 |
[c언어] 이차원 배열 사용 함수 (0) | 2012.04.21 |
[c언어] sin그래프 그리기 (0) | 2011.11.09 |
vector<Edge> graph;
graph.push_back( Edge() );
graph.push_back( Edge() );
graph.push_back( Edge() );
vector<Edge>::Iterator iter;
for( iter = graph.begin(); iter != graph.end(); ++iter )
cout<< iter->key << endl;
sort(graph.begin(), graph.end(), less<Edge>());
c++ string 에서 c의 char 배열로 변환 (0) | 2012.07.05 |
---|---|
fflush (0) | 2012.05.31 |
[c언어] 이차원 배열 사용 함수 (0) | 2012.04.21 |
[c언어] sin그래프 그리기 (0) | 2011.11.09 |
[c언어] strtok 사용법 및 쓰레드에서 사용시 유의사항 (0) | 2011.11.02 |
파이썬에서 자료형은 크게 4가지로 분류할 수 있다.
동적 타입 언어이기 때문에 변수 사용시 타입 선언이 필요없다.
c언어에서는 변수 선언시 타입을 명시해야 한다.
int a;
double b;
반면 파이썬은 동적 타입 언어이기 때문에 변수 사용시 타입 선언이 필요없다.
그리고 변수의 타입이 바뀔수도 있다.
>>> a = 5
>>> print type(a)
<type 'int'>
>>> a = 4.0
>>> print type(a)
<type 'float'>
>>> a = 'hello'
>>> print type(a)
<type 'str'>
>>> a = [1,2,3]
>>> print type(a)
<type 'list'>
Numeric
기본적으로 정수형, 실수형이 있고, 허수형도 지원한다.
정수형은 이론상 크기 제한이 없다.
2.x에서는 c언어에서의 int형보다 큰 수는 Long로 처리하고, 나머지는 int형으로 처리하지만, 3.x에서는 모두 Long으로 처리한다.
>>> n = 1236784319*78321919693185
>>> print n
96867322110508499166015
이런식으로 42억을 넘는 수도 별도의 처리 과정없이 사용 가능하다.
허수형도 기본 자료형으로 제공하는데, 3+5j 이런식으로 표기한다.
>>> a = 3+5j
>>> b = 4-2j
>>> print a*b
(22+14j)
허수 a의 실수부와 허수부를 알아내기 위해선, 다음과 같이 사용해볼 수 있다.
>>> a.real
3.0
>>> a.imag
5.0
허수 a의 켤레복소수도 conjugate() 메소드를 이용하면 된다.
>>> print a.conjugate()
(3-5j)
List
리스트는 여러 자료를 순서대로 저장하는 자료형이다. 배열이나 링크드리스트쯤으로 생각하면 된다. 이 리스트에 넣을 수 있는 자료는 제한이 없다.
한 리스트 안에 정수, 실수, 문자열, 또 다른 리스트, 클래스 객체 등 여러가지를 넣을 수 있다.
배열처럼 원하는 순서의 값에 접근할 수 있다.
리스트는 기본적으로 [ ] 대괄호를 쓴다.
>>> my_list = [ 10, 3.14, 30, 'hello' ]
>>> print my_list
[10, 3.14, 30, 'hello']
Indexing 인덱싱
원하는 인덱스의 값의 접근은 c언어의 배열처럼 대괄호 [ ] 안에 인덱스 넘버를 이용한다.
>>> print my_list[0]
10
>>> print my_list[1]
3.14
인덱스는 0부터 시작한다. 맨 마지막 인덱서의 접근은 -1로 해도 된다. -2는 맨 마지막에서 2번째 인덱스를 의미한다.
>>> print my_list[-1]
'hello'
>>> print my_list[-2]
30
기본적으로 리스트끼리 + 연산이 가능하다.
>>> L1 = [1,2,3,4]
>>> L2 = ['a','b','c']
>>> print L1+L2
[1, 2, 3, 4, 'a', 'b', 'c']
리스트에 담겨진 객체의 숫자를 알고 싶으면 len( )를 사용하면 된다.
>>> print my_list
[ 10, 3.14, 30, 'hello' ]
>>> len( my_list )
4
리스트에 객체를 추가하려면 append() 메소드를 사용한다.
>>> my_list.append( 'world' )
>>> print my_list
[10, 3.14, 30, 'hello', 'world']
그밖에 리스트 관련 메소드는 다음과 같다.
append(x) |
리스트 맨 마지막에 x를 추가한다. |
count(x) | 리스트에 x의 갯수를 리턴한다. |
extend(L) | 리스트에 다른 리스트 L을 합친다. |
index(x) | x가 있는 위치를 리턴한다. 없을 경우 예외 발생. 여러개 있는 경우 처음에 나온 위치 리턴. |
insert(i, x) | i번째에 x를 추가한다. |
pop(), pop(i) | i번째 혹은 맨 마지막 객체를 리스트에서 제거한다. |
remove(x) |
리스트에 x를 찾아 제거한다. x가 없을 경우 예외 발생 |
reverse() | 리스트를 역순으로 정렬한다. |
sort() | 리스트를 정렬한다. |
리스트의 i번째 값을 수정하는 방법은, i번째에 대입하면 된다.
>>> my_list[1] = 3.14159
>>> print my_list
[10, 3.14159, 30, 'hello', 'world']
Slicing 슬라이싱
다음과 같은 리스트를 만들어보자
L = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
'c', 'd', 'e', 'f', 2번째부터 6번째 전까지 접근하고 싶은경우 [2:6] 처럼 접근하면 된다.
>>> L = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> print L[2:6]
['c', 'd', 'e', 'f']
즉 ':'를 기준으로 시작 인덱스와 끝 인덱스를 지정하면 해당 리스트를 반환한다.
List[start:end]
시작 인덱스나 끝 인덱스를 생략할 경우, 각각 처음과 끝을 의미한다.
L[2:6] | 2번째부터 6번째 전까지 |
L[ :6] |
처음부터 6번째 전까지 |
L[2: ] |
2번째부터 마지막까지 |
L[ : ] | 처음부터 마지막까지 |
슬라이싱할때 step를 지정할 수도 있다.
List[start:end:step]
start부터 end까지 step만큼 건너뛰며 값을 취한다. 생략할경우 기본 1로 취급하는데, 2로 명시 할 경우 다음이 2칸씩 건너뛰며 출력한다.
>>> print L[0:7:2]
['a', 'c', 'e', 'g']
step 값으로 음수를 넣을 경우 반대 방향으로 값을 취한다.
>>> print L[::-1]
['g', 'f', 'e', 'd', 'c', 'b', 'a']
>>> print L[::-2]
['g', 'e', 'c', 'a']
다음과 같이 응용이 가능하다.
>>> L = L[:3] + L[3::-1]
>>> print L
['a', 'b', 'c', 'd', 'c', 'b', 'a']
String
Tuple
Dictionary
python send email with html, image (1) | 2012.11.29 |
---|---|
파이썬 계산 속도 향상 psyco (0) | 2012.07.13 |
파이썬 개발 환경 구성 (0) | 2012.05.23 |
토큰 분리 (0) | 2012.05.21 |
python ascii character to int, int to ascii character (0) | 2012.05.20 |
1. 파이썬 설치
(1) 버전 선택
2.7 버전과 3.2 버전 큰 차이는 없습니다. 일단 배우는 단계이니 2.7을 선택하시고, 32bit로 진행하시면 되겠습니다.
2.7과 3.2는 크게는 print 의 사용법 변화, 유니코드 처리 방식인데, 2.7에선 print 이후에 출력할 객체를 쓰고
print 'hello world'
3.2에선 print도 함수로 편입되어 괄호를 꼭 써주어야 합니다. (2.7에서도 괄호를 써도 됩니다.)
print ('hello world')
주로 이 print때문에, 2.7에서 작성된 코드가 3.2에서 작동하지 않게되는 원인이 됩니다.
2to3이라는 2.x 버전 코드를 3.x 버전에서 작동되게 자동으로 변경해주는 라이브러리가 있긴합니다.
그럼 3.2버전으로 하지 왜 2.7버전으로 하느냐 ?
상당수의 파이썬 3rd-party 라이브러리들이 2.7버전으로 만들어져 있습니다.
더 큰 이유로는 파이썬의 가장 큰 영향을 주고고 받는 Google이 2.x 버전을 추천하고고 있는 점입니다. 같은 이유로, 64bit용 파이썬 보단 32bit용 파이썬이 조금더 골치 아픈일이 적습니다.
아직까진 2.x가 주류버전이지만 언젠간 3.x로 넘어갈것입니다. 따라서 당장은 2.x를 하더라도 2.x와 3.x의 차이점을 알고 유의해서 공부하는것이 제일 좋습니다.
(2) 다운로드 및 설치
windows 기준
http://www.python.org/download/ 에서 해당 버전 다운로드 및 설치
(3) 환경설정
제어판 -> 시스템 -> 고급 시스템 설정 -> 환경변수 -> 시스템 변수
PYTHONPATH=C:\python27;
PATH=C:\python27; ...
PYTHONPATH는 파이썬 프로그래밍시 import할때의 모듈을 탐색하는 경로이고
PATH는 *.py 실행시 실행 프로그램 검색 경로이다. 즉, PATH에 파이썬 설치 경로를 추가하면, cmd창에서 python이라고 바로 실행시킬 수 있다.
환경설정은 선택사항이므로, 반드시 할 필요는 없다.
2. Hello world
파이썬은 파이썬 전용 쉘에서 간단한 코드를 테스트 해 볼수 있고,
텍스트 파일에 파이썬 코드를 작성한 후 실행시킬 수도 있다.
우선 위에서 설치한 파이썬 폴더에서 IDLE(Python GUI)를 실행시킨다.
간단하게 다음 코드를 타이핑해서 테스트해본다.
>>> print 'hello world'
[File] - [New Window] (Ctrl+N) 를 선택하면 새로운 텍스트 창이 나온다.
이곳에 원하는 코드를 작성한 후 저장(Ctrl+S), Run Module(F5) 하면 작성한 코드를 실행한다. 참고로 작성한 코드를 저장할 때는 *.py 확장자를 붙여줘야 한다.
3. 간단한 구조
파이썬은 java나 c#처럼 운영체제를 가리지 않고 대부분의 플랫폼에서 동일한 코드로 작동한다. (플랫폼 독립적)
C언어는 작성한 코드를 컴파일하여 최종적으로는 기계어(*.exe)파일을 만들어 실행한다.
컴파일시 컴파일러는 source code를 최적화하여 실행만 하면 되는 기계어를 작성하기 때문에, 이후 이 프로그램을 실행할때는 무척 빠르게 작동한다. 단순히 기계어를 실행만 하면 되기 때문이다.
파이썬은 크게 두가지 방식으로 작동하는데,
첫째는 작성한 코드를 컴파일하지 않고 인터프리터에서 해석하여 바로 작동하는 방식이다.
두번째는 컴파일된 중간 코드를 작성해두고(*.pyc), 이 pyc파일을 실행하는 방식이다.
중간 코드를 작성한 pyc방식이 실행 시간은 조금더 빠르다.
py2exe 라는 파이썬 모듈을 통해 작성한 파이썬 코드를 바로 실행할 수 있는 *.exe로도 만들수 있다.
파이썬은 동적 타입언어로써, 변수에 타입을 미리 명시하지 않는다.
4. 기타 유용한 에디터
eclipse - pydev
eclipse를 설치한 후 [Help] - [Install New Software...]
Location : http://pydev.org/updates
pyScripter
http://code.google.com/p/pyscripter/downloads/list
파이썬 계산 속도 향상 psyco (0) | 2012.07.13 |
---|---|
기본 자료형 (0) | 2012.05.25 |
토큰 분리 (0) | 2012.05.21 |
python ascii character to int, int to ascii character (0) | 2012.05.20 |
python hex string to int (0) | 2012.05.20 |