- 단순히 파이썬을 실행시키면, 아래와 같이 창이 뜨고 파이썬 대화형 인터프리터라고 부른다. 파이썬 대화형 인터프리터를 간단히 파이썬 셸(Python shell)이라고도 부른다. 3개의 꺾은 괄호(>>>)는 프롬프트(prompt)라고 한다.
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
- 셀에서는 아래처럼 변수만 입력해도 내부에 repr이라는 함수가 실행되어 출력이 된다.
>>> a = 'Python'
>>> a
'Python'
>>> print(a)
Python
- 반면에 print를 사용하면 내부적으로 str 함수, 문자열로 바꿔주기 때문에 따옴표가 사라진다.
- 파이썬 IDLE 에디터는 파이썬을 설치할 때 기본적으로 설치되는 툴이다.
- 해당 IDLE은 크게 셀 창 / 에디터 창으로 나뉜다.
- 셀 창은 파이썬 셀과 동일한 기능을 수행한다. 에디터 창은 IDLE 에디터가 실행되는 곳이다. File - New File를 선택하면 IDLE 에디터 창이 뜨게 된다. 해당 화면에서 코드를 입력하고 Run - Run Module를 입력하면 코드가 실행된다.
- 일반적으로 실제 업무에서는 명령 프롬프트 창에서 코드들을 실행한다. 그래서 명령 프롬프트를 이용해 파이썬 파일을 실행시킬 수 있다. 맥에서는 터미널이라는 이름으로 실행된다.
- 파이썬 파일이 있는 디렉터리에서
kimsangbaek@Ahgusals doit % python3 doit.py
Hello world!
- 이렇게 실행시킬 수 있다.
- 일반적으로 실무에서는 IDLE 보다 더 많은 기능들을 갖춘 전문 에디터를 사용한다.
- Vscode, PyCharm
>>> a = 4.24E10
>>> a = 4.24e-10
- 다음과 같은 실수형은 "컴퓨터식 지수 표현 방식"으로 파이썬에서는 4.24e10 또는 4.24E10처럼 표현한다(e와 E 둘 중 어느 것을 사용해도 무방하다). 여기서 4.24E10은 4.24 * 10의 10승 , 4.24e-10은 4.24 * 10의 -10승을 의미한다.
>>> 7 % 3
1
>>> 3 % 7
3
- 3을 7로 나누면 나머지는 3이 된다.
- 주석문이 여러 줄이라면
"""
주석문이 여러 줄일 때
이렇게 사용하자!
"""
- 여러 줄로 이루어진 주석은 큰따옴표 세 개를 연속으로 사용한 """ 기호 사이에 주석문을 작성하면 된다. 큰따옴표 대신 작은따옴표 세 개(''')를 사용해도 된다.
- 문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다.
- 따옴표로 둘러싸여 있으면 모두 문자열이라고 보면 된다.
"Life is too short, You need Python"
"a"
a = "123"
print(a)
123
- 파이썬에서 문자열을 만드는 방법은 총 4가지로, 큰따옴표(")로 양쪽 둘러싸기 / 작은따옴표(')로 양쪽 둘러싸기 / 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기 / 작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기가 있다.
- 문자열에 작은따옴표 (') 포함시킬 때는 문자열을 큰따옴표로 둘러싸야 한다. 큰따옴표 안에 들어 있는 작은따옴표는 문자열을 나타내기 위한 기호로 인식되지 않는다.
food = "Python's favorite food is perl"
- 문자열에 큰따옴표 (") 포함시킬 때는 문자열을 작은따옴표(')로 둘러싸면 된다.
say = '"Python is very easy." he says.' 작은따옴표(') 안에 사용된 큰따옴표(")는 문자열을 만드는 기호로 인식되지 않는다.
- 백슬래시()를 사용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시킬수도 있다. 백슬래시()를 작은따옴표(')나 큰따옴표(") 앞에 삽입하면 백슬래시() 뒤의 작은따옴표(')나 큰따옴표(")는 문자열을 둘러싸는 기호의 의미가 아니라 문자 ('), (") 그 자체를 뜻하게 된다.
food = 'Python\'s favorite food is perl'
say = "\"Python is very easy.\" he says."
- 줄을 바꾸기 위한 이스케이프 코드 \n를 삽입할 수 있다.
multiline = "Life is too short\nYou need python"
print(multiline)
Life is too short
You need python
- 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""")를 사용해서 변수를 정의할 수 있다.
multiline = '''Life is too short
You need python'''
print(multiline)
Life is too short
You need python
multiline = """Life is too short
You need python"""
print(multiline)
Life is too short
You need python
- 이스케이프 코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합"이다. 주로 출력물을 보기 좋게 정렬하는 용도로 사용한다.
- +연산자를 이용해서 문자열끼리 합칠 수 있다.
head = "Python"
tail = " is fun!"
print(head + tail)
Python is fun!
- *연산자를 이용해서 특정 문자열을 반복시킬 수 있다.
a = "python"
print(a * 2)
pythonpython
print("=" * 50)
print("My Program")
print("=" * 50)
==================================================
My Program
==================================================
- len 함수를 사용하면 공백을 포함해서 문자열의 길이를 구할 수 있다.
a = "Life is too short"
print(len(a))
17
- 인덱싱(Indexing)이란 무엇인가를 "가리킨다"는 의미이고, 슬라이싱(Slicing)은 무엇인가를 "잘라낸다"는 의미이다.
a = "Life is too short, You need Python"
Life is too short, You need Python
0 1 2 3
0123456789012345678901234567890123
- 다음과 같이 변수 a에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같다. L은 첫 번째 자리를 뜻하는 숫자 0, 바로 다음인 i는 1 이런 식으로 계속 번호를 붙인 것이다. 중간에 있는 short의 s는 12가 된다.
a = "Life is too short, You need Python"
print(a[3])
e
- 그래서 이렇게 문자열[번호] 는 문자열 안의 특정한 값을 뽑아내는 역할을 한다. 이러한 작업을 인덱싱이라고 한다.
a = "Life is too short, You need Python"
print(a[-1])
n
- 이렇게 a[-1]은 뒤에서부터 세어 첫 번째가 되는 문자를 출력해준다. 즉, 문자열을 뒤에서부터 읽기 위해 마이너스(-) 기호를 붙이는 것이다.
- 뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 "a[-0]이라고 해야 하지 않을까?"라는 의문이 들 수도 있겠지만 -> 0과 -0은 똑같은 것이기 때문에 a[-0]은 a[0]과 똑같은 값을 보여 준다.
a = "Life is too short, You need Python"
print(a[0:4])
Life
-
a[0:4]가 뜻하는 것은 a 문자열, 즉 "Life is too short, You need Python" 문장에서 자리 번호 0부터 3까지의 문자를 뽑아낸다는 뜻이다.
- 단, 슬라이싱 기법으로 a[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않는다.
-
a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.
a = "Life is too short, You need Python"
print(a[19:])
You need Python
- a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
a = "Life is too short, You need Python"
print(a[:17])
Life is too short
- a[시작 번호:끝 번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다.
a = "Life is too short, You need Python"
print(a[:])
Life is too short, You need Python
- 슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.
a = "Life is too short, You need Python"
print(a[19:-7])
You need
-
a[19:-7]이 뜻하는 것은 a[19]에서부터 오른쪽 방향으로 하나씩 포함하다가 a[-8]에 해당하는 문자열까지 포함해서 출력한다는 의미이다.
-
"Pithon"이라는 문자열을 "Python"으로 바꾸려면?
a = "Pithon"
a[1] = "y"
print(a)
TypeError: 'str' object does not support item assignment
- 이렇게 a[1]를 바꿔주면 되지 않을까 생각할 수 있지만, 에러가 난다. 문자열의 요솟값은 바꿀 수 있는 값이 아니기 때문이다(문자열 자료형은 그 요솟값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다).
- 하지만 앞에서 살펴본 슬라이싱 기법을 사용하면 Pithon 문자열을 사용해 Python 문자열을 만들 수 있다.
a = "Pithon"
b = a[:1]
c = a[2:]
print(b + "y" + c)
Python
- 문자열 안의 특정한 값을 바꿔야 할 경우가 있을 때 이것을 가능하게 해주는 것이 바로 문자열 포매팅 기법이다.
- 쉽게 말해 문자열 포매팅이란 문자열 안에 어떤 값을 삽입하는 방법이다.
print("I eat %d apples." % 3)
I eat 3 apples.
- 이렇게 문자열 안에서 숫자를 넣고 싶은 자리에 %d 문자를 넣어 주고, 삽입할 숫자 3은 가장 뒤에 있는 % 문자 다음에 써 넣었다. 여기에서 %d는 문자열 포맷 코드라고 부른다.
print("I eat %s apples." % "five")
I eat five apples.
- 문자열 안에 또 다른 문자열을 삽입하기 위해 앞에서 사용한 문자열 포맷 코드 %d가 아닌 %s를 썼다.
- 즉, 숫자를 넣기 위해서는 %d를 써야 하고, 문자열을 넣기 위해서는 %s를 써야 한다.
number = 3
print("I eat %d apples." % number)
I eat 3 apples.
- 이렇게 숫자 값을 나타내는 변수를 대입해도 된다.
number = 10
day = "three"
print("I ate %d apples. so I was sick for %s days." % (number, day))
I ate 10 apples. so I was sick for three days.
- 문자열 안에 1개가 아닌 여러 개의 값을 넣고 싶을 땐, 마지막 % 다음 괄호 안에 콤마(,)로 구분하여 각각의 값을 넣어 주면 된다.
- 예시에서는 정수와 문자열만 대입하는 것으로 해봤으나, 이 외에도 다양한 것들을 대입할 수 있다.
- 그런데, %s 포맷 코드의 경우, 어떤 형태의 값이든 변환해 넣을 수 있다.
print("I have %s apples." % 3)
print("rate is %s." % 3.234)
I have 3 apples.
rate is 3.234.
- 위의 코드에서 원래는 3을 문자열 안에 삽입하려면 %d를 사용하고, 3.234를 삽입하려면 %f를 사용해야 하지만 -> %s를 사용하면 자동으로 % 뒤에 있는 값을 문자열로 바꾸기 때문에 상관이 없다.
print("Error is %d%" % 98)
ValueError: incomplete format
- 위와 같이 입력하면 98%가 출력될 것 같지만, 오류가 발생한다.
- 정수 포맷 코드인 %d와 %가 같은 문자열 안에 존재하는 경우, %를 나타내려면 반드시 %%로 써야 하는 법칙이 있기 때문이다. 따라서 우리가 원하는 대로 실행하려면, 아래와 같이 해야한다.
print("Error is %d%%" % 98)
Error is 98%
- %d, %s 등의 포맷 코드는 문자열 안에 어떤 값을 삽입하기 위해 사용한다. 하지만 포맷 코드를 숫자와 함께 사용하면 더 유용하게 사용할 수 있다.
print("%10s" % "hi")
hi
- 다음과 같이 %10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미로 사용할 수 있다.
print("%-10sjane." % "hi")
hi jane.
- 그리고 %-10s은 반대로 전체 길이가 10개인 문자열 공간에서 대입되는 값을 왼쪽으로 정렬하고 뒤의 나머지는 공백으로 남겨두게 된다.
print("%0.4f" % 3.42134234)
3.4213
- 3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우 위와 같이 사용할 수 있다.
- 여기서 .점은 소수점 포인트를 의미하고 그 뒤에 4는 소수점 뒤에 4자리를 의미한다. f는 소수점이니까 사용한다.
print("%10.4f" % 3.42134234)
3.4213
- 이렇게 %10.4f로 사용하면, 전체 길이가 10개인 문자열 공간에서 해당 숫자를 4자리까지만 표시하고 오른쪽으로 정렬해주게 된다.
- 문자열의 format 함수를 사용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다.
print("I eat {0} apples.".format(3))
I eat 3 apples.
- 이렇게 {0} 부분이 숫자 3으로 바뀌게 된다.
print("I eat {0} apples.".format("five"))
I eat five apples.
- 또한, 이렇게 {0} 부분을 five 라는 문자열로 바꿀 수 있다.
number = 3
print("I eat {0} apples.".format(number))
I eat 3 apples.
- 그리고 숫자 값을 가진 변수를 이용할 수도 있다.
number = 10
day = "three"
print("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.
- 이렇게 2개 이상의 값을 넣을 수도 있다. 문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다. 즉 위 예에서 {0}은 format 함수의 첫 번째 입력값인 number로 바뀌고 {1}은 format 함수의 두 번째 입력값인 day로 바뀐다.
print("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.
- 마지막으로 {name} 형태로 넣을 수 있다. 이 때는 format 함수에는 반드시 name=value 와 같은 형태의 입력값이 있어야만 한다.
print("'{0:<10}'".format("hi"))
'hi '
- 먼저 왼쪽 정렬이다. :<10 표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.
print("'{0:>10}'".format("hi"))
' hi'
- 그리고 오른쪽 정렬이다. :>을 사용하면 되고 화살표 방향을 생각하면 어느 쪽으로 정렬되는지 바로 알 수 있다.
print("'{0:^10}'".format("hi"))
' hi '
- 또한 가운데 정렬도 된다. :^ 기호를 사용하면 가운데 정렬도 가능하다.
print("'{0:=^10}'".format("hi"))
print("'{0:!<10}'".format("hi"))
'====hi===='
'hi!!!!!!!!'
- 이렇게 정렬할 때 공백 문자 대신에 지정한 문자 값으로 채워 넣는 것도 가능하다. 채워 넣을 문자 값은 정렬 문자 <, >, ^ 바로 앞에 넣어야 한다. 위 예에서 첫 번째 예제는 가운데(^)로 정렬하고 빈 공간을 = 문자로 채웠고, 두 번째 예제는 왼쪽(<)으로 정렬하고 빈 공간을 ! 문자로 채웠다.
y = 3.42134234
print("'{0:0.4f}'".format(y))
'3.4213'
- 이제는 소수점 표현이다. 해당 예시는 format 함수를 사용해 소수점을 4자리까지만 표현하는 방법이다.
y = 3.42134234
print("'{0:10.4f}'".format(y))
' 3.4213'
- 추가로 이렇게 자릿수를 10으로 맞출 수도 있다. 역시 앞에서 살펴본 10.4f의 표현식을 그대로 사용한 것을 알 수 있다.
print("{{and}}".format())
{and}
- 위의 코드처럼 format 함수를 사용해 문자열 포매팅을 할 경우 { }와 같은 중괄호(brace) 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 {{ }}처럼 2개를 연속해서 사용하면 된다.
- 파이썬 3.6 버전부터는 f 문자열 포매팅 기능을 사용할 수 있다.
- 아래와 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있다.
name = '홍길동'
age = 30
print(f'나의 이름은 {name}입니다. 나이는 {age}입니다.')
나의 이름은 홍길동입니다. 나이는 30입니다.
- f 문자열 포매팅은 위와 같이 name, age와 같은 변수 값을 생성한 후에 그 값을 참조할 수 있다.
name = '홍길동'
age = 30
print(f'나의 이름은 {name}입니다. 나이는 {age+1}입니다.')
나의 이름은 홍길동입니다. 나이는 31입니다.
- 또한, 이렇게 f 문자열 포매팅은 표현식을 지원하기 때문에 문자열 안에서 변수와 +, -와 같은 수식을 함께 사용할 수 있다.
d = {'name':'홍길동', 'age':30}
print(f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.')
나의 이름은 홍길동입니다. 나이는 30입니다.
- 딕셔너리는 f 문자열 포매팅에서 위와 같이 사용할 수 있다.
print(f"'{'hi':<10}'")
print(f"'{'hi':>10}'")
print(f"'{'hi':^10}'")
'hi '
' hi'
' hi '
-
그리고 f 포메팅에서는 이렇게 정렬을 할 수 있다.
-
f 포메팅으로 공백 채우기와 소수점은 아래와 같이 할 수 있다.
# 가운데 정렬하고 '=' 문자로 공백 채우기
print(f'{"hi":=^10}')
# 왼쪽 정렬하고 '!' 문자로 공백 채우기
print(f'{"hi":!<10}')
====hi====
hi!!!!!!!!
# 소수점 4자리까지만 표현
y = 3.42134234
print(f'{y:0.4f}')
# 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
print(f'{y:10.4f}')
3.4213
3.4213
-
문자열 자료형은 자체적으로 함수를 가지고 있다. 이들 함수를 다른 말로 문자열 내장 함수라 한다. 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에 ‘.’를 붙인 다음에 함수 이름을 써주면 된다.
-
문자 개수 세기(count)
a = "hobby"
# b의 개수를 세기
print(a.count('b'))
- 위치 알려주기1(find)
a = "Python is the best choice"
print(a.find('b'))
print(a.find('k'))
14
-1
# 문자열 중 문자 b가 처음으로 나온 위치의 인덱스를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.
# 파이썬은 숫자를 0부터 세기 때문에 b의 위치는 15가 아닌 14가 된다.
- 위치 알려주기2(index)
a = "Python is the best choice"
print(a.index('b'))
print(a.index('k'))
14
ValueError: substring not found
# 문자열 중 문자 b가 처음으로 나온 위치의 인덱스를 반환한다.
# 앞의 find 함수와 다른 점은 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점이다.
- 문자열 삽입(join)
ganadara = ",".join('abcd')
print(ganadara)
a,b,c,d
# abcd 문자열의 각각의 문자 사이에 ','를 삽입한다.
- 소문자를 대문자로 바꾸기(upper)
a = "hi"
b = a.upper()
print(a)
print(b)
hi
HI
# a는 그대로 소문자이고 새롭게 변수를 설정해서 출력해야 확인할 수 있다. 대문자를 소문자로 바꿀 때는 lower 함수를 사용하면 된다.
- 왼쪽 공백 지우기(lstrip)
a = " hi "
b = a.lstrip()
print(b)
hi
# 문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left를 의미한다. 오른쪽 공백을 지울 때는 rstrip를 사용한다.
- 문자열 바꾸기(replace)
a = "Life is too short"
print(a.replace("Life", "Your leg"))
Your leg is too short
# replace(기존 문자열, 새로운 문자열)처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.
- 문자열 나누기(split)
a = "Life is too short"
print(a.split())
b = "a:b:c:d"
print(b.split(':'))
['Life', 'is', 'too', 'short']
['a', 'b', 'c', 'd']
# split 함수는 a.split()처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 문자열을 나눠서 리스트를 만들어준다.
# 만약 b.split(':')처럼 괄호 안에 특정 값이 있을 경우에는 괄호 안의 값을 기준으로 문자열을 나눠서 리스트를 만들어준다.