기본적인 마크다운 문법

  • hello
  • hello
  • hello
  1. hello
  2. hello
  3. hello
print('hello world')

hello world

Python

1) 변수

  • 변수란? 변할 수 있는 값
  • 변수의 형태(타입)
    • int - 정수
    • float - 실수
    • str - 문자열
    • list
    • tuple
    • dict
    • set
  • python을 실행시킬 수 있는 환경
    • python 직접 설치
    • colab, jupyter notebook 등 python을 보다 쉽게 사용할 수 있도록 만든 환경을 구성하고 실행
x = 3
y = 7
x = 100

x + y
107
type(x)
int
z = '10'

z + z
'1010'
type(z)
str

1-1) 변수의 형 변환

z = '10'

z + z
'1010'
age = input('나이를 입력해주세요.')

print(age + age)
나이를 입력해주세요.10
1010
z = '10'

int(z) + int(z)
20
z = '10'

float(z) + float(z)
20.0
z = 10

str(z) + str(z)
'1010'

1-2) 변수의 출력

a = 10
b = 'hello'
c = 10.1

print(a, b, c)
10 hello 10.1
print(str(a) + b + str(c)) #권장하지 않음
10hello10.1
print(str(a) + ' ' + b + ' ' + str(c)) #권장하지 않음
10 hello 10.1
name = 'hojun'
age = 10

print('제 이름은 {}이고 제 나이는 {}입니다.'.format(name, age))
제 이름은 hojun이고 제 나이는 10입니다.
print('제 이름은 {0}이고 제 나이는 {0}입니다.'.format(name, age))
제 이름은 hojun이고 제 나이는 hojun입니다.
print('제 이름은 {1}이고 제 나이는 {1}입니다.'.format(name, age))
제 이름은 10이고 제 나이는 10입니다.
print('제 이름은 ' + name + '이고 제 나이는 ' + str(age) + '입니다.') #권장하지 않음
제 이름은 hojun이고 제 나이는 10입니다.
print(f'제 이름은 {name}이고 제 나이는 {age}입니다.') #권장합니다.
제 이름은 hojun이고 제 나이는 10입니다.

2) 주석

  • 코드를 설명하는 용도로 사용
  • 코드를 보류하는 용도로 사용
'''
여러줄 주석입니다.
'''
"""
여러줄 주석입니다.
"""
print('hello world')
hello world
text = '''안녕하세요
저는
프로그래밍 강사이자
위니브 대표
이호준입니다.
'''
print(text)
안녕하세요
저는
프로그래밍 강사이자
위니브 대표
이호준입니다.

text = '안녕하세요\n저는\n프로그래밍 강사이자\n위니브 대표\n이호준입니다.' # 이스케이프 문자
print(text)
안녕하세요
저는
프로그래밍 강사이자
위니브 대표
이호준입니다.
text = '\'안녕하세요!\'' # 이스케이프 문자
print(text)
'안녕하세요!'

3) 연산자

3-1) 산술연산자

x = 3
y = 7

print(f'{x} + {y} = {x + y}')
print(f'{x} - {y} = {x - y}')
print(f'{x} * {y} = {x * y}')
print(f'{y} / {x} = {y / x}') # 실수
print(f'{y} // {x} = {y // x}') # 정수
print(f'{y} ** {x} = {y ** x}') # 승수
print(f'{y} % {x} = {y % x}') # 나머지
3 + 7 = 10
3 - 7 = -4
3 * 7 = 21
7 / 3 = 2.3333333333333335
7 // 3 = 2
7 ** 3 = 343
7 % 3 = 1
7 * 7 * 7
343
2 * 3 + 1 * 5
11
(2 * 3) + (1 * 5)
11

3-2) 할당연산

x = 3
x = x + 5
x
8
x = 3
x += 5 # x = x + 5
x
8
x += 5 # 이 블록을 여러번 실행해 보세요.
x
23

3-3) 비교연산

x = 3
y = 7

