πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[3νŒ€/μ΄μ§€ν˜„] 6μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - λ¬Έμžμ—΄

μ•Œ 수 μ—†λŠ” μ‚¬μš©μž 2023. 5. 4. 12:52

6μ°¨μ‹œ_λ¬Έμžμ—΄_κ°•μ˜μ•ˆ.pdf
0.54MB
6μ°¨μ‹œ_λ¬Έμžμ—΄_과제.pdf
0.22MB

λ³Έ κ°•μ˜ μžλ£ŒλŠ” 데이터 과학을 μœ„ν•œ 파이썬 ν”„λ‘œκ·Έλž˜λ°/μ΅œμ„±μ² μ„ μ°Έκ³ 

ν•˜μ—¬ μ œμž‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ–‹οΈ λ¬Έμžμ—΄μ˜ 이해

λ¬Έμžμ—΄μ˜ κ°œλ…

λ¬Έμžμ—΄(string)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€κ±°λ‚˜ 데이터λ₯Ό 뢄석할 λ•Œ 맀우 μ€‘μš”ν•˜κ²Œ λ‹€λ£¨μ–΄μ§€λŠ” μžλ£Œν˜• 쀑에 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ¬Έμžμ—΄μ€ λ¦¬μŠ€νŠΈμ™€ 같이 데이터λ₯Ό 순차적으둜 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” ν˜•μ‹μΈ μ‹œν€€μŠ€ μžλ£Œν˜•μž…λ‹ˆλ‹€.

λ¬Έμžμ—΄μ˜ 인덱싱

μ•žμ—μ„œ λ¬Έμžμ—΄μ€ μ‹œν€€μŠ€ μžλ£Œν˜•μ΄λΌκ³  μ„€λͺ…ν•˜μ˜€λŠ”λ°μš”. λ”°λΌμ„œ λ¬Έμžμ—΄μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜κ°€ λ°”λ‘œ μΈλ±μ‹±μž…λ‹ˆλ‹€. 리슀트처럼 κΈ€μž ν•˜λ‚˜ν•˜λ‚˜κ°€ μƒλŒ€μ μΈ μ£Όμ†Œλ₯Ό κ°€μ§€λŠ”λ°μš”, 이 μ£Όμ†Œλ₯Ό μ‚¬μš©ν•΄ μ €μž₯된 값을 κ°€μ Έμ˜€λŠ” 인덱싱을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, μ•„λž˜μ™€ 같이 λ¬Έμžμ—΄μ˜ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

μ‹€μ œ μ½”λ“œμ—μ„œλŠ” λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•©λ‹ˆλ‹€.

>>> a = "abcde"
>>> print(a[0], a[4])
a e
>>> print(a[-1], a[-5])
e a

μ½”λ“œλ₯Ό ν•΄μ„ν•˜λ©΄ λ³€μˆ˜ a에 κ°’ abcdeκ°€ λ“€μ–΄μžˆμ„ λ•Œ, a[0], 즉 a의 0번째 κ°’μœΌλ‘œ aκ°€ 좜λ ₯λ©λ‹ˆλ‹€. 그리고 λ§ˆμ°¬κ°€μ§€λ‘œ a의 4번째 κ°’μœΌλ‘œ eκ°€ 좜λ ₯λ©λ‹ˆλ‹€. μ—­μˆœμœΌλ‘œλ„ 인덱싱을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄μ˜ μŠ¬λΌμ΄μ‹±

μŠ¬λΌμ΄μ‹±μ€ λ¬Έμžμ—΄μ˜ μ£Όμ†Œκ°’μ„ μ΄μš©ν•΄ λ¬Έμžμ—΄μ˜ 뢀뢄값을 μΆ”μΆœν•΄λ‚΄λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.

>>> a = "TEAMLAB MOOC, AWESOME Python"
>>> print(a[0:6], " AND ", a[-9:]) 
TEAMLA AND ME Python
>>> print(a[:])
TEAMLAB MOOC, AWESOME Python
>>> print(a[-50:50])      # λ²”μœ„λ₯Ό λ„˜μ–΄κ°ˆ 경우 μžλ™μœΌλ‘œ μ΅œλŒ€ λ²”μœ„λ₯Ό 지정
TEAMLAB MOOC, AWESOME Python
>>> print(a[::2], " AND ", a[::-l])
TALBMO,AEOEPto AND nohtyP EMOSEWA ,C00M BALMAET

