In [66]:
from __future__ import print_function

In [3]:
print 'hi' # 3버전을 사용하면 2 버전 스타일은 문법 오류!


  File "<ipython-input-3-836cd6d4f243>", line 1
    print 'hi'
             ^
SyntaxError: invalid syntax

In [2]:
print('hi guys')
print('hi', 'guys')
print('hi'+ ' guys')


hi guys
hi guys
hi guys

In [3]:
print('hi', 'guys', sep='')
print('hi', 'guys', sep='...')


higuys
hi...guys

In [4]:
# 탈출(escape) 문자 활용
print('안녕\n하세요')
print('안녕\t하세요')
print('안녕\
      ')

print('안녕', end='\t')
print('하세요')

print("따옴표 '가 많이 신경쓰여요")
# 따옴표 효과 해제
print('따옴표 \'가 많이 신경쓰여요')


안녕
하세요
안녕	하세요
안녕      
안녕	하세요
따옴표 '가 많이 신경쓰여요
따옴표 '가 많이 신경쓰여요

문자열 템플릿

2 버전 스타일. 권장하지 않음.


In [41]:
template = '내 이름은 %s입니다.'
print(template % '이성주')


내 이름은 이성주입니다.

3 버전 스타일을 권장


In [5]:
template = '내 이름은 {}입니다. 이메일은 {}입니다. 몸무게: {}'
print(template.format('이성주', 'seongjoo@codebasic.co', 85))


내 이름은 이성주입니다. 이메일은 seongjoo@codebasic.co입니다. 몸무게: 85

문자열 템플릿 사용 시, unicode와 str이 결합되지 않도록 유의


In [21]:
print(u'이름: {}'.format('이성주')) # 오류! unicode와 str의 조합


---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-21-96afcbfe2075> in <module>()
----> 1 print(u'이름: {}'.format('이성주'))

UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)

In [7]:
template = '{2} {1} {0}'
text = template.format('one', 'two', 'three')
print(text)


three two one

In [5]:
for x in range(1,6):
    print(x, '*', x, '=', x*x)


1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25

자리수 표현


In [8]:
print(4/3)
print('{}'.format(4/3))


1
1

In [12]:
# 소수점 표현 (기본 6자리)
print('{:f}'.format(4/3))
print('{0:f}'.format(5/2))
print('{0:f}'.format(2))


1.000000
2.000000
2.000000

In [67]:
print('{0:.1f}'.format(4/3))
print('{0:.2f}'.format(4/3))
print('{0:.3f}'.format(4/3))


1.0
1.00
1.000

In [14]:
# 소수점 개수를 선택하면 반올림
n = 5.0/3
print('{0:f}'.format(n))
print('{0:.1f}'.format(n))


1.666667
1.7

In [68]:
# 그 밖의 양식
print('{0:e}'.format(4/3))
print('{0:%}'.format(4/3))


1.000000e+00
100.000000%

정렬


In [6]:
print('오른쪽 정렬'.rjust(20))
print('오른쪽 정렬'.rjust(1))

print('중앙 정렬'.center(20))
print('중앙 정렬'.center(1))

print('왼쪽 정렬...은 원래 되는데 아랍어 등은 방향이 반대니까'.ljust(10))


    오른쪽 정렬
오른쪽 정렬
   중앙 정렬    
중앙 정렬
왼쪽 정렬...은 원래 되는데 아랍어 등은 방향이 반대니까

In [16]:
for x in range(1,6):
    print('{} x {} = {}'.format(x,x,str(x*x).rjust(3)))


1 x  1 =   1
2 x  2 =   4
3 x  3 =   9
4 x  4 =  16
5 x  5 =  25

In [17]:
for x in range(1,6):
    print('{} x {} = {}'.format(x,x,str(x*x).zfill(3)))


1 x 1 = 001
2 x 2 = 004
3 x 3 = 009
4 x 4 = 016
5 x 5 = 025

한국어와 같은 비 ASCII 문자 정렬 시, 유니코드가 아닌 경우 발생할 수 있는 문제


In [19]:
len('공학수학'.rjust(10))


Out[19]:
12

In [20]:
len( u'공학수학'.rjust(10))


Out[20]:
10

도전과제

다음과 같이 출력되도록 작성하시오.

Math Stats Prog.
90 85 95

In [26]:
#print('공학수학'.rjust(10))
#print('      Math', '     Stats')
col_width=10
print(u'Math'.rjust(col_width), u'Stats'.rjust(col_width), u'Prog.'.rjust(col_width))
print( u'90'.rjust(col_width), u'85'.rjust(col_width), u'95'.rjust(col_width))


      Math      Stats       Prog
        90         85         95

도전과제

각 학생의 점수가 다음과 같은 구조로 저장되어 있다.

점수목록=[{'이름': '이성주', '과목점수': {'Math': 90, 'Stats': 85, 'Prog.': 95}}, {'이름': '손지훈', '과목점수': ...}]