print(f'{x} > {y} = {x > y}') # Ctrl + /
# print(x > y)
print(f'{x} >= {y} = {x >= y}') 
print(f'{x} < {y} = {x < y}')
print(f'{x} <= {y} = {x <= y}') 
print(f'{x} == {y} = {x == y}') 
print(f'{x} != {y} = {x != y}')
3 > 7 = False
3 >= 7 = False
3 < 7 = True
3 <= 7 = True
3 == 7 = False
3 != 7 = True
10 == '10'
False
True == 1
True
True == 100
False
True == -1
False
bool(-1)
True
bool('')
False
bool('hello')
True
False == 0
True

3-3) 논리연산

x = True # 1
y = False # 0

print(x and y) # 논리 곱
print(x or y) # 논리 합
print(not x)
print(not y)
False
True
False
True
for i in range(100):
    print(i)
for i in range(100):
    if i % 3 == 0 and i % 5 == 0:
        print(i)
0
15
30
45
60
75
90
for i in range(100):
    if i % 3 == 0 or i % 5 == 0:
        print(i)
0
3
5
6
9
10
12
15
18
20
21
24
25
27
30
33
35
36
39
40
42
45
48
50
51
54
55
57
60
63
65
66
69
70
72
75
78
80
81
84
85
87
90
93
95
96
99

4) 변수의 타입과 메서드

  • int - 정수
  • float - 실수
  • str - 문자열
  • list
  • tuple
  • dict
  • set

4-1) int

x = 10
type(x)
int
dir(x)
# ['__abs__',
#  '__add__', 이 메직 메서드가 있기 때문에 더하기가 되는 것입니다.
#  '__and__',
#  '__bool__',
#  '__ceil__',
#  '__class__',
#  '__delattr__',
#  '__dir__',
#  '__divmod__',
#  '__doc__',
#  '__eq__', 이 메직 메서드가 있기 때문에 동등비교가(==) 되는 것입니다.
#  '__float__',
#  '__floor__',
#  '__floordiv__',
#  '__format__',
#  '__ge__',
#  '__getattribute__',
#  '__getnewargs__',
#  '__gt__',
#  '__hash__',
#  '__index__',
#  '__init__',
#  '__init_subclass__',
#  '__int__',
#  '__invert__',
#  '__le__',
#  '__lshift__',
#  '__lt__',
#  '__mod__',
#  '__mul__',
#  '__ne__',
#  '__neg__',
#  '__new__',
#  '__or__',
#  '__pos__',
#  '__pow__',
#  '__radd__',
#  '__rand__',
#  '__rdivmod__',
#  '__reduce__',
#  '__reduce_ex__',
#  '__repr__',
#  '__rfloordiv__',
#  '__rlshift__',
#  '__rmod__',
#  '__rmul__',
#  '__ror__',
#  '__round__',
#  '__rpow__',
#  '__rrshift__',
#  '__rshift__',
#  '__rsub__',
#  '__rtruediv__',
#  '__rxor__',
#  '__setattr__',
#  '__sizeof__',
#  '__str__',
#  '__sub__',
#  '__subclasshook__',
#  '__truediv__',
#  '__trunc__',
#  '__xor__',
#  'bit_length',
#  'conjugate',
#  'denominator',
#  'from_bytes',
#  'imag',
#  'numerator',
#  'real',
#  'to_bytes']
['__abs__',
 '__add__',
 '__and__',
 '__bool__',
 '__ceil__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__float__',
 '__floor__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__index__',
 '__init__',
 '__init_subclass__',
 '__int__',
 '__invert__',
 '__le__',
 '__lshift__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__or__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__round__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 '__xor__',
 'bit_length',
 'conjugate',
 'denominator',
 'from_bytes',
 'imag',
 'numerator',
 'real',
 'to_bytes']
x = 3 #11
x.bit_length()
2
x = 10 #1010
x.bit_length()
4
x = 17 #10001
x.bit_length()
5

4-2) string