두 번째 쀄은 일반적인 인덱슀둜 ꡬ간을 λ‚˜λˆ„λŠ” κ²ƒμž…λ‹ˆλ‹€. a[0:6]은 0번째 μΈλ±μŠ€λΆ€ν„° 5번째 인덱슀 κΉŒμ§€λ₯Ό λœ»ν•˜λ©°, a[-9:]은 -9번째 μΈλ±μŠ€λΆ€ν„° λκΉŒμ§€λ₯Ό λœ»ν•©λ‹ˆλ‹€.

λ¦¬μŠ€νŠΈμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ¬Έμžμ—΄λ„ 맨 λ§ˆμ§€λ§‰ κΈ€μžμ˜ μΈλ±μŠ€κ°€ -1λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. λ„€ 번째 μ€„μ˜ a[:]처럼 μ•„μ˜ˆ 인덱슀 번호λ₯Ό 넣지 μ•Šκ±°λ‚˜, a[-50:50]처럼 인덱슀 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ„ κ²°κ³ΌλŠ” μ •μƒμ μœΌλ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

이 μŠ¬λΌμ΄μ‹±μ€ ‘λ³€μˆ˜[μ‹œμž‘ 인덱슀:μ’…λ£Œ 인덱슀:증가값]’κ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 8번째 μ€„μ˜ a[::2]λŠ” μ²˜μŒλΆ€ν„° λκΉŒμ§€ 두 κΈ€μžμ”© λ„μ–΄μ„œ 좜λ ₯ν•˜κ³ , a[::-1]은 κΈ€μžμ˜ μ—­μˆœμœΌλ‘œ 좜λ ₯ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

λ¬Έμžμ—΄μ˜ μ—°μ‚°

λ¬Έμžμ—΄λ„ 일반적인 λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 연산이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 기본적으둜 λ¬Έμžμ—΄μ˜ 연산은 리슀트 μ—°μ‚°κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

>>> a = "TEAM"
>>> b = "LAB"
>>> print(a + "" + b)            # λ§μ…ˆμœΌλ‘œ a와 b λ³€μˆ˜ μ—°κ²°ν•˜κΈ°
TEAM LAB
>>> print(a * 2 + "" + b * 2)    # κ³±ν•˜κΈ°λ‘œ 반볡 μ—°μ‚° κ°€λŠ₯
TEAMTEAM LABLAB
>>> if 'A' in a: print(a)        # 'A'κ°€ a에 ν¬ν•¨λ˜μ—ˆλŠ”μ§€ 확인
... else: print(b)
...
TEAM

μ„Έ 번째 쀄은 λ¬Έμžμ—΄μ˜ λ§μ…ˆ μ—°μ‚°μž…λ‹ˆλ‹€. λ§μ…ˆ 연산은 λͺ¨λ“  λ³€μˆ˜κ°€ λ¬Έμžμ—΄μΌ 경우 ν…μŠ€νŠΈ 뢙이기가 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 자주 ν•˜λŠ” μ‹€μˆ˜ 쀑 ν•˜λ‚˜κ°€ print( ) ν•¨μˆ˜μ—μ„œ μ •μˆ˜ν˜•κ³Ό λ¬Έμžμ—΄μ„ 같이 보여주렀고 ν•  λ•Œ λ°œμƒν•˜λŠ”λ°μš”. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λ§μ…ˆ 연산이 μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

>>> int_value = 2
>>> print("κ²°κ³ΌλŠ”" + int_value)

λ‹€μ„― 번째 쀄은 λ¬Έμžμ—΄μ˜ κ³±μ…ˆ μ—°μ‚°μž…λ‹ˆλ‹€. a * 2λ₯Ό ν’€λ©΄ a + a의 μ—°μ‚°μ΄λ―€λ‘œ, 같은 κΈ€μžκ°€ 두 번 좜λ ₯λ©λ‹ˆλ‹€.

