1. 주석과 출력
1.1 주석 : 앞에 #을 붙이면 코드로 실행이 안됨
1
2
3
4
# 1 2 3 을 출력하는 코드 <- 주석
print(1)
print(2)
print(3)
1
2
3
1
2
3
- 코드에 대한 설명이나 중간에 코드를 실행시키고 싶지않을때 사용
- 단축키 : ctrl + /
- 블럭설정 : shift + 방향키
1.2 출력 : print 함수
1
2
3
4
5
6
a = 1
b = 2
print(b)
c = 3
b = 4
print(b)
1
2
2
4
1
2
print(1,2)
print(3)
1
2
1 2
3
1
print(1,2,3, end = ' ')
1
1 2 3
1
2
print(1, 2, sep = '-', end='\t')
print(3)
1
1-2 3
1
2
print(1, 2, sep = '-', end='-')
print(3)
1
1-2-3
1
python_data_science = 1
1
python_data_science
1
1
- 코드 중간에 변수에 들어있는 값을 확인하고 싶을때 사용
- print 함수의 옵션
- docsting : 함수에 대한 설명, 단축키 (shift + tap)
- 기본은 end = ‘\n’ (new line)
- 자동완성 : tab
2. 변수 선언
2.1 변수 선언이란?
1
2
3
4
a = 1
b = 2
c = a + b
c
1
3
1
2
3
d, e = 3, 4
f = g = 5
d, e, f, g
1
(3, 4, 5, 5)
- RAM 저장공간에 값을 할당하는 행위
3. 식별자
3.1 식별자란?
- 변수, 함수, 클래스, 모듈 등의 이름을 식별자라고 함
- 식별자 규칙
- 소문자, 대문자, 숫자, 언더스코어(_)를 사용
- 가장 앞에 숫자 사용 불가
- 예약어 사용 불가 : def, class, try…
- 컨벤션
- snake_case : fast_campus : 변수, 함수
- CamelCase : FastCampus, Fastcampus : 클래스
4. 데이터 타입
4.1 데이터 타입의 종류
1
2
3
a = 1
b = 'python'
type(a), type(b)
1
(int, str)
- RAM 저장공간을 효율적으로 사용하기 위해서 저장공간의 타입을 설정
- 동적 타이핑
- 변수 선언시 저장되는 값에 따라서 자동으로 데이터 타입이 설정
- 기본 데이터 타입 : int, float, bool, str
- 컬렉션 데이터 타입 : list, tuple, dict
5. 기본 데이터 타입
5.1 int, float, bool, str
1
2
3
4
5
a = 1
b = 2.2
c = False # True
d = 'data'
type(a), type(b), type(c), type(d),
1
(int, float, bool, str)
1
a + b
1
3.2
5.2 Boolean
1
a + c
1
1
- bool은 True = 1, False = 0으로 인식
5.3 데이터 타입의 함수들
- 문자열로 된 데이터 타입의 함수들
5.3.1 Upper
1
2
e = d.upper()
e
1
'DATA'
- 대문자로 전환
1
d, e
1
('data', 'DATA')
1
f = ' Fast campus '
5.3.2 lower
1
f.lower()
1
' fast campus '
- 소문자로 변환
5.3.3 Strip
1
f.strip()
1
'Fast campus'
- 앞뒤에 공백제거
5.3.4 Replace
1
f.replace('Fast', 'Slow')
1
' Slow campus '
- 특정 문자열 치환
5.3.5 Dir
1
dir(f)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
['__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']
- 사용가능한 함수 확인
5.3.6 오프셋 인덱스
1
g = 'abcdefg'
1
g[2], g[-2], g[2:5], g[:2], g[3:], g[-2:], g[::2], g[::-1]
1
('c', 'f', 'cde', 'ab', 'defg', 'fg', 'aceg', 'gfedcba')
1
numbers = '123456789'
1
2
# 97531 출력(1)
numbers[::-2]
1
'97531'
1
2
# 97531 출력(2)
numbers[::2][::-1]
1
'97531'
6. 컬렉션 데이터 타입 : list, Tuple, Dict
6.1 List
1
2
ls = [1, 2, 3, 'four', [5, 6], True, 1.2]
type(ls), ls
1
(list, [1, 2, 3, 'four', [5, 6], True, 1.2])
1
ls[3], ls[1:3], ls[::-1]
1
('four', [2, 3], [1.2, True, [5, 6], 'four', 3, 2, 1])
- 순서가 있는 수정이 가능한 데이터 타입
- Offset index 사용이 가능
6.2 List 함수들
1
ls = [1, 5, 2, 4]
6.2.1 Append
1
2
ls.append(3)
ls
1
[1, 5, 2, 4, 3]
- 가장 뒤에 값을 추가
6.2.2 Sort
1
2
ls.sort()
ls
1
[1, 2, 3, 4, 5]
1
ls[::-1]
1
[5, 4, 3, 2, 1]
1
2
ls.sort(reverse=True)
ls
1
[5, 4, 3, 2, 1]
- 오름차순으로 정렬
- 내림차순은 함수가 없음으로, 오름차순의 역순 혹은 (reverse = True)
6.3 리스트의 복사
- 리스트의 복사는 얕은 복사와 깊은 복사가 있다.
6.3.1 얕은 복사
1
2
3
ls1 = [1, 2, 3]
ls2 = ls1
ls1, ls2
1
([1, 2, 3], [1, 2, 3])
1
2
ls1[2] = 5
ls1, ls2
1
([1, 2, 5], [1, 2, 5])
- 리스트만 복사되어, ls2, ls1은 서로 같은 주소값을 참조
- 위의 내용에 따라서 ls1이 바뀌면 ls2도 바뀌고 반대의 경우도 마찬가지
6.3.2 깊은 복사
1
2
ls3 = ls1.copy()
ls1, ls3
1
([1, 2, 5], [1, 2, 5])
1
2
ls1[2] = 10
ls1, ls3
1
([1, 2, 10], [1, 2, 5])
- 리스트의 주소값이 복사되어 새로운 주소값이 생김
6.4 Tuple
1
2
3
tp1 = 1, 2, 3
tp2 = (4, 5, 6)
type(tp1), type(tp2), tp1, tp2
1
(tuple, tuple, (1, 2, 3), (4, 5, 6))
1
2
a, b = 1, 2
a, b
1
(1, 2)
- 리스트와 같지만 수정이 불가능한 데이터 타입
- tuple은 리스트보다 같은 데이터를 가졌을때 공간을 적게 사용
6.4.1 Offset index 사용
1
tp1[1], tp1[::-1]
1
(2, (3, 2, 1))
6.4.2 리스트와 튜플의 저장공간 차이 비교
1
2
3
4
5
6
import sys
ls = [1, 2, 3]
tp = (1, 2, 3)
print(sys.getsizeof(ls), sys.getsizeof(tp))
1
80 64
6.5 Dict
1
2
3
4
5
6
dic = {
1 : 'one',
'two' : 2,
'three' : [1, 2, 3]
}
type(dic), dic
1
(dict, {1: 'one', 'two': 2, 'three': [1, 2, 3]})
1
dic[1], dic['three']
1
('one', [1, 2, 3])
1
2
dic['two'] = 123
dic
1
{1: 'one', 'two': 123, 'three': [1, 2, 3]}
- 순서가 없고 {키 : 값}으로 구성되어 있는 데이터 타입
- 선언 : 키는 정수, 문자열 데이터 타입만 사용, 이 가능
- 인덱스 대신 키를 사용
6.6 List와 Dict 실습
- 아래의 데이터를 list와 dict으로 선언
- 도시 : seoul, busan, deagu
- 인구 : 9,700,000 3,400,000 2,400,000
6.6.1 List
1
2
3
city = ['seoul', 'busan', 'deagu']
population = [9700000, 3400000, 2400000]
city, population
1
(['seoul', 'busan', 'deagu'], [9700000, 3400000, 2400000])
1
sum(population)
1
15500000
6.6.2 Dict
1
2
3
4
5
6
data = {
'seoul' : 9700000,
'busan' : 3400000,
'deagu' : 2400000
}
data
1
{'seoul': 9700000, 'busan': 3400000, 'deagu': 2400000}
1
sum(data.values())
1
15500000
7. 형변환
7.1 형변환 이란
- 여러가지 데이터들의 형태를 변환 하는것
- str -> int or float은 불가능할수도 있음함 (‘일’은 숫자가 아니고 문자이기 떄문에)
- object -> float -> int -> str로 변경 가능
- int, float, bool, str, list, tuple, dict
7.1.1 string은 int형태로 형변환이 불가
1
2
stirng = 'python'
int(string)
1
2
3
4
5
6
7
8
9
10
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-50-8259ae7e8a1a> in <module>
1 stirng = 'python'
----> 2 int(string)
NameError: name 'string' is not defined
7.2 데이터 타입이 다른변수들의 연산
1
2
3
a = 1
b = "2"
a + b
1
2
3
4
5
6
7
8
9
10
11
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-42-f421d2a6e030> in <module>
1 a = 1
2 b = "2"
----> 3 a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- 데이터 타입이 다른 변수들은 오류가 날수 있음
7.2.1 int로 변환
1
a + int(b)
1
3
- 변수 b가 str타입이고, 2로 되어있어서 int로 변환 가능
7.2.2 str로 변환
1
str(a) + b
1
'12'
- 혹은 a변수의 1을 str로 변환가능
- 다만 두개의 결과가 다른것을 주목 int + int = sum이고, str + str = strstr이 됨
7.3 zip
1
list(zip(city, population))
1
[('seoul', 9700000), ('busan', 3400000), ('deagu', 2400000)]
1
2
result = dict(zip(city, population))
result
1
{'seoul': 9700000, 'busan': 3400000, 'deagu': 2400000}
1
2
3
data1 = list(result.keys())
data2 = list(result.values())
data1, data2
1
(['seoul', 'busan', 'deagu'], [9700000, 3400000, 2400000])
- 같은 인덱스 데이터끼리 묶어주는 함수
- 위에서 실습한 list 데이터를 하나로 묶어줌 (리스트안에 튜플)
- zip으로 묶고 난뒤에는 list, tuple, dict로 형 변환를 해주어야 함
8. 연산자
8.1 산술 연산자
1
2
3
a = 1
b = 2
a + b
1
3
1
(1 + 4) / 2 ** 2
1
1.25
+
: 더하기-
: 빼기*
: 곱하기/
: 나누기//
: 몫%
: 나머지**
: 제곱
8.2 할당 연산자
1
2
3
a = 3
a //= 3
a
1
1
1
2
3
4
a = 10
a = a + 10
a = a + 10
a
1
30
1
2
3
4
a = 10
a += 10
a += 10
a
1
30
- 변수에 누적시키면서 연산하는것
- += : 변수에 누적해서 더함
- -= : 변수에 누적해서 뺌
**
= : 변수에 누적해서 제곱- //= : 변수가 누적해서 나머지
8.3 비교 연산자
1
2
print(a, b)
a > b, a == b, a < b
1
2
30 2
(True, False, False)
>
: 작다<
: 크다==
: 같다!=
: 같지 않다>=
: 작거나 같다<=
: 크거나 같다- 결과로 True, False가 반환됨
8.4 논리 연산자
1
True and False, True or False, not True or False
1
(False, True, False)
- True, False를 연산 or and not
8.5 멤버 연산자
1
2
ls = ['jin', 'andy', 'john']
'andy' in ls, 'mm' in ls, 'jin' not in ls
1
(True, False, False)
- 특정 데이터가 있는지 확인할때 사용하는 연산자
- in : 있다
- not in : 없다
- True, False로 return됨
9.그 외 함수
9.1 random 함수
1
import random
- 랜덤한 값을 출력해주는 함수 import random으로 불러옴
9.1.1 randint
1
random.randint(1,10)
1
2
- 설정한 숫자값 사이에서 랜덤한 정수를 출력
9.1.2 randrange
1
random.randrange(1,10)
1
3
- 설정한 숫자값 사이에서 최대설정값 -1 중 랜덤한 정수를 출력
9.1.3 shuffle
1
2
3
sample = ['밥', '라면', '떡볶이']
random.shuffle(sample)
sample
1
['라면', '떡볶이', '밥']
- 순서가 있는 자료형을 랜덤하게 섞어줌
9.1.4 choice
1
random.choice(sample)
1
'라면'
- 리스트와 같은 자료형에서 랜덤하게 한개를 뽑아줌
9.2 입력함수
1
2
data = input('insert string : ')
data
1
2
insert string : 안녕하세요
'안녕하세요'
- input : 사용자가 직접 어떠한 값을 입력할수 있음, 기본으로 stirng형
10. 실습 해결의책
10.1 해결의 책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 해결책을 리스트로 작성
solutions = [
'밥을 드세요',
'그건 하지 마세요',
'좋은 생각 입니다',
'잘 안될겁니다. 포기하세요',
'좋아요. 좋은 선택이에요'
]
# 질문 입력
input('질문을 입력하세요')
idx = random.randint(0, len(solutions)-1)
# index에 해당하는 솔루션 출력
solutions[idx]
1
2
질문을 입력하세요 안녕하세요
'좋아요. 좋은 선택이에요'
- 질문을 하면 질문에 대한 답변을 해주는 책
- 솔루션을 리스트로 작성
- 질문 입력받음
- 솔루션의 갯수에 맞게 랜덤한 index 정수 값을 생성
- index에 해당하는 솔루션 리스트의 데이터를 출력