s = 'paullab CEO leehojun'
print(type(s))
print(dir(s))
<class 'str'>
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
#  'casefold',
#  'center', 
#  'count', # V
#  'encode',
#  'endswith',
#  'expandtabs',
#  'find', # V
#  'format', # V
#  'format_map',
#  'index', # V
#  'isalnum',
#  'isalpha',
#  'isascii',
#  'isdecimal',
#  'isdigit',
#  'isidentifier',
#  'islower',
#  'isnumeric',
#  'isprintable',
#  'isspace',
#  'istitle',
#  'isupper',
#  'join', # V
#  'ljust',
#  'lower', # V
#  'lstrip',
#  'maketrans',
#  'partition',
#  'replace', # V
#  'rfind',
#  'rindex',
#  'rjust',
#  'rpartition',
#  'rsplit',
#  'rstrip',
#  'split', # V
#  'splitlines',
#  'startswith',
#  'strip', # V
#  'swapcase',
#  'title',
#  'translate',
#  'upper', # V
#  'zfill'] # V
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmod__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'capitalize',
 'casefold',
 'center',
 'count',
 'encode',
 'endswith',
 'expandtabs',
 'find',
 'format',
 'format_map',
 'index',
 'isalnum',
 'isalpha',
 'isascii',
 'isdecimal',
 'isdigit',
 'isidentifier',
 'islower',
 'isnumeric',
 'isprintable',
 'isspace',
 'istitle',
 'isupper',
 'join',
 'ljust',
 'lower',
 'lstrip',
 'maketrans',
 'partition',
 'replace',
 'rfind',
 'rindex',
 'rjust',
 'rpartition',
 'rsplit',
 'rstrip',
 'split',
 'splitlines',
 'startswith',
 'strip',
 'swapcase',
 'title',
 'translate',
 'upper',
 'zfill']
'hello world'.count('l')
3
'aaabbcccc'.count('c')
4
s = 'paullab CEO leehojun'
s[0] #indexing, 0을 index
'p'
s.find('C')
8
s[8]
'C'
s.index('C')
8
s.find('Z')
-1
s.index('z')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-3d8ee9b57202> in <module>
----> 1 s.index('z')

ValueError: substring not found
name = 'leehojun'
age = 10
print('제 나이는 {} 제 이름은 {}'.format(name, age))
제 나이는 leehojun 제 이름은 10
name = 'leehojun'
age = 10
s = '제 나이는 {} 제 이름은 {}'
print(s.format(name, age))
제 나이는 leehojun 제 이름은 10
s = 'paullab CEO leehojun'
s.split(' ')
['paullab', 'CEO', 'leehojun']
s.split('')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-24-ec030e9d2d78> in <module>
----> 1 s.split('')

ValueError: empty separator
s.split()
['paullab', 'CEO', 'leehojun']
number = '010-0000-0000'
number.split('-')
['010', '0000', '0000']
'!'.join(['010', '0000', '0000'])
'010!0000!0000'
'!!'.join(['010', '0000', '0000'])
'010!!0000!!0000'
'-'.join(['010', '0000', '0000'])
'010-0000-0000'
s
'paullab CEO leehojun'
s.lower()
'paullab ceo leehojun'
s.upper()
'PAULLAB CEO LEEHOJUN'
s
'paullab CEO leehojun'
s.replace('CEO', 'CTO')
'paullab CTO leehojun'
'                    hello      '
'                    hello      '
'                    hello      '.strip()
'hello'
'hello'.zfill(10)
'00000hello'
'1010'.zfill(10)
'0000001010'

4-3) indexing과 slicing

s = 'hello world'
s[0]
'h'
s[1]
'e'
s[5]
' '

s[0]+s[1]+s[2]+s[3]+s[4]
'hello'
s[0:5]
'hello'
s[0:5:1]
'hello'
s[0:5:2]
'hlo'
s[-1]
'd'
s[7:0:-1]
'ow olle'
s[::]
'hello world'
s[::2]
'hlowrd'
s[::-1]
'dlrow olleh'

