- 어떤 프로그래밍 언어이든 그 언어의 자료형을 알고 이해할 수 있다면 이미 그 언어의 절반을 터득한 것이나 다름없다.
- 자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻한다.
숫자형(Number)이란 숫자 형태로 이루어진 자료형으로, 우리가 이미 잘 알고 있는 것이다.
- 123과 같은 정수, 12.34 같은 실수, 8진수나 16진수도 있다.
다음 표는 파이썬에서 숫자를 어떻게 사용하는지 간략하게 보여준다.
항목 | 파이썬 사용 예 |
---|---|
정수 | 123,-345,0 |
실수 | 123.45, -123.45, 3.4e10 |
8진수 | 0o34, 0o25 |
16진수 | 0x2A, 0xFF |
>>> a = 123
>>> a = -178
>>> a = 0
>>> a = 1.2
>>> a = -3.45
>>> a = 4.24E10
>>> a = 4.24e-10
>>> a = 0o177
>>> print(a)
127
>>> a = 0x8ff
>>> b = 0xABC
>>> print(b)
2748
>>> a = 3
>>> b = 4
>>> a + b
7
>>> a - b
-1
>>> a * b
12
>>> a / b
0.75
**
연산자가 있다.x ** y
처럼 사용했을 때 $ 값을 나타낸다.>>> a = 3
>>> b = 4
>>> a ** b
81
%
연산자>>> 7 % 3
1
>>> 3 % 7
3
>>> 7 / 4 # 그냥 나누기
1.75
7 // 4
1
>>> a = 1
>>> a = a + 1 # a + 1로 계산된 값을 다시 a에 대입한다.
>>> print(a)
2
>>> a += 1 #a = a + 1 과 같은 표현이다.
복합 연산자에는 다음과 같은 것들이 있다.
- +=
- -=
- *=
- /=
- //=
- %=
- **=
문자열(string)이란 연속된 문자들의 나열을 말한다.
- "123" "a" <- 큰따옴표로 둘러싸여 있으면 모두 문자열이라고 보면 된다.
>>> A = "Hello' World"
>>> A
Hello' World
>>> A = 'Hel\'lo World'
>>> B = "Hel\"lo World"
>>> A
>>> B
Hel\'lo World
Hel\"lo World
/
)를 작은따옴표나 큰따옴표 앞에 삽입하면 역슬래시 뒤의 작은따옴표나 큰따옴표는 문자열을 둘러싸는 기호의 의미가 아니라 '나 " 자체를 뜻하게 된다.\n
삽입하기Hello
world
>>> A = "Hello\n World"
\n
을 삽입하는 방법이 있지만, 읽기가 불편하고 줄이 길어지는 단점이 있다.>>> A = '''
... Hello
... World
... '''
>>> A = """
... Hello
... World
... """
>>> print(A)
Hello
World
이스케이프 코드란?
문자열 예제에서 여러 줄의 문장을 처리할 때 역슬래시 문자와 소문자 n을 조합한
\n
이스케이프 코드를 사용했다.
이스케이프(escape)코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 '문자 조합'을 말한다.
주로 출력물을 보기 좋게 정렬하는 용도로 사용한다.
몇 가지 이스케이프 코드를 정리하면 다음과 같다.
코드 | 설명 |
---|---|
\n | 문자열 안에서 줄을 바꿀 때 사용 |
\t | 문자열 사이에 탭 간격을 줄 때 사용 |
\ \ | \ 를 그대로 표현할 때 사용 |
\' | 작은따옴표(')를 그대로 표현할 때 사용 |
\" | 큰따옴표(")를 그대로 표현할 때 사용 |
\r | 캐리지 리턴(줄 바꿈 문자, 커서를 현재 줄의 가장 앞으로 이동) |
\f | 폼 피드(줄 바꿈 문자, 커서를 줄의 다음 줄로 이동 |
\a | 벨 소리(출력할 때 PC 스피커에 '삑' 소리가 난다 |
\b | 백 스페이스 |
\000 | 널 문자 |
\n,\t,\ \,\',\"
이다. 나머지는 잘 사용하지 않는다.>>> head = "python"
>>> tail = "is fun!"
>>> head + tail
python is fun!
>>> a = "python"
>>> a * 2
pythonpython
a * 2
라는 문장은 a를 2번 반복하라는 뜻이다.*
은 문자열의 반복을 뜻하는 의미로 사용되었다.>>> print("=" * 50)
>>> print("My Program")
>>> print("=" * 50)
==================================================
My Program
==================================================
문자열의 길이에는 공백 문자도 포함된다.
>>> a = "Hello World"
>>> len(a)
11
>>> a = "Life is too short, You need Python"
>>> a = "Life is too short, You need Python"
>>> a[3]
e
>>> a = "Life is too short, You need Python"
>>> a[0]
>>> a[12]
>>> a[-1]
L
s
n
>>> a = "Life is too short, You need Python"
>>> b = a[0] + a[1] + a[2] + a[3]
>>> b
Life
인덱싱 기법과 슬라이싱 기법은 뒤에서 배울 자료형인 리스트나 튜플에서도 사용할 수 있다.
>>> a = "Life is too short, You need Python"
>>> a[0:4]
Life
a[start:end:step]
>>> a[5:7]
>>> a[12:17]
is
short
>>> a[19:]
You need python
>>> a[:17]
Life is too short
>>> a[:]
Life is too short, You need python
>>> a[19:-7]
You need
>>> a = "Pithon"
>>> a[1] = 'y'
즉, a 변수에 "Pithon" 문자열을 대입하고 a[1]의 값이 i이므로 a[1]을 y로 바꾸어 준다는 생각이다.
하지만 결과는 오류가 발생한다. -> 문자열의 요솟값은 바꿀 수 있는 값이 아니기 때문이다.
하지만 앞에서 배운 슬라이싱 기법을 사용하면 Pithon 문자열을 사용해 Python 문자열을 만들 수 있다.
>>> a = "Pithon"
>>>a[:1] + 'y' + a[2:]
python
"현재 온도는 18도 입니다."
시간이 지나서 20도가 되면 다음 문장을 출력해보자
"현재 온도는 20도 입니다."
1. 숫자 바로 대입
>>> "I eat %d apples." % 3
I eat 3 apples.
2. 문자열 바로 대입
>>> "I eat %s apples." %"five"
I eat five apples.
앞에서 배운 것 처럼 문자열을 대입할 때는 반드시 큰따옴표나 작은따옴표를 써야 한다.
3. 숫자 값을 나타내는 변수로 대입
>>> number = 3
>>> "I eat %d apples." % number
I eat 3 apples.
4.2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> I ate %d apples. so I was sick for %s days.: %(number, day)
I ate 10 apples. so I was sick for three days.
코드 | 설명 |
---|---|
%s | 문자열(String) |
%c | 문자 1개(character) |
%d | 정수(integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal %(문자 % 자체) |
>>> "I have %s apples" %3
I have 3 apples
>>> "rate is %s" %3.234
rate is 3.234
>>> "Error is %d%." %98
>>> "Error is %d%%." % 98
Error is 98%
앞에서 살펴보았듯이 %d,%s등과 같은 포맷 코드는 문자열 안에 어떤 값을 삽입할 때 사용한다.
하지만 포맷 코드를 숫자와 함께 사용하면 더 유용하다.
>>> "%10s" % "hi"
hi
>>> "%-10sjane." % 'hi'
hi jane.
>>> "%0.4f" % 3.42134234
3.4213
>>> "%10.4f" % 3.42134234
3.4213
>>> "I eat {0} apples".format(3)
I eat 3 apples
>>> "I eat {0} apples".format("five")
I eat five apples
>>> number = 3
>>> "I eat {0} apples".format(number)
I eat 3 apples
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
I ate 10 apples. so I was sick for three days.
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
I ate 10 apples. so I was sick for 3 days.
>>> "I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
I ate 10 apples. so I was sick for 3 days.
>>> "{0:<10}".format("hi")
hi
>>> "{0:>10}".format("hi")
hi
>>> "{0:^10}".format("hi")
' hi '
>>> "{0:=^10}".format("hi")
'====hi===='
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
3.4213
>>> "{0:10.4f}".format(y)
' 3.4213'
>>> "{{ and }}".format()
{ and }
파이썬 3.6버전부터는 f문자열 포매팅 기능을 사용할 수 있다. 파이썬 3.6 미만 버전에서는 사용할 수 없다.
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
나의 이름은 홍길동입니다. 나이는 30입니다.
>>> age = 30
>>> f'나는 내년이면 {age + 1}살이 된다.'
나는 내년이면 31살이 된다.
>>> d = {'name':'홍길동','age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
나의 이름은 홍길동입니다. 나이는 30입니다.
딕셔너리는 Key와 Value라는 것을 한 쌍으로 가지는 자료형이다.
>>> f'{"hi":<10}' # 왼쪽 정렬
'hi '
>>> f'{"hi":>10}' # 오른쪽 정렬
' hi'
>>> f'{"hi":^10}' # 가운데 정렬
' hi
>>> f'{"hi":=^10}' # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}' # 왼쪽 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'
>>> y = 3.42134234
>>> f'{y:0.4f}' # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}' # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
' 3.4213'
>>> f'{{and}}'
{and}
문자열 자료형은 자체적으로 함수를 가지고 있다.
- 이들 함수를 다른 말로 '문자열 내장 함수'라고 한다.
- 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에'.'를 붙인 후 함수 이름을 써 주면 된다.
- 이제 문자열 내장 함수에 대해 알아보자!
>>> a = "hobby"
>>> a.count('b')
2
>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1
파이썬은 숫자를 0부터 세기 때문에 b의 위치는 15가 아닌 14가 된다.
>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> ",".join('abcd')
'a,b,c,d'
>>> ",".join(['a', 'b', 'c', 'd'])
a,b,c,d
>>> a = "hi"
>>> a.upper()
HI
>>> a = "HI"
>>> a.lower()
hi
>>> a = " hi "
>>> a.lstrip()
'hi '
>>> a= " hi "
>>> a.rstrip()
' hi'
>>> a = " hi "
>>> a.strip()
'hi'
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
>>> a = 'hi'
>>> a.upper()
'HI'
>>> a = a.upper()
>>> a
'HI'
upper 뿐만 아니라 lower, join, lstrip, rstrip, replace, split 함수는 모두 이와 같은 규칙이 적용되어 문자열 자체의 값이 변경되는 것이 아니라 변경된 값을 리턴한다는 사실에 주의하자