파이썬 기초 강의를 들은 후 까먹지 않고 필요한 것을 바로 볼 수 있도록 정리해봤습니다. 대상 강의는 인프런 - 김왼손의 미운코딩새끼: 4시간만에 끝내는 파이썬 기초(무료) 이며 강의 내용과 똑같이 Idle 기준으로 작성했습니다. 정리를 위해 강의에 없는 주제별 순번을 붙였고 추가적인 내용도 조금 포함돼 있습니다.
파이썬 설치 없이 쓸 수 있는 웹 사이트
https://repl.it
>>> print('Hello World')
Hello World
>>> print([1, 2, 3])
[1, 2, 3]
>>> print(1, 2, 3)
1 2 3
>>> print('Hello', 'World')
Hello World
>>>
>>> input()
abc
'abc'
>>> age = input('나이는? : ')
나이는? : 20
>>> age
'20'
>>>
>>> my_int = 1
>>> my_int + 2
3
>>> my_int * 100
100
>>> python = 1
>>> PYTHON = 2
>>> python
1
>>> PYTHON
2
>>> 파이썬 = 1
1
>>> 1python = 2
SyntaxError: invalid syntax
>>>
Numeric
>>> my_int = 1
>>> type(my_int)
<class 'int'> #정수
>>> my_float = 3.14
>>> type(my_float)
<class 'float'> #실수
>>>
(추가) 숫자 연산
>>> 3 + 3
6
>>> 3 * 3
9
>>> 12 / 4
3.0
>>> 3 - 3
0
>>> 11 % 3 #나머지값
2
>>> 3 ** 2 #제곱
9
>>> 10 // 3 #몫
3
>>>
String
>>> 'Hello'
'Hello'
>>> "Hello"
'Hello'
>>> print('Hello World')
Hello World
>>>
Boolean
>>> True
True
>>> False
False
>>> my_bool = True
>>> print(my_bool)
True
>>> print(False)
False
>>>
List
>>> my_list = []
>>>
>>> my_list = [1, 2, 3]
>>>
>>> friends = ['name1', 'name2', 'name3', 'name4', 'name5']
>>> for fri in friends:
print(fri)
name1
name2
name3
name4
name5
>>> import random
>>> print(random.choice(friends))
name3
>>> friends.append('name6')
>>> friends
['name1', 'name2', 'name3', 'name4', 'name5', 'name6']
>>> friends[0]
'name1'
>>>
Tuple
>>> friends[0] = 'name11'
>>> friends
['name11', 'name2', 'name3', 'name4', 'name5', 'name6']
# List - 값 수정 가능
>>> my_tuple = ('이름1', '이름2', '이름3')
>>> my_tuple[0] = '이름11'
# Tuple - 값 수정 불가
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
my_tuple[0] = '이름11'
TypeError: 'tuple' object does not support item assignment
>>>
Dictionary
>>> my_dict = {'name1' : '남', 'name2' : '여', 'name3' : '여', 'name4' : '남'}
>>> my_dict['name1']
'남'
#'key' : 'value'
>>> my_dict['name1`] = '여'
>>> my_dict
{'name1': '여', 'name2': '여', 'name3': '여', 'name4': '남'}
>>>
# 값 수정 가능
자료형 변환
>>> my_int = 1 #정수
>>> type(my_int)
<class 'int'>
>>> float(my_int) #실수
1.0
>>> type(my_int)
<class 'int'>
>>> str(my_int)
'1'
>>> type(str(my_int))
<class 'str'>
>>> my_str = 'coding'
>>> my_str
'coding'
>>> list(my_str)
['c', 'o', 'd', 'i', 'n', 'g']
>>>
Comment
>>> print('Hello World!') #안녕?
Hello World!
>>> print('Hello World!') #문자를 출력합니다.
Hello World!
>>>
'String'
"String"
>>> my_str = "안녕하세요"
>>> print(my_str)
안녕하세요
>>> type(my_str)
<class 'str'>
>>> my_str = '안녕'
>>> print(my_str)
안녕
>>> type(my_str)
<class 'str'>
>>>
'''String'''
"""String""""
>>> my_str = """김연아
박지성
박찬호
"""
>>> print(my_str)
김연아
박지성
박찬호
>>>
Formatting
%s %d %f
# %s 문자
>>> my_str = 'My name is %s' % 'Young Choi'
>>> print(my_str)
My name is Young Choi
# %d 정수
>>> '%d %d' % (1, 2)
'1 2'
# %f 실수
>>> '%f' % 3.14
'3.140000'
>>>
'{}'.fomat()
>>> 'My name is %s' % 'Young Choi'
'My name is Young Choi'
>>> 'My name is {}'.format('Young Choi')
'My name is Young Choi'
>>> '{} x {} = {}'.format(2, 3, 2*3)
'2 x 3 = 6'
>>> '{1} x {0} = {2}'.format(2, 3, 2*3) #순서 지정 가능
'3 x 2 = 6'
>>>
Indexing
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[0]
'김'
>>> my_name[1]
'왼'
>>> my_name[2]
'손'
>>> my_name[3]
'의'
>>> my_name[4]
''
>>> my_name[8]
'딩'
>>> my_name[-1]
'딩'
>>> my_name[-2]
'코'
Slicing
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[5:7] #my_name[5], my_name[6]
'왼손'
>>> my_name[:3]
'김왼손'
>>> my_name[2:]
'손의 왼손코딩'
string.split()
>>> my_name = '김왼손의 왼손코딩'
>>> my_name.split()
['김왼손의', '왼손코딩']
>>> fruit_str = '거봉 수박 포도 복숭아 망고 딸기 배'
>>> fruit_str
'거봉 수박 포도 복숭아 망고 딸기 배'
>>> fruits = fruit_str.split()
>>> fruits
['거봉', '수박', '포도', '복숭아', '망고', '딸기', '배']
>>> a = 'a:b:c:d'
>>> a.split(':')
['a', 'b', 'c', 'd']
Docstring
>>> """이것도 주석입니다"""
'이것도 주석입니다'
print('', end='')
>>> print('집단지성')
집단지성 # 끝에 엔터 포함
>>> print('집단지성', end='')
집단지성 # 끝에 엔터 없음
>>> print('집단지성', end='/')
집단지성/
Escape code
\n \t
>>> print('미운코딩새끼의 집단지성들')
미운코딩새끼의 집단지성들
# \n 엔터
>>> print('미운코딩새끼의\n집단지성들')
미운코딩새끼의
집단지성들
# \t 탭
>>> print('미운코딩새끼의\t집단지성들')
미운코딩새끼의 집단지성들
>>> print('미운코딩새끼의\n집단\ㅜ지성들')
미운코딩새끼의
집단\ㅜ지성들
>>> print('미운', end='\t'); print('코딩')
미운 코딩
mutable - 값을 바꿀 수 있다
# 비어 있는 리스트
>>> my_list = []
>>> my_list
[]
>>> type(my_list)
<class 'list'>
>>> my_list = [1, 2, 3]
>>> my_list
[1, 2, 3]
# 값 추가(맨 뒤)
>>> animals = []
>>> animals.append('호랑이')
>>> animals.append('하이에나')
>>> animals.append('사자')
>>> animals.append('물소')
>>> animals
['호랑이', '하이에나', '사자', '물소']
# 존재하지 않는 리스트에 값 추가 안됨
>>> humans.append('조희진')
Traceback (most recent call last):
File "<pyshell#73>", line 1, in <module>
humans.append('조희진')
NameError: name 'humans' is not defined
>>> humans = []
>>> humans.append('조희진')
>>> humans
['조희진']
Indexing / Slicing
>>> animals[3]
'물소'
>>> del animals[3]
>>> animals
['호랑이', '하이에나', '사자']
>>> animals[1:3]
['하이에나', '사자']
>>>
list.sort()
>>> animals
['코알라', '하이에나', '바다소', '땅다람쥐', '스컹크', '아나콘다', '바다코끼리']
# 가나다순 정렬
>>> animals.sort()
>>> animals
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
list.sort()
>>> animals
['코알라', '하이에나', '바다소', '땅다람쥐', '스컹크', '아나콘다', '바다코끼리']
# 가나다순 정렬
>>> animals.sort()
>>> animals
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
list.count()
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '스컹크', '아나콘다', '바다코끼리', '바다소']
>>> animals.count('바다소')
2
>>> animals.count('코알라')
1
>>> del animals[1]
>>> animals
['코알라', '바다소', '땅다람쥐', '스컹크', '아나콘다', '바다코끼리', '바다소']
# 리스트 값의 개수(내장 함수)
>>> len(animals)
7
immutable - 값 변경 불가
# 빈 튜플
>>> my_tuple = ()
>>> type(my_tuple)
<class 'tuple'>
# 괄호를 안 써도 됨
>>> my_tuple = 1, 2, 3
>>> my_tuple
(1, 2, 3)
Packing / Unpacking
>>> my_tuple = 1, 2, 3
>>> num1, num2, num3, = my_tuple
>>> num1
1
>>> num2
2
>>> num3
3
# num1 = 2, num2 = 1 로 만들기
>>> num1, num2 = num2, num1
>>> num1
2
>>> num2
1
>>>
for 변수 in 컨테이너:
vvvv실행할 명령1
vvvv실행할 명령2
>>> for animal in animals:
print(animal)
코알라
바다소
땅다람쥐
스컹크
아나콘다
바다코끼리
바다소
>>> for num in [1, 2, 3]:
print(num)
1
2
3
>>> for my_str in "김왼손의 왼손코딩":
print(my_str)
김
왼
손
의
왼
손
코
딩
>>>
range()
>>> range(3)
range(0, 3)
>>> type(range(3))
<class 'range'>
>>> [0, 1, 2] #와 같음
>>> for n in [0, 1, 2]:
print(n)
0
1
2
>>> for n in range(0, 3):
print(n)
0
1
2
>>>
for x 2
>>> for i in range(1,10):
print(i)
1
2
3
4
5
6
7
8
9
>>>
>>> for i in range(1,10):
print('{}x{}={}'.format(2, i, 2*i))
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
>>>
>>> for j in range(2, 10): #들여쓰기0
for i in range(1,10): #들여쓰기1
print('{}x{}={}'.format(j, i, j*i)) #들여쓰기2
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
3x9=27
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
4x9=36
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
6x9=54
7x1=7
7x2=14
7x3=21
7x4=28
7x5=35
7x6=42
7x7=49
7x8=56
7x9=63
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
8x9=72
9x1=9
9x2=18
9x3=27
9x4=36
9x5=45
9x6=54
9x7=63
9x8=72
9x9=81
Comprehension
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> odd_numbers = []
>>> for num in numbers:
print(2*i-1)
>>> for number in numbers:
if number % 2 == 1:
odd_numbers
>>> odd_numbers
[1, 3, 5, 7, 9]
# comprehension : 위의 코드를 한줄로
>>> [number for number in numbers if number % 2 ==1]
[1, 3, 5, 7, 9]
Assign
= += -= *= /=
# 0을 count에 할당
>>> count = 0
>>> count
0
>>> count = 1
>>> count
1
>>> count = count + 1
>>> count
2
>>> count += 1
>>> count
3
>>> count -= 1
>>> count
2
Arithmetic
+ - * /
>>> 3 + 3
6
>>> 20 - 5
15
>>> 6 * 2
12
>>> 12 / 3
4.0
** // %
>>> 3 ** 2
9
>>> 11 // 3
3
>>> 11 % 3
2
%로 홀짝 구분하기
>>> numbers = [1, 2, 3, 4, 5, 6, 7]
>>> for number in numbers:
print(number)
1
2
3
4
5
6
7
>>> if 1 % 2 == 1:
print("홀수")
홀수
>>> if 2 % 2 == 0:
print("짝수")
짝수
>>> for number in numbers:
if number % 2 == 1:
print("홀수")
else:
print("짝수")
홀수
짝수
홀수
짝수
홀수
짝수
홀수
>>> for number in numbers:
if number % 2 == 1:
print(number, "는 홀수")
else:
print(number, "는 짝수")
1 는 홀수
2 는 짝수
3 는 홀수
4 는 짝수
5 는 홀수
6 는 짝수
7 는 홀수
문자열 연산자
+ *
>>> '김왼손' + 'X' + '엘리스'
'김왼손X엘리스'
>>> '안녕하세요' + ' ' + '반갑습니다'
'안녕하세요 반갑습니다'
>>> '안녕' * 3
'안녕안녕안녕'
>>> '안녕 ' * 3
'안녕 안녕 안녕 '
# idle 화면 정리를 위한 함수
>>> def cls():
print('\n' * 100)
Comparison
== != < > >= <=
>>> 1 < 2
True
>>> 2 < 1
False
# 같냐
>>> 1 != 1
False
# 다르냐
>>> 1 == 1
True
>>> 4 <= 6
True
>>> 5 <= 3
False
Logical
and or not
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> not False
True
>>> not True
False
>>>
# 롤러코스터를 타기 위한 조건
>>> height = 120
>>> age = 8
>>> height > 140 and age > 10
False
>>> height = 190
>>> age = 9
>>> height > 140 and age > 10
False
>>> height = 150
>>> age = 15
>>> height > 140 and age > 10
True
P | Q | and | or | not P |
---|---|---|---|---|
True | True | True | True | False |
True | False | False | True | False |
False | True | False | True | True |
False | False | False | False | True |
Membership
in
not in
>>> 과일 = ['망고', '포도', '딸기', '바나나', '메론', '사과']
>>> '망고' in 과일
True
>>> '수박' in 과일
False
>>> '수박' not in 과일
True
>>> 과일.append('수박')
>>> '수박' not in 과일
False
>>> '수박' in 과일
if 조건:
vvvv실행할 명령1
vvvv실행할 명령2
조건이 참이면 코드블럭
조건이 참이 아니면 코드블럭 밖으로
>>> input_name = '김왼손'
>>> if input_name == '김왼손':
print('만나서 반가워요,', input_name)
만나서 반가워요, 김왼손
>>>
>>> input_name = '김오른손'
>>> if input_name == '김왼손':
print('만나서 반가워요,', input_name)
>>>
else, elif
if 조건:
# if 조건이 True일 경우 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
else:
# if 조건이 False일 경우 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
if 조건:
# 조건이 True일 경우 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
elif 조건:
# if 조건이 False이고, elif 조건이 True면 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
if 조건:
# 조건이 True일 경우 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
elif 조건:
# if 조건이 False이고, elif 조건이 True면 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
else:
# if 조건이 False이고 elif 조건이 False일 경우 아래 명령 실행 후 코드블럭 밖으로
vvvv실행할 명령1
vvvv실행할 명령2
>>> name = '김왼손'
>>> if name == '김왼손': # True로 실행 후 끝
print('당신이 김왼손이군요!')
elif name == '호박':
print('당신이 호박이군요!')
elif name == 'Meta':
print('당신이 Meta군요!')
else:
print('당신은!?')
당신이 김왼손이군요!
>>>
>>> name = 'Meta'
>>> if name == '김왼손': # False. elif로
print('당신이 김왼손이군요!')
elif name == '호박': # False. 다음 elif로
print('당신이 호박이군요!')
elif name == 'Meta': # True로 실행 후 끝
print('당신이 Meta군요!')
else:
print('당신은!?')
당신이 Meta군요!
>>>
>>> name = '요거트'
>>> if name == '김왼손': # False. elif로
print('당신이 김왼손이군요!')
elif name == '호박': # False. 다음 elif로
print('당신이 호박이군요!')
elif name == 'Meta': # False. else로
print('당신이 Meta군요!')
else: # else 실행
print('당신은!?')
당신은!?
>>>
while 조건:
vvvv실행할 명령1
vvvv실행할 명령2
조건이 맞는 동안은 계속 명령을 반복(loop) 실행
>>> count = 0
>>> while count < 3:
print('횟수:', count)
count += 1
횟수: 0
횟수: 1
횟수: 2
>>>
continue, break
>>> while count < 10:
count += 1
if count < 4:
continue # 조건 충족하면 다시 위로
print('횟수:', count)
if count == 8:
break
횟수: 4
횟수: 5
횟수: 6
횟수: 7
횟수: 8
{key1: val1, key2: val2, ...}
>>> my_dict = {}
>>> my_dict
{}
>>> type(my_dict)
<class 'dict'>
>>> my_dict[0] = 'a'
>>> my_dict
{0: 'a'}
>>> my_dict['b'] = 2
>>> my_dict
{0: 'a', 'b': 2}
>>> my_dict['학생2'] = '류도영'
>>> my_dict['학생3'] = '김씨'
>>> my_dict
{0: 'a', 'b': 2, '학생1': '호박', '학생2': '류도영', '학생3': '김씨'}
>>>
>>> print(my_dict['학생1'])
호박
>>> print(my_dict['학생3'])
김씨
>>>
>>> del my_dict[0]
>>> del my_dict['b']
>>> my_dict
{'학생1': '호박', '학생2': '류도영', '학생3': '김씨'}
>>>
메서드
dict.values()
>>> my_dict
{'학생1': '호박', '학생2': '류도영', '학생3': '김씨'}
>>> for std in my_dict.values():
print(std)
호박
류도영
김씨
>>>
dict.keys()
>>> my_dict
{'학생1': '호박', '학생2': '류도영', '학생3': '김씨'}
>>> for key in my_dict.keys():
print(key)
학생1
학생2
학생3
>>>
dict.items()
>>> my_dict
{'학생1': '호박', '학생2': '류도영', '학생3': '김씨'}
>>> for key, val in my_dict.items():
print(key, val)
학생1 호박
학생2 류도영
학생3 김씨
>>>
반복되는 코드에 이름을 붙여 필요할 때마다 불러서 쓸 수 있음
def 함수이름(인자1, ...): #인자 또는 매개변수
vvvv실행할 명령1
vvvv실행할 명령2
vvvvreturn 결과
# 입력 및 결과(출력값)는 있을 수도 없을 수도 있다
함수를 사용하는 이유
>>> def add(num1, num2):
return num1 + num2
>>> add(1, 2)
3
>>>
여러개 돌려주기
def 함수이름(인자1, ...):
vvvv실행할 명령1
vvvv실행할 명령2
vvvvreturn 결과1, 결과2, ...
>>> def add_mul(num1, num2):
return num1 + num2, num1 * num2
>>> add_mul(1, 2)
(3, 2) #튜플 하나를 packing 해서 출력
# unpacking도 가능
>>> my_add, my_mul = add_mul(1,2)
>>> my_add
3
>>> my_mul
2
>>>
Module
비슷한 함수들을 모아둔 파일
random 모듈
random.choice()
>>> students = ['망고', '희진', '호박', '레고', '고등어', '도영']
>>> print(random.choice(students))
고등어
>>> print(random.choice(students))
희진
>>> print(random.choice(students))
호박
>>> print(random.choice(students))
희진
>>>
random.sample()
>>> print(random.sample(students, 2))
['망고', '호박']
>>> print(random.sample(students, 4))
['고등어', '희진', '호박', '도영']
>>> print(random.sample(range(1, 46), 6))
[7, 27, 18, 40, 32, 3]
>>> print(random.sample(range(1, 46), 6))
[34, 41, 35, 32, 37, 25]
>>>
random.randint()
>>> print(random.randint(8, 10))
10
>>> print(random.randint(8, 10))
9
>>> print(random.randint(8, 10))
10
>>> print(random.randint(8, 10))
8
>>>
파이썬에서는 대부분의 것들이 객체
현실의 것을 컴퓨터 안에 구현하는 것이며
함수와 변수(데이터) 한꺼번에 묶어서 만드는 것이 객체
# 기타(악기)라는 객체는 데이터와 함수로 이뤄짐
# 데이터
name : G6136CST
color : white
Family : Falcon
# 가능한 주법(함수)
fingerstyle
strumming
fingerpicking
>>> my_list = [1, 2, 3] #데이터
>>> my_list.append(4) #함수
>>> my_list
[1, 2, 3, 4]
>>>
내가 코드를 작성하는 경우보다 다른 사람들이 내 코드를 보는 경우가 더 많아진다.
PEP8
파이썬 코딩 스타일 가이드
원문
https://www.python.org/dev/peps/pep-0008/
번역
https://b.luavis.kr/python/python-convention
구글링으로 날짜 출력 모듈을 검색해 오늘 날짜를 뽑아보자
검색 키워드
파이썬 오늘 날짜 구하기
datetime 모듈이 많이 보임
python datetime
로 검색
>>> import datetime
>>> datetime.today().strftime('%Y-%m-%d')
'2020-01-22'