4-4) list

  • 순서가 있는 데이터 집합
  • 수정이 가능한 데이터 집합
  • 순회가 가능한 데이터 집합
a = [10, 20, 'hello', 'world']
a[0]
10
a[0:2]
[10, 20]
a[0:3]
[10, 20, 'hello']
a[0] = 1000
a
[1000, 20, 'hello', 'world']
s = 'hello world'
s[0]
'h'
s[0] = 'k'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-97a0b231e717> in <module>
----> 1 s[0] = 'k'

TypeError: 'str' object does not support item assignment
for i in a:
    print(i)
1000
20
hello
world
for i in [10, 20, 30, 40]:
    print(i)
10
20
30
40
for i in 'hello world':
    print(i)
h
e
l
l
o
 
w
o
r
l
d
type(a)
list
a * 2
[1000, 20, 'hello', 'world', 1000, 20, 'hello', 'world']
dir(a)
# 'append',
#  'clear',
#  'copy',
#  'count',
#  'extend',
#  'index',
#  'insert',
#  'pop',
#  'remove',
#  'reverse',
#  'sort'
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'clear',
 'copy',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']
a = [10, 20, 30, 40]
a.append(50)
a
[10, 20, 30, 40, 50]
a.clear()
a
[]
a = [10, 20, 30, 40]
b = a
b.append(50)
a
[10, 20, 30, 40, 50]
b
[10, 20, 30, 40, 50]
a = [10, 20, 30, 40]
b = a.copy()
b.append(50)
a
[10, 20, 30, 40]
b
[10, 20, 30, 40, 50]
a = [10, 20, 30, 40, 1, 1, 1, 2, 2, 2, 2, 3, 3]
a.count(1)
3
a.count(2)
4
a = [10, 20, 30, 40]
a.extend([10, 20, 30])
a
[10, 20, 30, 40, 10, 20, 30]
a.index(40)
3
a.index(30)
2
a.insert(2, 10000)
a
[10, 20, 10000, 30, 40, 10, 20, 30]
a.pop()
30
a
[10, 20, 10000, 30, 40, 10, 20]
a.pop(0)
10
a
[20, 10000, 30, 40, 10, 20]
a.pop(1)
10000
a
[20, 30, 40, 10, 20]
a.remove(20)
a
[30, 40, 10, 20]
a.reverse()
a
[20, 10, 40, 30]
a.sort()
a
[10, 20, 30, 40]
a.reverse()
a
[40, 30, 20, 10]
a.sort()
a
[10, 20, 30, 40]
a.sort(reverse=True)
a
[40, 30, 20, 10]

4-5) tuple

  • 순서가 있고 변경 불가능한 자료형
  • 순회가 가능합니다.
t = (10, 20, 30, 40)
t
(10, 20, 30, 40)
type(t)
tuple
dir(t)
# 'count',
#  'index'
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmul__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'count',
 'index']
for i in t:
    print(i)
10
20
30
40
t[0] = 1000
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-93-c89ef30d7ede> in <module>
----> 1 t[0] = 1000

TypeError: 'tuple' object does not support item assignment

4-6) dict(dictionary)

  • key와 value로 이뤄져 있습니다.
  • 값의 수정이 가능합니다.
  • index로 호출할 수 없습니다. key로 호출해야 합니다.
  • 순회를 돌면 key 값을 출력합니다.

d = {'one': 10, 'two': 20}
d['one']
10
d[1]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-95-abe283337115> in <module>
----> 1 d[1]

KeyError: 1
for i in d:
    print(i)