일곱 번째 μ€„μ—μ„œλŠ” 포함 μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” in 연산을 ν•©λ‹ˆλ‹€. ν”νžˆ ifλ¬Έκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ”λ°μš”, νŠΉμ • λ¬Έμžκ°€ νŠΉμ • λ³€μˆ˜μ— λ“€μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” μ—°μ‚°μž…λ‹ˆλ‹€.

λ¬Έμžμ—΄ ν•¨μˆ˜

λ¬Έμžμ—΄ ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ λ‹€λ£° λ•Œ μ‚¬μš©ν•˜κΈ° μœ μš©ν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€.

ν•¨μˆ˜λͺ… κΈ°λŠ₯

len( ) λ¬Έμžμ—΄μ˜ 문자 개수λ₯Ό λ°˜ν™˜
join( ) 리슀트λ₯Ό λ¬Έμžμ—΄λ‘œ ν•©μ³μ„œ λ°˜ν™˜
upper( ) λŒ€λ¬Έμžλ‘œ λ³€ν™˜
lower( ) μ†Œλ¬Έμžλ‘œ λ³€ν™˜
title( ) 각 λ‹¨μ–΄μ˜ μ•žκΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
capitalize( ) 첫 문자λ₯Ό λŒ€λ¬Έμžλ‘œ λ³€ν™˜
count(’찾을 λ¬Έμžμ—΄’) ‘찾을 λ¬Έμžμ—΄’이 λͺ‡ 개 λ“€μ–΄μžˆλŠ”μ§€ 개수 λ³€ν™˜
find(’찾을 λ¬Έμžμ—΄’) ‘찾을 λ¬Έμžμ—΄’이 μ™Όμͺ½ 끝뢀터 μ‹œμž‘ν•˜μ—¬ λͺ‡ λ²ˆμ§Έμ— μžˆλŠ”μ§€ λ³€ν™˜
rfind(’찾을 λ¬Έμžμ—΄’) find( ) ν•¨μˆ˜μ™€ λ°˜λŒ€λ‘œ ‘찾을 λ¬Έμžμ—΄’이 였λ₯Έμͺ½ 끝뢀터 μ‹œμž‘ν•˜μ—¬ λͺ‡ λ²ˆμ§Έμ— μžˆλŠ”μ§€ λ°˜ν™˜
startswith(’찾을 λ¬Έμžμ—΄’) ‘찾을 λ¬Έμžμ—΄’둜 μ‹œμž‘ν•˜λŠ”μ§€ μ—¬λΆ€ λ°˜ν™˜
endswith(’찾을 λ¬Έμžμ—΄’) ‘찾을 λ¬Έμžμ—΄’둜 λλ‚˜λŠ”μ§€ μ—¬λΆ€ λ°˜ν™˜
strip( ) 쒌우 곡백 μ‚­μ œ
rstrip( ) 였λ₯Έμͺ½ 곡백 μ‚­μ œ
lstrip( ) μ™Όμͺ½ 곡백 μ‚­μ œ
split( ) λ¬Έμžμ—΄μ„ κ³΅λ°±μ΄λ‚˜ λ‹€λ₯Έ 문자둜 λ‚˜λˆ„μ–΄ 리슀트둜 λ³€ν™˜
isdigit( ) λ¬Έμžμ—΄μ΄ μˆ«μžμΈμ§€ μ—¬λΆ€ λ°˜ν™˜
islower( ) λ¬Έμžμ—΄μ΄ μ†Œλ¬ΈμžμΈμ§€ μ—¬λΆ€ λ°˜ν™˜
isupper( ) λ¬Έμžμ—΄μ΄ λŒ€λ¬ΈμžμΈμ§€ μ—¬λΆ€ λ°˜ν™˜

πŸ–‹οΈ 단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž¨ λ§Œλ“€μ–΄λ³΄κΈ°

ν”„λ‘œκ·Έλž¨ λ‚΄μš©

