Programming 기초/Python

[Python 기초 #1] 기본 문법1 - 문자열, count, find, index,

코딩상륙작전 2023. 4. 12. 19:55

* 파이썬이란?

  • 1990년 암스테르담의 귀도 반 로섬(Guido Van Roasadd)이 개발한 인터프리터 언어. 본인이 좋아하는 코미디 쇼인 '몬티 파이썬의 날아디는 서커스(Monty Python's Flying Circus)'에서 따왔다고 함.
  • 사전적 의미는 고대 신화에 나오는 파르나소스 산의 동굴에 살던 큰 뱀을 뜻함. 알로 신이 델파이에서 파이썬을 퇴치했다는 이야기가 전해짐. 대부분의 파이썬 책 표지와 아이콘이 뱀 모양으로 그려진 이유.
  • 구글의 절반이상, 인스타그램, 파일 동기화 서비스 드롭박스(dropbox)등이 파이썬으로 제작.

 

* 파이썬의 문법

1. //는 몫을 구한다. /는 나누기를 실행한다.

2. 제곱은 **

a = 3
b = 4

print(a//b)
print(a/b)
print(a**b)
-------------------------------------
>> 0
>> 0.75
>> 81
-------------------------------------

2. %는 나머지를 구한다.

a = 30
b = 4

print(a % b)
--------------------------------
>> 2

3. 문자열 자료형

  • 큰 따옴표와 작은 따옴표 세 개씩 연속으로 쓰는 것도 문자열로 인식.
a = "Hello world1"
b = 'Hello world2'
c = """Hello world3"""
d = '''Hello world4'''

print(a)
print(b)
print(c)
print(d)
  • 문자열에 작은따옴표 혹은 큰 따옴표 포함시키기
a = "Python's favorite food is perl"
b = """Python's favorite food is perl"""
c = '''Python's favorite food is perl'''
d = '"Python is very easy."he says.'
e = '''"Python's favorite food is perl"he says.'''
f = 'Python\'s favorite food is perl'       # \는 이스케이프 코드

print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
  • 여러 줄인 문자열을 변수에 대입하고 싶을 때 (파이썬은 기본적으로 한 줄씩 실행하기 때문에 c언어처럼 엔터로 줄을 늘려 쓸 수 없다.)
multiline = "Life is too short\nYou need python"
multiline2 = """Life is too short
You need python"""
multiline3 = '''Life is too short
You need python'''

print(multiline)
print(multiline2)
print(multiline3)
--------------------------------------
Life is too short
You need python
Life is too short
You need python
Life is too short
You need python
---------------------------------------
  • 문자열 연산하기 (파이썬의 장점)
head = "Python"
tail = " is fun!"

print(head + tail)

print(head*2)
------------------------------------
Python is fun!
PythonPython
------------------------------------
  • 문자열 길이 구하기
head = "Life"
tail = " is too short"

print(len(head + tail))
#len()함수는 print 함수처럼 파이썬의 기본 내장 함수. 띄어쓰기도 센다.
  • 문자열 인덱싱과 슬라이싱
# 문자열 인덱싱

head = "Life"
tail = " is too short"

print((head + tail)[2])	# 파이썬은 0부터 숫자를 센다.
print((head + tail)[-1])	# -를 붙이면 거꾸로 위치를 센다.
print((head + tail)[-0])	# 0과 -0은 똑같다.
-------------------------------------------------------------------
f
t
L

슬라이싱은 a[이상 : 미만 : 간격]의 형식이다.

head = "Life"
tail = " is too short"

print((head + tail)[0:4])
print((head + tail)[:8:2])	# 비어두면 처음부터 시작을 의미
print((head + tail)[::3])
print((head + tail)[::-1])	# 뒤에서부터 역순으로 출력
print((head + tail)[:5:-1])	
print((head + tail)[5::-1])
print((head + tail)[0::-1])
------------------------------------------------------------------
Life
Lf s
Lesosr
trohs oot si efiL
trohs oot s
i efiL
L

*문자열 자료형은 그 요솟값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다.

  • 문자열 포매팅(formatting)
a = "I eat %d apples." % 3
b = "I eat %s apples." % "five"  # 문자열 대입에는 %s를 써야한다.

number = 2
c = "I eat %d apples." % number

d = "I eat %d apples and %s oranges" % (number, "five")	#두 개 이상의 값을 넣을 때 괄호와 콤마로 구분

print(a)
print(b)
print(c)
print(d)

-----------------------------------------------------------------------
I eat 3 apples.
I eat five apples.
I eat 2 apples.
I eat 2 apples and five oranges
  • 문자열 포맷 코드(c언어와 같다)
코드 설명
%s 문자열(String)
%c 문자 1개(Character)
%d 정수(Integer)
%f 부동 소수(Floating-point)
%o 8진수
%x 16진수
%% Literal%(문자 '%' 자체)

* %s 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있다.

a = "I eat %d apples" % 3
b = "rate is %s" % 3.234

print(a)
print(b)
----------------------------------
I eat 3 apples
rate is 3.234
  • 정렬과 공백, 소수점 표현
a = "%10s" % "hi"   # 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 앞의 나머지는 공백으로 남겨 두라.
b = "%-10s TOM" % "hi"  # 왼쪽 정렬.
c = "%0.4f" % 3.141592   # 소수점 네 번째 자리까지만 표현.
d = "%10.4f" % 3.141592  # 오른쪽 정렬과 소수점 네번째 자리까지만 표시

print(a)
print(b)
print(c)
print(d)
------------------------------------------------------------------
        hi
hi         TOM
3.1416
    3.1416
  • format 함수를 사용한 포매팅
  • 2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다.
  • 이름으로도 넣을 수 있다.
number = 3

a = "I ate {0} apples. so I was sick for {1} days.".format(number, "three")
b = "I ate {0} apples. so I was sick for {name}days.".format(12, name=3)
# 키워드 인자는 마지막에 넣어야 함.
c = "I ate {name} apples. so I was sick for {0}days.".format(2, name=4)

d = "{0:>10}".format("hi")  # 오른쪽 정렬

e = "{0:^10}".format("hi")  # 가운데 정렬

f = "{0:=<10}".format("hi")  # 왼쪽 정렬 및 공백 채우기

g = "{0:0.4f}".format(3.4123456)    # 소수점 4자리까지 표기

h = "{0:10.4f}".format(3.4123456)   # 자릿수를 10으로 맞춤

print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
-------------------------------------------------------------------------
I ate 3 apples. so I was sick for three days.
I ate 12 apples. so I was sick for 3days.
I ate 4 apples. so I was sick for 2days.
        hi
    hi
hi========
3.4123
    3.4123
  • f 문자열 포매팅(파이썬 3.6부터 지원)
age = 30
a = f'나는 내년이면 {age+1}살이 된다.'
print(a)
---------------------------------------
나는 내년이면 31살이 된다.

 

* 자주 쓰이는 문자열 함수 

  • count 함수 : 문자 개수 세기
>>> a = "hobby"
>>> a.count('b')
2
  • find 함수 : 찾는 문자 중 처음으로 나온 위치를 반환한다. 문자나 문자열이 존재하지 않는다면 -1을 반환.
>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1
  • index 함수 : 위치 반환. 못 찾을 시 오류 발생.
>>> 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 문자열 각각의 문자 사이에 ','를 삽입.
>>> ",".join('abcd')
'a,b,c,d'
>>> ",".join(['a', 'b', 'c', 'd'])
'a,b,c,d'
  • upper 함수 : 소문자를 대문자로 바꾸기
>>> a= "hi"
>>> a.upper()
'HI'
  • lower 함수 : 대문자를 소문자로 바꾸어 준다.
>>> a= "HI"
>>> a.lower()
'hi'
  • split 함수 : 괄호 안의 값을 구분자로 해서 문자열을 나누어 준다. 괄호 안 공백시 스페이스, 탭, 엔터 기준으로 나눔.
>>> a= "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']

>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
  • replace 함수 : replace(바뀌게 될 문자열, 바꿀 문자열) 형식으로 특정한 값을 다른 값으로 치환.
>>> a= "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
  • lstrip 함수 : 왼쪽 공백 지우기
>>> a = "   hi  "
>>> a.lstrip()
'hi  '
  • rstrip 함수 : 오른쪽 공백 지우기
>>> a = "   hi  "
>>> a.rstrip()
'   hi'
  • strip 함수 : 양쪽 공백 지우기
>>> a = "   hi  "
>>> a.strip()
'hi'