one
two
d['one'] = 10000
d
{'one': 10000, 'two': 20}
type(d)
dict
dir(d)
['__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'clear',
 'copy',
 'fromkeys',
 'get',
 'items',
 'keys',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values']
d + d
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-100-50223dde4385> in <module>
----> 1 d + d

TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
#  'copy',
#  'fromkeys',
#  'get',
#  'items', # V
#  'keys', # V
#  'pop',
#  'popitem',
#  'setdefault',
#  'update',
#  'values' # V
d.items()
dict_items([('one', 10000), ('two', 20)])
for i in d.items():
    print(i)
('one', 10000)
('two', 20)
for i in d.items():
    print(i[0])
    print(i[1])
one
10000
two
20
d.keys()
dict_keys(['one', 'two'])
d.values()
dict_values([10000, 20])

4-7) set

  • 중복을 허락하지 않습니다.
  • 합집합, 교집합, 차집합 같은 집합 연산이 가능한 자료형
  • indexing은 되지 않습니다.
  • 순회는 가능합니다.
s = {1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3}
s
{1, 2, 3}
set('11111112222233')
{'1', '2', '3'}
s[0]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-109-c9c96910e542> in <module>
----> 1 s[0]

TypeError: 'set' object is not subscriptable
for i in s:
    print(i)
1
2
3
type(s)
set
dir(s)
['__and__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__iand__',
 '__init__',
 '__init_subclass__',
 '__ior__',
 '__isub__',
 '__iter__',
 '__ixor__',
 '__le__',
 '__len__',
 '__lt__',
 '__ne__',
 '__new__',
 '__or__',
 '__rand__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__ror__',
 '__rsub__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__xor__',
 'add',
 'clear',
 'copy',
 'difference',
 'difference_update',
 'discard',
 'intersection',
 'intersection_update',
 'isdisjoint',
 'issubset',
 'issuperset',
 'pop',
 'remove',
 'symmetric_difference',
 'symmetric_difference_update',
 'union',
 'update']
#  'clear',
#  'copy',
#  'difference', # V
#  'difference_update',
#  'discard',
#  'intersection',
#  'intersection_update',
#  'isdisjoint',
#  'issubset',
#  'issuperset',
#  'pop',
#  'remove',
#  'symmetric_difference',
#  'symmetric_difference_update',
#  'union', # V
#  'update'
a = {1, 2, 3}
b = {3, 4, 5, 6}
a - b
{1, 2}
a = {1, 2, 3}
b = {3, 4, 5, 6}
a.difference(b)
{1, 2}
a.union(b)
{1, 2, 3, 4, 5, 6}

5) 조건문과 반복문

5-1) 조건문

if True:
    print('hello')
    print('world')
print('end')
hello
world
end
if False:
    print('hello')
    print('world')
print('end')
end
x = 3
y = 7
if x > y:
    print('hello')
    print('world')
print('end')
end
x = 3
y = 7
if x < y:
    print('hello')
    print('world')
print('end')
hello
world
end
score = 90
money = 1000
if score >= 90:
    money += 1000000
if score >= 80:
    money += 100000
if score >= 70:
    money += 10000
money
1111000
score = 89
money = 1000
if score >= 90:
    money += 1000000
elif score >= 80:
    money += 100000
elif score >= 70:
    money += 10000
money
101000
score = 11
money = 1000
if score >= 90:
    money += 1000000
elif score >= 80:
    money += 100000
elif score >= 70:
    money += 10000
else:
    money = 0
money
0
score = 95
money = 1000
if score >= 90:
    if score >= 95:
        money += 1000000
    else:
        money += 900000
money
1001000

5-2) 반복문

for i in range(10):
    print(i)
0
1
2
3
4
5
6
7
8
9
for i in 'hello':
    print(i)
    print('------')
print('end')
h
------
e
------
l
------
l
------
o
------
end
for i in [10, 20, 30]:
    print(i)
    print('------')
print('end')
10
------
20
------
30
------
end
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(2, 11, 2))
[2, 4, 6, 8, 10]
list(range(10, 1, -2))
[10, 8, 6, 4, 2]
for i in range(10, 1, -2):
    print(i)
10
8
6
4
2
for i in range(2, 10):
    print('----------')
    for j in range(1, 10):
        print(f'{i} X {j} = {i * j}')
----------
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
----------
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
----------
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
----------
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
----------
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
----------
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
----------
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
----------
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
x = 0
while x < 10:
    print(x)
    x += 1