μ•žμ—μ„œ 배운 λ¬Έμžμ—΄μ˜ μ—¬λŸ¬ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ 단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ λ΄…μ‹œλ‹€. μ½”λ“œλ₯Ό 지 ν”„λ‘œκ·Έλž¨μ€ λΉ„ν‹€μŠ€μ˜ <Yesterday>λΌλŠ” λ…Έλž˜μ—μ„œ ‘Yesterday’λΌλŠ” 단어가 λͺ‡ 번 λ‚˜μ˜€λŠ”μ§€ λ§žνžˆλŠ” 단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. μš°μ„  ν•΄λ‹Ή κ°€μ‚¬λŠ” μ†ŒμŠ€νŒŒμΌ 폴더에 μžˆλŠ” yesterday, txtλΌλŠ” μ΄λ¦„μœΌλ‘œ μ €μž₯ν•΄μ£Όμ„Έμš”. ‘yesterday, txt’ 파일의 λ‚΄μš©μ„ νŒŒμ΄μ¬μ—μ„œ μ½μ–΄μ˜€κΈ° μœ„ν•΄μ„œλŠ” 파일 핸듀링 μ½”λ“œλ₯Ό μ΄μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 아직 λ°°μš°μ§€ μ•Šμ€ λ‚΄μš©μ΄λ―€λ‘œ μ•„λž˜ μ½”λ“œλ₯Ό κ·ΈλŒ€λ‘œ μž…λ ₯ν•΄μ£Όμ„Έμš”. 그러면 리슀트 ν˜•νƒœλ‘œ 각 μ€„μ˜ λ‚΄μš©μ„ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

f = open("yesterday.txt", 'r')
yesterday_lyric = f.readlines()
f.close()

(+ open은 νŒŒμΌμ„ μ—΄κΈ° μœ„ν•œ ν•¨μˆ˜μ΄κ³ , νŒŒμΌμ— λŒ€ν•œ μ •λ³΄λŠ” λ³€μˆ˜ f에 μ €μž₯ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. f.readlines()λŠ” 파일 μ•ˆμ˜ λ‚΄μš©μ„ 리슀트 ν˜•νƒœλ‘œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.)

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ²°κ³Ό

Number of a Word 'Yesterday' 9

ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ κ²°κ³Όλ₯Ό 기반으둜 μ–΄λ–€ μ½”λ“œκ°€ ν•„μš”ν•œμ§€ ν™•μΈν•˜κ³ , νŒŒμ΄μ¬μ„ μ΄μš©ν•˜μ—¬ 단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ΄…μ‹œλ‹€.

문제 ν•΄κ²°ν•˜κΈ°

f = open("yesterday.txt", 'r')
yesterday_lyric = f.readlines()
f.close()

contents = ""
for line in yesterday_lyric:
    contents = contents + line.strip() + "\\n"

n_of_yesterday = contents.upper().count("YESTERDAY")
print("Number of a Word 'Yesterday'", n_of_yesterday)

단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž­μ˜ μ½”λ“œμž…λ‹ˆλ‹€. μ½”λ“œλ₯Ό ν•΄μ„ν•΄λ³ΌκΉŒμš”?

μš°μ„  1 γ€œ 3ν–‰μ—μ„œλŠ” μœ„μ—μ„œ μ„€λͺ…λ“œλ Έλ˜ μ½”λ“œλ‘œ ‘yesterday.txt’ 파일의 λͺ¨λ“  λ‚΄μš©μ„ λΆˆλŸ¬μ™€ yesterday_lyric λ¦¬μŠ€νŠΈμ— μ €μž₯ν•©λ‹ˆλ‹€.

5γ€œ7ν–‰μ—μ„œλŠ” for문을 μ‚¬μš©ν•˜μ—¬ yesterday_lyric 리슀트의 λ‚΄μš©μ„ ν•œ 쀄씩 λΆˆλŸ¬μ˜€λ©΄μ„œ contents λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€. 그러면 contents λ³€μˆ˜μ—λŠ” <yesterday> λ…Έλž˜μ˜ λͺ¨λ“  가사가 μ €μž₯λ©λ‹ˆλ‹€.

