프로그래밍/파이썬 개념

[python]3. 숫자형과 문자열 자료형

Cycrypt0 2018. 12. 22. 11:48
728x90

1. 숫자형


숫자형이란 숫자형태로 이루어진 자료형

123... 과 같은 정수, 8진수와 16진수같은것들을 포함


항목사용 예
정수123, -345, 0
실수123.45, -1234.5, 3.4e10
8진수0o34, 0o25
16진수0x2A, 0xFF

 출처 위키북스

1-1 정수형

정수를 뜻하는 자료형 (정수는 양의정수 음의정수 숫자 0을 포함한다) 즉 소숫점이 달려있지 않은 모든 숫자를 정수형이라고 보면 된다.


1-2 실수형

된파이썬에서 실수형은 소수점이 포함된 숫자를 말한다.

1.2 , -3.141592.. 이런것들이 포함된다.


실수를 표현하는 또다른 방법은 12.234E10 또는 12.234e10처럼 나타낼 수 있는데

여기서 e는 10의n승을 뜻한다 즉 위의 12.234E10은 12.234 * 10^10인 것이다.


2-1 8진수

8진수는 앞에 0o 또는 0O로 시작하면 된다 

예를 들면 a = 0o12 또는 a = 0O12 이런식으로 사용할 수 있다


2-2 16진수

16진수는 앞에 0x를 붙여주면 된다

예를 들면 a = 0x10이 있다.


숫자형을 사용하는 연산자

숫자형들간의 사칙연산은 모두 허용되며 (+, -, /, *) 

이외에도 제곱 연산, 나머지만 반환하는 모듈러 연산(%), 몫만 반환하는 몫 연산(//)등이 포함된다


2.문자열 자료형


2-1 문자열 자료형을 만드는 방법


가) 큰따옴표로 양쪽 둘러싸기

"Hello World"


나) 작은따옴표로 양쪽 둘러싸기

'Hello World'



이외에는 잘 사용되지 않으므로, 따로 소개하지는 않겠다.


단, 문자열 안에 따옴표를 넣어주고 싶다면 


'"Python is very easy." he says.'

위와같은 방법으로 따옴표를 넣어주면 오류가 나므로,  


'\"Python is very easy.\" he says.'

이런식으로 벡슬레시 '\'를 포함시켜준다  


2-2 이스케이프 시퀀스


코드설명
\n개행 (줄바꿈)
\t수평 탭
\\문자 "\"
\'단일 인용부호(')
\"이중 인용부호(")
\r캐리지 리턴
\f폼 피드
\a벨 소리
\b백 스페이스
\000

널문자


나무위키에서 소개된 이스케이프 시퀀스는 위 표와같은 종류가 있는데, 실제로 사용되는것들은 

개행 (줄바꿈) , 수평 탭, 백스페이스, 널문자 정도이지만, 지금은 개행과 수평탭 정도만 알아두고, 나중에 필요에 따라

정보를 찾아서 이용하면 된다.


우선 파이썬 IDLE를 켜고 대화형 쉘을 열어준 후 실습을 해보자

개행문자같은경우 print안에 묶여있는 경우만 기능을 하니 주의한다!


개행은 말그대로 문자의 줄을 바꿔주는 기능을 한다.


수평탭은 입력된 이후 탭키 (약 스페이스 4번)정도만큼이 띄어진 후 문자가 출력된다

2-2 문자열 인덱싱

여기부터는 매우매우 중요한 내용이다. 이 기능을 잘 이용한다면 굉장히 효율적이고 멋진 프로그램을 만들어 낼 수 있을것이다

파이썬 IDLE에 a = "HelloWorld"를 작성한 후 엔터를 쳐보자


이제 위 문자열을 보면 총 10글자로 이루어진 것을 알 수 있는데 파이썬 문자열에서는 이를 0번부터 9번까지의 번호로 나타낸다.

즉 문자열 길이를 n이라고 하면 총 고유번호의 길이는 0부터 n-1까지가 된다.

우리는 이러한 고유번호를 문자열의 인덱스라고 부른다.

지금부터는 이 인덱스를 가지고 노는법을 알려주겠다.


파이썬에 아래와같이 입력을 하고, 엔터를 쳐보자


1
2
>>= "HelloWorld"
>>a[1]
cs

 

결과로 아래와 같은 결과가 나오는 이유를 알 수 있다.

1
e
cs


그러면 난 분명히 첫번째 글자를 알고싶었는데 왜 두번째 글자가 나왔는지 궁금하면 위를 다시한번 꼼꼼히 읽어보기를 권한다.


그렇다 인덱스를 활용하기 위해서는 선언한 변수명옆에 대괄호를 붙이고 인덱스 번호를 달아주면 되는것이다.

따라서 즉 변수명[인덱스번호] 이러한 형태를 사용한다는 것이다.


만약 인덱스 번호를 음수값을 넣어주면 어떻게 될까?

(궁금한점이 있다면 바로바로 코드를 짜서 실행해보는 습관을 갖는것이 좋다)


1
2
3

>>> a = "HelloWorld"
>>> a[-1]
 