print('end')
print(x)
0
1
2
3
4
5
6
7
8
9
end
10
x = 0
while x < 10:
    print(x)
    x += 2
print('end')
print(x)
0
2
4
6
8
end
10
x = 10
while x > 0:
    print(x)
    x -= 1
print('end')
print(x)
10
9
8
7
6
5
4
3
2
1
end
0
i = 1
while i < 9:
    print('----------')
    j = 1
    i += 1
    while j < 10:
        print(f'{i} X {j} = {i * j}')
        j += 1
print('end')
----------
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
----------
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
----------
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
----------
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
----------
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
----------
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
----------
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
----------
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
end
s = 'hello world'
ss = ''
for i in s:
    ss = i + ss
ss
'dlrow olleh'
s = 0
for i in range(1, 101):
    if i % 2 == 0:
        s += i
s
2550
s = 0
for i in range(0, 101, 2):
    s += i
s
2550
n = 100

n * (n + 2) // 4
2550

6) 함수

def hello(n): # 함수의 정의, 함수의 이름, 파라미터(parameter)
    for i in range(n):
        print('hello')

hello(4) # 함수의 호출, 아규먼트(argument)
hello
hello
hello
hello
hello(4)
def add(x, y): # x, y를 파라미터라고 부릅니다.
    return x + y # 반환값

print(add(10, 20) + add(1, 2) + add(3, 4)) # 10과 20을 아규먼트라고 부릅니다.
40
print(print('hello'))
hello
None
def test():
    return

print(test())
None
def test():
    return None

print(test())
None
# 땅파기()
# 땅파기()
# 땅파기()
# 땅파기()
# 땅다자기()
# 벽돌쌓기()
# 지붕올리기()
# 땅파기()
leehojun = print
leehojun('hello')
hello
def 더하기(x, y):
    return x + y

def 빼기(x, y):
    return x - y

def 나누기(x, y):
    return x // y

def 곱하기(x, y):
    return x * y

계산기 = [더하기, 빼기, 나누기, 곱하기]
# 더하기(10, 20) -> 계산기[0](10, 20)
계산기[0](10, 20)
30
def 더하기(x=10, y=20):
    return x + y

더하기()
30
더하기(1)
21
더하기(1, 2)
3
# 재귀함수(메모라이징 기법, 다이나믹 프로그래밍)
# 데코레이터
# 팩토리함수, 클로저
x = 10
def hello():
    print(x)
hello()
10
x = 10
def hello():
    x += 10
hello()
x
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-174-85af2104ec04> in <module>
      2 def hello():
      3     x += 10
----> 4 hello()
      5 x

<ipython-input-174-85af2104ec04> in hello()
      1 x = 10
      2 def hello():
----> 3     x += 10
      4 hello()
      5 x

UnboundLocalError: local variable 'x' referenced before assignment
x = 10
def hello():
    yy = 10
hello()
yy
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-176-ac7c5836ebd6> in <module>
      3     yy = 10
      4 hello()
----> 5 yy

NameError: name 'yy' is not defined
x = 10
def hello():
    global x
    x += 10
hello()
x
20
def factorial(n):
    if n <= 1:
        return 1
    else:
        return  n * factorial(n-1)

factorial(5)
120
# f(4)     4 * f(3)     4 * 6 == 24
# f(3)     3 * f(2)     3 * 2 == 6
# f(2)     2 * f(1)     2 * 1 == 2
# f(1)     1