9γ€œ10ν–‰μ—μ„œλŠ” upper() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ contents λ³€μˆ˜μ— μžˆλŠ” λͺ¨λ“  값을 λŒ€λ¬Έμžλ‘œ λ³€ν™˜ ν•œ ν›„, count( ) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€λ¬Έμž ‘YESTERDAY’κ°€ λͺ‡ κ°œμΈμ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

κ·Έ κ²°κ³ΌλŠ” n_of_yesterday λ³€μˆ˜μ— μ €μž₯되고 κ·Έ 값을 print() ν•¨μˆ˜λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

πŸ–‹οΈ λ¬Έμžμ—΄ μ„œμ‹ 지정

μ„œμ‹ μ§€μ •μ˜ κ°œλ…

print() ν•¨μˆ˜λŠ” 기본적으둜 λ³€μˆ˜ λ˜λŠ” 값을 콀마(,)둜 띄어쓰기 ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ print() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ‹€ 보면 νŠΉμ •ν•œ ν˜•μ‹μ— λ§žμΆ”μ–΄ κ²°κ³Όλ₯Ό 좜λ ₯ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ λ°œμƒν•˜λŠ”λ°μš”. 특히 엑셀을 μ‚¬μš©ν•  λ•Œ 톡화 λ‹¨μœ„, μ„Έ 자리 숫자 λ‹¨μœ„λ‘œ 띄어쓰기, % 좜λ ₯ λ“± λ‹€μ–‘ν•œ ν˜•μ‹μ— λ§žμΆ”μ–΄ 좜λ ₯ν•  일이 μƒκΈ°λŠ”λ°, 이λ₯Ό μ„œμ‹ 지정(formatting)이라고 ν•©λ‹ˆλ‹€. 좜λ ₯ ν˜•μ‹μ„ λ§žμΆ”κΈ° μœ„ν•˜ μ—¬ λ¬Έμžμ—΄μ„ print() ν•¨μˆ˜μ™€ ν•¨κ»˜ μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ•Œμ•„λ΄…μ‹œλ‹€.

% μ„œμ‹κ³Ό format( )ν•¨μˆ˜

λ¬Έμžμ—΄μ˜ μ„œμ‹μ„ μ„€μ •ν•  λ•Œ print() ν•¨μˆ˜λŠ” 기본적인 좜λ ₯ ν˜•μ‹ 외에 % μ„œμ‹κ³Ό format() ν•¨μˆ˜λ₯Ό ꡬ문으둜 μ‚¬μš©ν•˜μ—¬ 좜λ ₯ 양식을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

print(1, 2, 3)
print("a"+" "+"b"+" "+"c")
print("%d %d %d" %(1, 2, 3))
print("{} {} {}".format("a", "b", "c"))
1 2 3
a b c
1 2 3
a b c

1γ€œ2행은 λ³„λ„μ˜ μ„œμ‹ 지정 없이 κ·ΈλŒ€λ‘œ print() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ 것이고, 3γ€œ4행은 % μ„œμ‹ 지정과 format() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ κ²ƒμž…λ‹ˆλ‹€.

μ§κ΄€μ μœΌλ‘œ 이해할 수 μžˆκ² μ§€λ§Œ, 3γ€œ4ν–‰κ³Ό 같은 ꡬ문을 μ‚¬μš©ν•  경우 뒀에 μžˆλŠ” μˆ«μžμ™€ λ¬Έμžλ“€μ΄ μ•žμ˜ μ„œμ‹ 지정 μ½”λ“œμ— λŒ€μ‘λ˜μ–΄ ν• λ‹Ήλ©λ‹ˆλ‹€. 즉, 3ν–‰μ˜ "%d %d %d" % (1, 2, 3)μ—μ„œ 1, 2, 3이 각각 첫 %dλΆ€ν„° μ°¨λ‘€λ‘œ λŒ€μ‘λ˜μ–΄ ν• λ‹Ήλ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 4ν–‰μ—μ„œλ„ “{} {} {}”.format(”a”, “b”, “c”)μ—μ„œ 아무것도 μ ν˜€μžˆμ§€ μ•Šμ€ {} 곡간에 “a”, “b”, “c”λΌλŠ” λ¬Έμžμ—΄ ν˜•νƒœμ˜ κ°’ 3κ°œκ°€ 각각 λŒ€μ‘λ˜μ–΄ 좜λ ₯λ©λ‹ˆλ‹€.