>>> 'd'
cs

다음과같이 실행을 해보니 문자열의 마지막 문자가 출력된것을 알 수 있다.

그럼 -1이 아니라 -3을 넣으면 r이 출력이 될까



1
2
3
4
>>> a = "helloworld"
>>> a[-3]
'r'

cs

 다음과 같이 보기좋게 r이 출력된것을 알 수 있다.

그러면 문자열 인덱싱은 어떤경우에 사용하는가?

아래 예시를 보자


"철수의 성적은 국어 8, 수학 1, 총합이 9점이다.


입력예시

802090


출력예시

국어성적 : 8

수학성적 : 1

총 합 : 9

파이썬에서 utf-8 인코딩이 잘 되지 않았던 관계로 부득이하게 영어로 작성한다


1
2
3
4
5
6
7
8
#-*- coding: utf-8 -*-
 
grade = "802090"
kor = grade[0]
mat = grade[2]
tot = grade[4]
print "kor :"+kor+"\nmat :"+mat+"\ntot :"+tot
 
cs


위 예시가 좋은 예시는 아니지만 위와같이 문자를 때서 생각할 수 있다는것을 보여준다

위 코드는 지금까지 설명한 내용들로만 구성이 되어있으므로 천천히 따라가면서 이해해보는것도 나쁘지 않다.

 

1
2
3
4
kor :8
mat :2
tot :9
>>> 
cs

그러면.. 단일 문자를 출력하는게아니라  Hello를 따로 떼서 출력을 하고싶은데 어떻게 해야할까?

거기부터는 문자열 슬라이싱의 개념이 들어간다.


2-3 문자열 슬라이싱

문자열 슬라이싱이란 자신이 설정한 범위 안의 문자만 가져오는 기능을 한다.

다시한번 HelloWorld를 변수안에 집어넣어준 후, 아래와같이 실행해보자


1
2
3
4
5
6
7
>>> a = "HelloWorld"
>>> a[0:4]
'Hell'
 
>>> a[0:5]
'Hello'
>>> 
cs

문자열 슬라이싱은 변수[시작인덱스:끝 인덱스]의 형태를 가지고있다


맨 처음 나는 Hello를 뽑아내기 위해 인덱스 번호부터 인덱스 번호까지 슬라이싱 하였으나, Hell만 나온것을 볼 수 있다

그 다음 시작 인덱스부터 끝 인덱스 번호 +1을 해주었더니 정상적으로 출력되는것을 알 수 있다.


이렇게 나오는 이유는 슬라이싱의 범위 때문인데

시작인덱스와 끝 인덱스의 범위는 

이기 때문이다.

즉 시작 인덱스 번호는 포함하지만 끝 인덱스번호는 포함하지 않기 때문에 위와같은 현상이 발생하는것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> a[:5]
'Hello'
# 처음부터 4까지 뽑아내는경우
 
>>> a[5:]
'World'
# 5부터 끝까지 뽑아내는 경우
 
>>> a[:]
'HelloWorld'
# 처음부터 끝까지 뽑아내는 경우
 
>>> a[3:-3]
'loWo'
# 3부터 -4 까지 뽑아낸다
 
>>> a[12:23]
''
#범위 밖을 초과하면 뽑아낼 수 는것이 없다.
cs


위는 인덱스를 뽑아내는 방법을 소개한다. 이를 참고하여 인덱스를 사용해보자

3. 관련 함수들

1. count [문자개수 세기]

1
2
3
>>> a = "helloworld"
>>> a.count('l')
3
cs


2. find[문자 위치 출력]

1
2
3
>>> a = "helloworld"
>>> a.find('l')
2
cs

3. index[문자 위치 출력 2]

1
2
3
>>> a = "helloworld"
>>> a.index('l')
2
cs

find와 index의 차이 > 문자열에 없는 문자를 검색시 find는 -1을 반환하지만, index는 오류가 발생한다

4. join[문자열 삽입]

1
2
3
>>> a = ","
>>> a.join('abcd')
'a,b,c,d'

cs


5. upper[대문자로 바꾸기]

1
2
3
= "hi"
>>> a.upper()
'HI'
cs


6. lower[소문자로 바꾸기]

1
2
3
>>> a = "HI"
>>> a.lower()
'hi'

cs


7. lstripe[왼쪽 공백 삭제]

1
2
3
>>> a = "   hihi    "
>>> a.lstrip()
'hihi 

cs


8. rstrip[오른쪽 공백 삭제]

1
2
3
>>> a.rstrip()
'   hihi'
 

cs


9. strip[양쪽 공백 삭제]

1
2
3
>>> a.strip()
'hihi'
 
cs

10. replace[문자열 바꾸기]

1
2
>>> a.replace("hihi","hello")
'hello'
cs

11. split[문자열 나누기]

1
2
>>> a.split(':')
['a''b''c''d']

cs


아래는 연습해보기 좋은 문제들을 추가하였다
[사칙연산]
https://www.acmicpc.net/step/2

[파이썬 인덱스 연습문제]
https://dojang.io/mod/page/view.php?id=2211



728x90