7) Built-in Functions

  • A

    • abs()
    • aiter()
    • all()
    • any()
    • anext()
    • ascii()
  • B

    • bin()
    • bool()
    • breakpoint()
    • bytearray()
    • bytes()
  • C

    • callable()
    • chr()
    • classmethod()
    • compile()
    • complex()
  • D

    • delattr()
    • dict()
    • dir()
    • divmod()
  • E

    • enumerate()
    • eval()
    • exec()
  • F

    • filter()
    • float()
    • format()
    • frozenset()
  • G

    • getattr()
    • globals()
  • H

    • hasattr()
    • hash()
    • help()
    • hex()
  • I

    • id()
    • input()
    • int()
    • isinstance()
    • issubclass()
    • iter()
  • L

    • len()
    • list()
    • locals()
  • M

    • map()
    • max()
    • memoryview()
    • min()
  • N

    • next()
  • O

    • object()
    • oct()
    • open()
    • ord()
  • P

    • pow()
    • print()
    • property()
  • R

    • range()
    • repr()
    • reversed()
    • round()
  • S

    • set()
    • setattr()
    • slice()
    • sorted()
    • staticmethod()
    • str()
    • sum()
    • super()
  • T

    • tuple()
    • type()
  • V

    • vars()
  • Z

    • zip()
# int()
# float()
# str()
# bool()
# list()
# tuple()
# dict()
# set()
int(10.1)
10
list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
set([1, 1, 1, 2, 2, 3, 3, 3, 3])
{1, 2, 3}
bool('hello')
True
bool([])
False
bool('')
False
abs(-10)
bin(10)[2:]
max([1, 2, 3, 1000, 6, 7, 8])
min([1, 2, 3, 1000, 6, 7, 8])
sum([1, 2, 3, 1000, 6, 7, 8])

len([1, 2, 3, 1000, 6, 7, 8])
7
list(zip(['1', '2', '3'], 'hello world'))
list(zip('hello', 'world'))

def 제곱(x):
    return x ** 2
list(map(제곱, [1, 2, 3]))
[1, 4, 9]
for i in map(제곱, [1, 2, 3]):
    print(i)
1
4
9
list(map(lambda x:x**2, [1, 2, 3]))
[1, 4, 9]

8) 클래스

  • 클래스 : 자동차 공장(붕어빵 틀)
  • 인스턴스 : 자동차(붕어빵)
x = 10
print(type(x))
<class 'int'>
class 게시물찍는틀():
    title = ''
    contents = ''
    img = ''
class Car():
    maxPeople = 6 # 맴버(클래스 변수, 인스턴스 변수(self))
    maxSpeed = 300
    def start(self): # 매서드
        print('출발합니다!')
    def stop(self):
        print('멈춥니다!!')
k5 = Car() # k5가 인스턴스
k5.start()

k3 = Car() # k3가 인스턴스
k3.start()
출발합니다!
출발합니다!
k5 + k3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-4c85eb45283a> in <module>
----> 1 k5 + k3

TypeError: unsupported operand type(s) for +: 'Car' and 'Car'
k5.maxPeople
6
print(type(k3))
x = 3
print(type(x))
<class '__main__.Car'>
<class 'int'>
dir(k3)
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'maxPeople',
 'maxSpeed',
 'start',
 'stop']
class Car():
    maxPeople = 6 # 맴버(클래스 변수, 인스턴스 변수(self))
    maxSpeed = 300
    def start(self): # 매서드
        print('출발합니다!')
    def stop(self):
        print('멈춥니다!!')
    def __add__(self, a):
        return '더하기를 할 수 없습니다!'
    def __mul__(self, a):
        return '곱하기를 할 수 없습니다!'
k5 = Car() # k5가 인스턴스
k3 = Car() # k3가 인스턴스
k5 + k3
'더하기를 할 수 없습니다!'
k5 * k3
'곱하기를 할 수 없습니다!'
class Car():
    maxPeople = 6 # 맴버(클래스 변수, 인스턴스 변수(self))
    maxSpeed = 300
    def start(self): # 매서드
        print('출발합니다!')
    def stop(self):
        print('멈춥니다!!')
    def __add__(self, a):
        return self.maxPeople + a.maxPeople
    def __mul__(self, a):
        return '곱하기를 할 수 없습니다!'
k5 = Car() # k5가 인스턴스
k3 = Car() # k3가 인스턴스
k5 + k3
12
class Car():
    생성된차 = []
    def __init__(self, name):
        self.n = name
        self.생성된차.append(name)
    def __str__(self):
        return self.n
    maxPeople = 6 # 맴버(클래스 변수, 인스턴스 변수(self))
    maxSpeed = 300
    def start(self): # 매서드
        print('출발합니다!')
    def stop(self):
        print('멈춥니다!!')