다음과 같이 출력되도록 작성하시오.

이름 Math Stats Prog. 이성주 90 84 92 손지훈 95 80 90

전체 Math 평균 = 92.5 전체 Stats 평균 = 82 전체 Prog. 평균 = 91


In [18]:
scores=[{'이름': '이성주', 
       '과목점수': {'Math': 90, 'Stats': 84, 'Prog.': 92}}, 
      {'이름': '김성주', 
       '과목점수':{'Math': 95, 'Stats': 80, 'Prog.': 90}}]

col_width = 10

print('이름'.rjust(col_width), end='')
print('Math'.rjust(col_width), end='')
print('Stats'.rjust(col_width), end='')
print('Prog.'.rjust(col_width))

for student in scores:    
    print(student['이름'].rjust(col_width), end='')
    # 과목점수 표시
    print(str(student['과목점수']['Math']).rjust(col_width), end='')
    print(str(student['과목점수']['Stats']).rjust(col_width), end='')
    print(str(student['과목점수']['Prog.']).rjust(col_width))


    이름      Math     Stats     Prog.
 이성주        90        84        92
 김성주        95        80        90

파일 입출력


In [23]:
open('no_such_file.txt')


---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-23-a5de52e50dc4> in <module>()
----> 1 open('no_such_file.txt')

IOError: [Errno 2] No such file or directory: 'no_such_file.txt'

In [24]:
open('hello_world.txt')


Out[24]:
<open file 'hello_world.txt', mode 'r' at 0x1038c7420>

파일 내용 읽기


In [33]:
f = open('hello_world.txt')
lines = f.readlines()
lines[0]


Out[33]:
'2015-07-07\n'

한글 윈도우의 메모장, 액셀과 같은 일부 앱은 cp949 인코딩으로 되어 있다.


In [61]:
f = open('file_with_cp949_encoding.txt')
text = f.read()
print(text.decode('cp949'))


---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-61-18c696d0253e> in <module>()
----> 1 f = open('file_with_cp949_encoding.txt')
      2 text = f.read()

IOError: [Errno 2] No such file or directory: 'file_with_cp949_encoding.txt'

In [34]:
for l in lines:
    print(l, end='')


2015-07-07

안녕하세요
파이썬입니다.
오늘은 2일차!


In [43]:
f = open('hello_world.txt')
f.read()


Out[43]:
'2015-07-07\n\n\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94\n\xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac\xec\x9e\x85\xeb\x8b\x88\xeb\x8b\xa4.\n\xec\x98\xa4\xeb\x8a\x98\xec\x9d\x80 2\xec\x9d\xbc\xec\xb0\xa8!\n\n'

In [44]:
f.read()


Out[44]:
''

In [46]:
f.seek(0)
lines = f.readlines()
type(lines[0])


Out[46]:
str

In [42]:
f.seek(0)
f.read()
f.tell()


Out[42]:
68

파일 쓰기


In [59]:
text = ['hello, world!', 'how are you?', 'fine, thank you!']
f = open('hello_write.txt', 'w')

for line in text:
    f.write(line)
    f.write('\n')
    
f.close()

이어쓰기


In [60]:
f = open('hello_write.txt', 'a')
f.write('and you?')
f.close()

유니코드 문자열의 파일 쓰기


In [65]:
text = u'파이썬'
f = open('hello_python.txt', 'w')
# 문자열 인코딩
text_encoded = text.encode('utf-8')
# 파일 쓰기 실행
f.write(text_encoded)
f.close()

pickle


In [69]:
import pickle

In [71]:
some_data = [('a','b'), {'a':1, 'b':1}]

In [72]:
data_str = str(some_data)

In [73]:
data_str


Out[73]:
"[('a', 'b'), {'a': 1, 'b': 1}]"

In [74]:
list(data_str)


Out[74]:
['[',
 '(',
 "'",
 'a',
 "'",
 ',',
 ' ',
 "'",
 'b',
 "'",
 ')',
 ',',
 ' ',
 '{',
 "'",
 'a',
 "'",
 ':',
 ' ',
 '1',
 ',',
 ' ',
 "'",
 'b',
 "'",
 ':',
 ' ',
 '1',
 '}',
 ']']

In [78]:
f = open('temp_data', 'w')
pickle.dump(some_data, f)
f.close()

짠지(pickle)에서 데이터 꺼내오기


In [79]:
del some_data

In [80]:
some_data


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-80-3ea05169a953> in <module>()
----> 1 some_data

NameError: name 'some_data' is not defined

In [81]:
f = open('temp_data')
some_data = pickle.load(f)
print(some_data)


[('a', 'b'), {'a': 1, 'b': 1}]

표준 입력 받기


In [82]:
msg = raw_input('Input message: ')
print(msg)


Input message: hello
hello

In [ ]: