ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬의 자료형 - 문자열
    Python/study 2013. 12. 13. 18:58

    ※ 주의사항

    아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다.

    악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.

    해당 문서의 저작권은 해당 저자에게 모두 있습니다. 다른 용도로 사용할 시 법적 조치가 가해질 수 있습니다.

     

    상세 분석


    이번 포스팅에서는 문자열을 사용하는 방법에 대하여 알아보도록 하겠습니다.

    문자열이라는 것은 풀어 말하면 문자들을 나열한 것을 말합니다. 


    1. 문자열 생성


    예를 들어 'a'는 문자입니다. 하지만 "ab" , "ateid", "i am a boy"와 같은 것들은 문자열이 되는 것입니다. 

    그리고 주의해야 할 부분이 있습니다. 바로 숫자입니다. 123은 정수입니다. 하지만 "123"은 문자입니다. 

    123과 "123"의 차이점을 찾아내셨습니까? 바로 큰 따옴표 입니다. 큰 따옴표로 묶여있는 모든 문자,숫자,기호들은 문자열로 취급합니다. 


    문자열을 만드는 방법에는 크게 3가지가 있습니다.


     

    위와 같이 문자열을 만들기 위해서는 "문자열", '문자열', """문자열""" 와 같은 세가지 방법 중 어느 것을 사용해도 무방합니다.

     

    정리 10) "문자열", '문자열', """문자열""" : 큰따옴표 또는 작은 따옴표 또는 세쌍의 큰따옴표로 묶여있는 모든 문자, 숫자, 기호들을 문자열이라고 합니다.

     

    그렇다면 왜 문자열을 만드는 방법들이 세가지나 될까요? C언어에서는 문자열은 "문자열"과 같이 큰 따옴표로만 만들 수 있었습니다. 그런데 생각해보세요. C언어를 사용하여 문자열을 생성했을 때 불편한 점이 없었던가요?

    Is it all right to say "I am boy" instead of "I am a boy" or the sentence above was some kind of typo?

    저는 위와 같은 문자열을 만들어 출력할 때 매우 불편했던 기억이 납니다. 왜냐하면 문자열 중간에 큰 따옴표가 들어감으로써 컴퓨터가 중간에 있는 큰 따옴표까지만 문자열로 인식을 해서 에러가 발생했기 때문입니다. 

     

    실제로 그 예를 보도록 하겠습니다.



    아니나 다를까 문법 에러가 발생했습니다. 이런 경우 다음과 같이 문자열 내부의 큰 따옴표 앞에 '\' 역슬래시를 붙여줘야만 했습니다. 



    위와 같이 내부의 큰 따옴표 앞에 역슬래시를 붙였더니 정상적으로 변수에 문자열이 저장되고 출력되는 것을 확인할 수 있습니다. 이러면 C언어를 사용했을 때의 불편함과 다를 바가 없습니다. 그럼 이렇게 해보면 어떨까요?


    다음 예를 보도록 하겠습니다.



    '\' 역슬래시를 쓰지 않고도 문법 에러 없이 한번에 원하는 결과를 얻을 수가 있었습니다. 

    바로 작은 따옴표를 사용하여 문자열을 묶었기 때문입니다. 작은 따옴표를 쓰면 큰 따옴표는 하나의 문자로 인식을 하기 때문에 역슬래시를 쓸 필요가 없게 됩니다. 여기서 파이썬이 사용자의 편의를 배려했다는 것을 볼 수 가 있습니다.


    그럼 이런 경우는 어떨까요? 뉴욕 브루클린이라는 곳에 John's Bakery & Pastry Shop 이라는 곳이 있습니다.

    (뭔가 가보고 말하는거 같은데 예를 들기위해 찾아봤을 뿐입니다. 저도 미국 가보고 싶어요)

    저 가게 이름을 문자열로 저장하고 싶다면 작은 따옴표로 문자열을 묶는게 낫겠습니까? 큰 따옴표로 묶는게 낫겠습니까? 

    당연히 문장 내에 작은 따옴표가 있으니, 큰 따옴표로 묶으면 문장내의 작은 따옴표에 역슬래시를 붙일 필요가 없는 것입니다.



    자, 혹시나 의심하는 분들을 위해 작은 따옴표로 먼저 묶어보았습니다. 역시나 문법 에러가 발생합니다.

    그리고 큰 따옴표로 묶었을 때에는 작은 따옴표가 문자로 인식되어 문제없이 문자열이 저장되는 것을 볼 수 있습니다.


    정리 11) 큰 따옴표냐, 작은 따옴표냐 : 문장 내에 큰 따옴표가 있다면 작은 따옴표를, 문장 내에 작은 따옴표가 있다면 큰 따옴표를 사용하여 문자열을 저장하면 됩니다.


    여기서 의문점이 발생합니다. 그럼 문장 내에 큰 따옴표와 작은 따옴표 둘 다 들어간다면 어떻게해야 하지?

    정답은 둘 중 갯수가 적은 것을 역슬래시 처리하는 것 밖에 없습니다. 그것을 완벽하게 예외없이 처리하려면 아마도 컴퓨터에 사람의 뇌를 집어 넣어야 하겠지요. 


    다음은 문자열을 만드는 세가지 방법 중 아직 설명하지 않은 한가지, """ """ 따옴표 세개를 사용하는 방법입니다.



    저는 처음에 이렇게 해봤습니다. 그리고 생각했습니다. '도대체 이걸 왜 쓰는거지?'

    그런데 이놈은 다른 목적에 의해 사용되는 것이었습니다. 바로 여러 줄 짜리 문자열을 처리하는데 사용하는 것입니다.



    C언어에서는 여러 줄의 문자열을 출력하기 위해서는 위와 같이 이스케이프 코드를 이용하여 개행표시를 넣어주어야 했습니다. 하지만 이렇게 사용하면 불편할 뿐더러 읽기도 힘들게 됩니다. 이런 경우 큰 따옴표 세개를 사용합니다.



    위와 같이 큰 따옴표 세개를 이용하여 문자열을 묶는 경우에는 이스케이프 코드 '\n'을 사용할 필요가 없습니다.

    다음 줄로 넘어가야 할 경우 그냥 엔터키를 이용하여 다음 줄로 넘어가고 내용을 입력하면 됩니다. 이렇게 큰 따옴표 세개로 묶어 저장한 문자열은 출력했을 때에도 줄 바꿈이 유지되어 나타납니다. 참 간편한 기능입니다.


    정리 12) 여러 줄의 문자열 저장 : 여러 줄 짜리 문자열이 있다면 큰 따옴표 세개로 묶으면 됩니다.


    2. 문자열의 연산


    다음은 문자열을 가지고 연산하는 기능을 알아보도록 하겠습니다.

    문자열로 연산을 한다니 무슨 소리를 하느냐라고 하실 수도 있습니다. 하지만 파이썬에서는 문자열 연산을 지원합니다!

    백문이 불여일견이라고 바로 예를 통해 확인하도록 하겠습니다.


    str1 과 str2를 더했습니다 !! str1에는 'Hello '라는 문자열이, str2에는 'World'라는 문자열이 저장되어 있었습니다.

    그 둘을 더한 결과 'Hello World'라는 문자열이 되었습니다.


    더하기 뿐만 아니라 곱하기도 가능합니다. 곱하기를 했을 때는 어떤 결과나 나올지 예상해보시길 바랍니다.



    곱하기를 했을 때에는 해당 문자열이 곱한 수 만큼 연달아 출력이됩니다.

    이를 응용하면 특수문자를 이용한 그림 같은 것도 화면에 출력할 수 있을 것입니다.


    정리 13) 문자열의 연산 : 문자열끼리 덧셈을 하여 문자열을 연결하거나, 문자열에 수를 곱하여 곱한 수만큼 반복 되는 문자열을 만들 수도 있습니다.



    3. 인덱싱(Indexing)과 슬라이싱(Slicing)


    인덱싱이라는 개념은 문자열의 각 구성요소에 순차적으로 번호를 부여하는 것입니다. 그리고 그 번호를 가지고 문자열의 각 구성요소를 가리키고, 문자열에 속한 각 구성요소를 뽑아다 쓸 수 있도록 하는 것입니다.



    위와 같이 str이라는 변수에 'Hello World'라는 문자열을 저장했습니다. 그러면 해당 문자열의 각 구성요소는 다음과 같이 표현할 수가 있습니다. 이것이 바로 인덱싱(Indexing)입니다.


     

    Hello World 라는 문자열을 구성하는 각 구성요소( 문자 )들에 번호가 매겨져 있는 것을 보실 수 있습니다.

    이때 주의해야 할 점은 Index는 '0'부터 시작한다는 것입니다. 컴퓨터는 모든 숫자를 0부터 시작합니다.

     

     

    위와 같이 인덱싱이라는 개념을 이용하여 문자열의 특정 인덱스의 문자를 추출해 낼 수도 있습니다.

    이때 공백 또한 하나의 인덱스를 차지한다는 것을 알아두어야 합니다.

     

    그리고 이를 응용하면 다음과 같은 작업도 할 수가 있습니다.



    'Hello World'라는 문자열로부터 인덱싱 개념을 이용하여 필요한 구성요소들을 뽑고, 문자열의 연산을 응용하여 'Word'라는 단어를 만들어 내었습니다. 인덱싱을 이용하면 이런 작업이 가능합니다!


    추가로 길이가 긴 문자열의 경우에는 눈으로 인덱스를 하나하나 세기가 쉽지 않습니다.

    나는 맨 뒤의 문자를 원하는데 전체 문자열의 길이가 길어 짐작을 통해 노가다를 해야만 할 것 같습니다.

    이러한 경우 인덱스를 음의 정수로 넣으면 뒤에서부터 카운트하게 됩니다. 예를 통해 알아보도록 하겠습니다.


     

    알파벳 a 부터 z 까지 나열된 문자열입니다. 뒤에서부터 인덱스가 -1인 것부터 차례로 -4인것까지 연결하는 연산을 하였더니 맨 뒷자리인 z부터 w까지가 연결된 문자열이 출력되었습니다. 

     

    여기서 한가지 주의하여야 할 부분은 뒤에서부터 세는 음의 정수 인덱스는 0이 아닌 -1 부터 시작을 합니다. 왜냐햐면 -0이나 0은 매 한가지이기 때문입니다. 인덱스를 -0으로 주면 맨 첫번째자리의 문자인 a가 출력됩니다.

     

     

    정리 14) 변수[Index] : 인덱싱(Indexing)은 문자열의 각 구성요소에 번호를 부여하는 개념으로 공백 또한 하나의 인덱스를 차지합니다. 인덱스는 숫자 '0'부터 시작합니다. 또한 뒤에서부터 세는 경우는 -1부터 시작합니다.

     

     

    다음은 슬라이싱(Slicing)입니다.

     

    슬라이싱은 인덱싱의 개념을 바탕으로 두는 개념으로, 하나의 구성요소를 나타냈던 인덱스들을 하나의 구간으로 묶어 들고오는 개념입니다. 다음 예를 통해 알아보도록 하겠습니다.

     

    위와 같이 인덱스의 한 범위를 정해 그 범위내의 문자열을 통째로 들고나옵니다.

    여기서 주의해야할 점은 슬라이싱 범위의 끝부분은 들고오지 않는다는 것입니다.

     

    정리 15) 변수[시작 인덱스:끝 인덱스] : 슬라이싱(Slicing)은 문자열 내의 한 구간을 들고 나오는 개념입니다. 이때 끝 인덱스는 제외합니다.

     

    슬라이싱의 범위를 비워두고 사용할 수도 있습니다.

     

     

    슬라이싱을 할 때 시작번호를 주지 않으면 처음부터 시작해서 명시한 끝번호까지를 들고온다는 의미입니다. 반대로 끝번호를 주지 않으면 시작번호부터 끝까지 들고온다는 의미가 되고, 둘다 비우면 모든 문자열을 들고 온다는 의미가 됩니다.

     

    정리 16) 변수[:끝 번호] or 변수[시작 번호:] or 변수[:] : 슬라이싱을 할 때 시작번호 혹은 끝번호를 생략하면 처음부터 또는 마지막까지라는 의미가 됩니다.

     

    문자열에 관한 포스팅은 이정도에서 마치도록 하겠습니다.

     

    정리모음

     

    정리 10) "문자열", '문자열', """문자열""" : 큰따옴표 또는 작은 따옴표 또는 세쌍의 큰따옴표로 묶여있는 모든 문자, 숫자, 기호들을 문자열이라고 합니다.

     

    정리 11) 큰 따옴표냐, 작은 따옴표냐 : 문장 내에 큰 따옴표가 있다면 작은 따옴표를, 문장 내에 작은 따옴표가 있다면 큰 따옴표를 사용하여 문자열을 저장하면 됩니다.

    정리 12) 여러 줄의 문자열 저장 : 여러 줄 짜리 문자열이 있다면 큰 따옴표 세개로 묶으면 됩니다.
    정리 13) 문자열의 연산 : 문자열끼리 덧셈을 하여 문자열을 연결하거나, 문자열에 수를 곱하여 곱한 수만큼 반복 되는 문자열을 만들 수도 있습니다.
    정리 14) 변수[Index] : 인덱싱(Indexing)은 문자열의 각 구성요소에 번호를 부여하는 개념으로 공백 또한 하나의 인덱스를 차지합니다. 인덱스는 숫자 '0'부터 시작합니다. 또한 뒤에서부터 세는 경우는 -1부터 시작합니다.
    정리 15) 변수[시작 인덱스:끝 인덱스] : 슬라이싱(Slicing)은 문자열 내의 한 구간을 들고 나오는 개념입니다. 이때 끝 인덱스는 제외합니다.
    정리 16) 변수[:끝 번호] or 변수[시작 번호:] or 변수[:] : 슬라이싱을 할 때 시작번호 혹은 끝번호를 생략하면 처음부터 또는 마지막까지라는 의미가 됩니다.


    참고 URL 및 도서

    - JUMP TO Python, 박응용 저, 2001년, 정보게이트 펴냄

     

    'Python > study' 카테고리의 다른 글

    파이썬의 파일 입출력  (0) 2013.12.18
    파이썬의 조건문  (0) 2013.12.18
    파이썬의 자료형 - 사전  (0) 2013.12.18
    파이썬의 자료형 - 집합  (0) 2013.12.18
    파이썬의 자료형 - 튜플  (0) 2013.12.18
    파이썬의 자료형 - 리스트  (0) 2013.12.18
    파이썬의 자료형 - 문자열(추가)  (0) 2013.12.18
    파이썬의 자료형 - 숫자형  (2) 2013.12.11
    파이썬을 시작하는 방법  (1) 2013.12.11
    파이썬(Python)을 시작하며...  (4) 2013.12.11
Designed by Tistory.