이런 μ‹μœΌλ‘œ μ„œμ‹μ„ μ§€μ •ν•˜μ—¬ 좜λ ₯ν•˜λ©΄ μ–΄λ–€ μž₯점이 μžˆμ„κΉŒμš”?

첫째, 데이터와 좜λ ₯ ν˜•μ‹μ„ λΆ„λ₯˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 같은 λ‚΄μš©μ„ μ—¬λŸ¬ 번 λ°˜λ³΅ν•˜κΈ° μœ„ν•΄ κΈ°μ‘΄ print() 문에 Spacebarλ₯Ό μ΄μš©ν•΄ 띄어쓰기λ₯Ό λ„£μ–΄ + 기호둜 λ¬Έμžμ—΄ ν˜•νƒœλ₯Ό λΆ™μ—¬μ£ΌλŠ” 것보닀 μ‹œκ°μ μœΌλ‘œ 훨씬 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‘˜μ§Έ, 데이터λ₯Ό ν˜•μ‹μ— 따라 λ‹€λ₯΄κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ½”λ“œλ₯Ό 보면 λ¬Έμžμ—΄ ν˜•νƒœμΈ (’one', 'two') ꡬ문과 μ •μˆ˜ν˜•μΈ (1, 2)ꡬ문이 각각 %s와 %d둜 λ‹€λ₯΄κ²Œ μ§€μ •λ˜μ–΄ μžˆλŠ”λ°μš”. μ„œμ‹ 지정 κΈ°λŠ₯은 각 λ³€μˆ˜μ˜ μžλ£Œν˜•μ— 맞게 μ„œλ‘œ λ‹€λ₯΄κ²Œ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

print('%s %s'%('one', 'two'))
print('%d %d'%(1, 2))
one two
1 2

1. % μ„œμ‹

  1. % μ„œμ‹ μ•Œμ•„λ³΄κΈ°

% μ„œμ‹μ€ λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

“%μžλ£Œν˜•” %(κ°’)

  1. μžλ£Œν˜•μ— λ”°λΌμ„œ % μ„œμ‹ μ„€μ •ν•˜κΈ°
print("I eat %d apples."%3)
print("I eat %s apples."%"five")
I eat 3 apples.
I eat five apples.

μœ„ μ½”λ“œμ—μ„œ λ¨Όμ € μ•Œμ•„μ•Ό ν•˜λŠ” μ½”λ“œλŠ” %d와 %sμΈλ°μš”. %dλŠ” μ •μˆ˜ν˜•μ˜ λ³€μˆ˜λ₯Ό, %sλŠ” λ¬Έμžμ—΄μ˜ λ³€μˆ˜λ₯Ό 할당받을 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, %dμ—λŠ” ‘3’이. %sμ—λŠ” ‘five’κ°€ λŒ€μ‘λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ³€μˆ˜μ˜ μžλ£Œν˜•μ— λ”°λΌμ„œ μ•„λž˜μ˜ ν‘œμ™€ 같이 λ‹€μ–‘ν•˜κ²Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œμ‹ μ„€λͺ…

%s λ¬Έμžμ—΄(string)
%c 문자 1개(character)
%d μ •μˆ˜(integer)
%f μ‹€μˆ˜(floating-point)
%o 8μ§„μˆ˜
%x 16μ§„μˆ˜
%% 문자 % 자체
  1. 1개 μ΄μƒμ˜ κ°’ μ„€μ •ν•˜κΈ°

% μ„œμ‹μ€ 1개 μ΄μƒμ˜ 값도 ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ½”λ“œμ²˜λŸΌ % 뒀에 κ΄„ν˜Έλ₯Ό λ„£μ–΄μ„œ κ·Έ μ•ˆμ— μˆœμ„œλŒ€λ‘œ 값을 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.

>>>print("Product:%s, Price per unit:%f."%("Apple", 5.243))
Product: Apple, Price per unit: 5.243000.
  1. λ³€μˆ˜λͺ…을 λ„£μ–΄μ„œ μ‹€ν–‰ν•˜κΈ°

직접 값을 넣지 μ•Šκ³  numberκ³Ό day 같은 λ³€μˆ˜λͺ…을 넣어도 λ¬Έμ œμ—†μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 3κ³Ό threeκ°€ 각각 첫 번째 자리 %d와 두 번째 자리 %s에 λ“€μ–΄κ°€κ²Œ λ©λ‹ˆλ‹€.

number = 3
day = "three"
print("I ate %d apples. I was sick for %s days."%(number, day))
I ate 3 apples. I was sick for three days.

2. format()ν•¨μˆ˜

  1. format() ν•¨μˆ˜ μ•Œμ•„λ³΄κΈ°

format() ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

“{μžλ£Œν˜•}”.format(인수)

% μ„œμ‹κ³Ό μ‚¬μš©λ²•μ΄ 거의 κ°™μ§€λ§Œ, λ¬Έμžμ—΄ ν˜•νƒœμ˜ 인수λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 차이점 이 μžˆμŠ΅λ‹ˆλ‹€.

  1. format() ν•¨μˆ˜ μ‚¬μš©ν•˜κΈ°

λ‹€μŒ μ½”λ“œλŠ” format() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ κ°€μž₯ 기본적인 ν‘œν˜„ ν˜•νƒœλ‘œ, 숫자 20이 {0}에 ν• λ‹Ήλ˜μ–΄ 좜λ ₯λ©λ‹ˆλ‹€. κΈ°μ‘΄ % μ„œμ‹κ³Ό λΉ„κ΅ν•˜λ©΄ μžλ£Œν˜•μ„ λ°”λ‘œ 지정해주지 μ•Šκ³  μˆœμ„œλŒ€λ‘œ λ³€μˆ˜κ°€ ν• λ‹Ήλœλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

>>> print("I'm {0} years old.".format(20))
I'm 20 years old.
  1. λ³€μˆ˜λͺ…을 λ„£μ–΄μ„œ μ‹€ν–‰ν•˜κΈ°

λ˜ν•œ, format() ν•¨μˆ˜λŠ” % μ„œμ‹μ²˜λŸΌ λ³€μˆ˜μ˜ 이름을 μ‚¬μš©ν•˜κ±°λ‚˜ λ³€μˆ˜μ˜ μžλ£Œν˜•μ„ λ”°λ‘œ μ§€μ •ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

age = 40; name = 'Sungchul Choi'
print("I'm {0} years old.".format(age))
print("My name is {0} and {1} years old.".format(name, age))
print("Product: {0}, Price per unit: {1:.2f}.".format("Apple", 5.243))
I'm 40 years old.
My name is Sungchul Choi and 40 years old.
Product: Apple, Price per unit: 5.24.

λ‹€λ₯Έ μ½”λ“œλ“€μ€ κΈ°μ‘΄ % μ„œμ‹κ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, 4ν–‰μ˜ Price per unit: {1:.2f}λ₯Ό 보면 κΈ°μ‘΄ format() ν•¨μˆ˜μ˜ μ“°μž„κ³Ό λ‹€λ₯΄κ²Œ .2fλΌλŠ” ꡬ문이 μΆ”κ°€λ˜μ—ˆλŠ”λ°μš”. 이 μ½”λ“œλŠ” % μ„œμ‹μ—μ„œ μ‹€μˆ˜ν˜•μ„ ν‘œν˜„ν•˜λŠ” 기법과 κ°™μœΌλ©°, .2λŠ” μ†Œμˆ˜μ  λ‘˜μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯ν•˜λΌλŠ” λœ»μž…λ‹ˆλ‹€.

νŒ¨λ”©

파이썬의 μ„œμ‹ 지정 κΈ°λŠ₯μ—λŠ” μ—¬μœ  곡간을 μ§€μ •ν•˜μ—¬ κΈ€μž 배열을 λ§žμΆ”κ³  μ†Œμˆ˜μ  자릿수λ₯Ό λ§žμΆ”λŠ” νŒ¨λ”©(padding) κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€. % μ„œμ‹κ³Ό format() ν•¨μˆ˜ λͺ¨λ‘ νŒ¨λ”© κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

  1. % μ„œμ‹μ˜ νŒ¨λ”©
>>> print("%10d"%12)
        12
>>> print("%-10d"%12)
12

첫 번째 μ€„μ˜ print("%10d" % 12)λŠ” 10자리의 곡간을 ν™•λ³΄ν•˜κ³ , 우츑 μ •λ ¬λ‘œ 12λ₯Ό 좜λ ₯ν•˜λΌλŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. κΈ°λ³Έ 정렬이 우츑 μ •λ ¬μ΄λ―€λ‘œ μ’ŒμΈ‘μ—μ„œ 아홉 번째 μΉΈλΆ€ν„° 12κ°€ 좜λ ₯λ©λ‹ˆλ‹€. 쒌츑 정렬을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„Έ 번째 μ€„μ²˜λŸΌ - λΆ€ν˜Έλ₯Ό 뢙이면 λ©λ‹ˆλ‹€.

μ‹€μˆ˜μ—μ„œλ„ μ•„λž˜μ™€ 같이 μžλ¦Ώμˆ˜μ™€ μ†Œμˆ˜μ  자릿수λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

>>> print("%10.3f" % 5.94343)   # 10자리λ₯Ό ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  μ…‹μ§Έ μžλ¦¬κΉŒμ§€ 좜
    5.943
>>> print("%10.2f" % 5.94343)   # 10자리λ₯Ό ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  λ‘˜μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯
      5.94
>>> print("%-10.2f" % 5.94343)
5.94

첫 번째 μ€„μ˜ print("%10.3f" % 5.94343)은 10자리의 곡간을 ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  μ…‹μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯ν•˜λΌλŠ” λœ»μž…λ‹ˆλ‹€. μ΄λ•Œ 10자리 μ•ˆμ—λŠ” μ†Œμˆ˜μ μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. μ—­μ‹œ 우츑 μ •λ ¬ 기쀀이며, 쒌츑 정렬을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” - λΆ€ν˜Έλ₯Ό 뢙이면 λ©λ‹ˆλ‹€.

  1. format() ν•¨μˆ˜μ˜ νŒ¨λ”©
>>> print("{0:>10s}".format("Apple"))
     Apple
>>> print("{0:<10s}".format("Apple"))
Apple

첫 번째 μ€„μ˜ print("{0:>10s".format(’Apple"))은 10자리의 곡간을 ν™•λ³΄ν•˜κ³ , 우츑 μ •λ ¬λ‘œ λ¬Έμžμ—΄ ‘Apple’을 좜λ ₯ν•˜λΌλŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. 쒌츑 정렬을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” ‘{0:<10s}’처럼 < λΆ€ν˜Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ‹€μˆ˜μ—μ„œλ„ μžλ¦Ώμˆ˜μ™€ μ†Œμˆ˜μ  자릿수λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

>>> "{l:>10.5f}.".format("Apple", 5.243)
'  5.24300.'
>>> "{l:<10.5f}.".format("Apple", 5.243) 
'5.24300  .'

첫 번째 μ€„μ˜ "{1:>10.5f}.”.format("Apple", 5.243)을 μž…λ ₯ν•˜λ©΄, 10자리의 곡간을 ν™•λ³΄ν•˜κ³ , μ†Œμˆ˜μ  λ‹€μ„― 번째 μžλ¦¬κΉŒμ§€ μ‹€μˆ˜λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. μ΄λ•Œ 10자리 μ•ˆμ—λŠ” μ†Œμˆ˜μ μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. μ—­μ‹œ 우츑 μ •λ ¬ 기쀀이며, 쒌츑 정렬을 μœ„ν•΄μ„œλŠ” < λΆ€ν˜Έλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.