k5 = Car('호준이차') # k5가 인스턴스
k3 = Car('제주카') # k3가 인스턴스
k5.n
'호준이차'
print(k5)
호준이차
print(k5.생성된차)
['호준이차', '제주카']
class Car():
    maxPeople = 6
    maxSpeed = 300
    def start(self):
        print('출발합니다!')
    def stop(self):
        print('멈춥니다!!')
k5 = Car()
class 전기차(Car):
    배터리 = 100
    배터리km = 300
k5전기차 = 전기차()
k5전기차.start()
출발합니다!

9) 파일의 입출력과 모듈

  • 파일 입출력의 모드
    • r 읽기모드
    • w 쓰기모드
    • a 추가모드
f = open("./new.txt", 'w')
data = '안녕하세요.'
f.write(data)
f.close()
f = open("./new.txt", 'w')
data = ''
for i in range(10):
    data += f'{i} 안녕하세요.\n'
f.write(data)
f.close()
f = open("./new.txt", 'r')
print(f.read())
0 안녕하세요.
1 안녕하세요.
2 안녕하세요.
3 안녕하세요.
4 안녕하세요.
5 안녕하세요.
6 안녕하세요.
7 안녕하세요.
8 안녕하세요.
9 안녕하세요.

import test

test.name
'hojun'
test.age
10
import test as t

t.name
'hojun'
from test import age, name

name
'hojun'
# from test1 import age, name
# from test2 import age, name

# name
# 시각화 : matplotlib, plotly...
# 크롤링 : requests, beautifulsoup....
import numpy as np
from skimage import io
import matplotlib.pyplot as plt
jeju = io.imread('jeju.jpg')
type(jeju)
numpy.ndarray
jeju.shape
(1440, 1920, 3)
jeju
array([[[171, 220, 252],
        [173, 222, 254],
        [172, 223, 254],
        ...,
        [124, 187, 254],
        [125, 188, 255],
        [126, 189, 255]],

       [[173, 222, 254],
        [174, 223, 255],
        [173, 224, 255],
        ...,
        [124, 187, 254],
        [125, 188, 255],
        [126, 189, 255]],

       [[175, 224, 255],
        [175, 224, 255],
        [174, 225, 255],
        ...,
        [124, 187, 254],
        [125, 188, 255],
        [126, 189, 255]],

       ...,

       [[ 50,  75,  10],
        [ 36,  61,   0],
        [ 24,  47,   0],
        ...,
        [  8,  33,   0],
        [ 16,  43,   0],
        [ 17,  46,   0]],

       [[ 37,  56,  10],
        [ 29,  49,   0],
        [ 47,  69,   7],
        ...,
        [ 15,  41,   4],
        [ 13,  41,   0],
        [  6,  37,   0]],

       [[ 40,  57,  25],
        [ 38,  56,  16],
        [ 64,  85,  29],
        ...,
        [ 35,  61,  26],
        [ 34,  62,  22],
        [ 12,  43,   0]]], dtype=uint8)
plt.imshow(jeju)
<matplotlib.image.AxesImage at 0x7f81ca169350>
data = jeju[:]
x = [1, 2, 3, 4, 5]
x[::-1]
[5, 4, 3, 2, 1]
plt.imshow(data[::-1])
<matplotlib.image.AxesImage at 0x7f81c5279890>
plt.imshow(jeju[:, ::-1])
<matplotlib.image.AxesImage at 0x7f81c5202410>
plt.imshow(jeju[800:1200, 700:1150])
<matplotlib.image.AxesImage at 0x7f81c5173790>
plt.imshow(jeju[::5, ::5])
plt.imshow(jeju[::10, ::10])
plt.imshow(jeju[::30, ::30])
<matplotlib.image.AxesImage at 0x7f81c500ac90>