파이썬 기초 요약(feat. 왼손코딩)

whybein·2020년 1월 21일
1
post-thumbnail

파이썬 기초 강의를 들은 후 까먹지 않고 필요한 것을 바로 볼 수 있도록 정리해봤습니다. 대상 강의는 인프런 - 김왼손의 미운코딩새끼: 4시간만에 끝내는 파이썬 기초(무료) 이며 강의 내용과 똑같이 Idle 기준으로 작성했습니다. 정리를 위해 강의에 없는 주제별 순번을 붙였고 추가적인 내용도 조금 포함돼 있습니다.

파이썬 설치 없이 쓸 수 있는 웹 사이트
https://repl.it

1. 출력(Print)

>>> print('Hello World')
Hello World
>>> print([1, 2, 3])
[1, 2, 3]
>>> print(1, 2, 3)
1 2 3
>>> print('Hello', 'World')
Hello World
>>>

2. 입력(Input)

>>> input()
abc
'abc'

>>> age = input('나이는? : ')
나이는? : 20
>>> age
'20'
>>>

3. 변수(Variable)

>>> 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
>>>

4. 데이터 형식(Data type)

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!
>>>

5. 문자열(String)

'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:]
'손의 왼손코딩'

Method

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('코딩')
미운	코딩

6. 리스트(List)

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

7. Tuple

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
>>> 

8. for

for 변수 in 컨테이너:
vvvv실행할 명령1
vvvv실행할 명령2

  • 들여쓰기(4칸 권장. 탭, 띄어쓰기 둘 중 하나만 일관적으로 사용해야 함)
  • 실행할 명령 부분을 코드블럭이라고 함
>>> 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]

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
PQandornot P
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

Membership
in
not in

>>> 과일 = ['망고', '포도', '딸기', '바나나', '메론', '사과']
>>> '망고' in 과일
True
>>> '수박' in 과일
False
>>> '수박' not in 과일
True
>>> 과일.append('수박')
>>> '수박' not in 과일
False
>>> '수박' in 과일

10. 조건문

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('당신은!?')
    
	
당신은!?
>>>

11. while 반복문

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

12. Dictionary

{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 김씨
>>> 

13. Function 함수

반복되는 코드에 이름을 붙여 필요할 때마다 불러서 쓸 수 있음

  • 내장함수 : 파이썬 기본 제공 함수
  • 모듈의 함수 : import를 해서 갖다 쓸 수 있는 함수
  • 사용자 정의 함수 : 직접 만들어 쓰는 함수
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
>>> 

14. Object 객체

파이썬에서는 대부분의 것들이 객체
현실의 것을 컴퓨터 안에 구현하는 것이며
함수와 변수(데이터) 한꺼번에 묶어서 만드는 것이 객체

# 기타(악기)라는 객체는 데이터와 함수로 이뤄짐
# 데이터
name : G6136CST
color : white
Family : Falcon

# 가능한 주법(함수)
fingerstyle
strumming
fingerpicking
>>> my_list = [1, 2, 3] #데이터
>>> my_list.append(4) #함수
>>> my_list
[1, 2, 3, 4]
>>> 

15. 그외

코딩스타일

내가 코드를 작성하는 경우보다 다른 사람들이 내 코드를 보는 경우가 더 많아진다.

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'
profile
Back-End Developer

0개의 댓글