맥은 기본적으로 파이썬이 설치되어 있다. 버전이 2점대일 경우 홈페이지가서 수동 설치 필요.
python.org
Python 3.6.2 Downloads (파이썬2와 3은 호환 안되는 부분 있음. 처음 시작하는 사람은 Python3하기)
내장함수
print() → 출력함수
print(1, 2, 3) → 1 2 3 (쉼표써서 출력하고자 하면 자동으로 띄어쓰기 상태로 출력됨 → 띄어쓰기는 꼭 넣어주기)
print('집단지성', end='미운코딩새끼')
집단지성미운코딩새끼
input() : 사용자 입력 함수 → 안에 문자 넣을 수 있음
input(’이름을 입력하세요 : ‘)
age = input(’당신의 나이는? : ’) → 사용자가 31입력 →
age = ‘31’
int() → 형 변환 함수 / 변수를 int형으로 변경 가능
str() → 형 변환 함수 / 변수를 str형으로 변경 가능
list() → 형 변환 함수 / 변수를 list형으로 변경 가능
my_str = 'coding'
list(my_str)
['c', 'o', 'd', 'i', 'n', 'g']
len() → 변수의 길이를 반환
range() → 연속되는 숫자를 값으로 취하고 싶을 때 사용하는 함수
사용법 : range(시작할 숫자, 마지막 숫자(실제 숫자는 -1))
for i in range(0, 3) : # 0부터 시작해서 3 직전까지 숫자 출력 -> [0, 1, 2]
print(i)
0
1
2
bool()
bool( ) 을 이용하면 입력된 식이나 값을 평가해 불 형의 값(True 또는 False)을 출력해준다.
식이나 값을 계산해서 결과값이 만들어지는 것을 평가(evaluate)라고 한다.
python 언어에서 정수값 0은 False(거짓)로 평가되고, 그 외의 값들은 모두 True(참)로 평가된다.
변수명 = 할당할 값 → 여기서 =은 대입연산자
Naming 규칙 : 글자 가능, _, 대소문자 구분 가능. 한글도 됨, *도 됨. → 파이썬에는 유니코드를 쓰기때문에 유니코드 안에 들어 있는 문자는 다 됨.
단 ❗❗❗
자료형
Numeric
지수 표현 방식
- 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용
- e나 E다음에 오는 수는 10의 지수부를 의미
ex) 1e9 ⇒ 10의 9제곱을 의미
유효숫자e지수 = 유효숫자 * 10지수
→ 수 자료형의 연산
사칙연산 많이 사용
나누기 연산자 (/) 사용시 주의 ⇒ 파이썬에서 나누기 연산자(/)는 나눠진 결과를 실수형으로 반환
나머지 연산자 (%)
몫을 얻기 위한 연산자 (//)
거듭 제곱 연산자 (**)
개발과정에서 실수 값을 제대로 비교하지 못해서 원하는 결과 못 얻음. 이럴 땐 round() 함수를 이용함. round(123.456, 2) ⇒ 123.46
String (Immutable)
문자열 : “string”
my_str = """김씨가족
이씨가족
최씨가족
"""
my_str
'김씨가족\n이씨가족\n최씨가족\n'
Formatting : 문자열을 좀 더 잘 표현하기 위함 퍼센트 연산자
%d (정수형) : 여러개의 포맷팅을 사용하고 싶을 땐 쉼표로 구분
'%d %d' % (4, 7)
'4 7'
%f (실수형) :
'%f' % 3.14
'3.140000'
%s (문자열) :
my_str = 'My name is %s' % '이주원'
my_str
'My name is 이주원'
요즘방식 : ‘{ }’.format()
# 요즘 방식
'{} x {} = {}'.format(3, 7, 3*7)
'3 x 7 = 21'
'My name is {}'.format('조희진')
'My name is 조희진'
'{1} x {0} = {2}'.format(2,3,8)
# 주소 찾아서 넣을 수도 있음. 3이 {1}로, 2가 {0}으로, 8이 {2}로
'3 x 2 = 8'
# 옛날 방식
'%d x %d = %d' % (3, 7, 3)
'3 x 7 = 21'
'My name is %s' % '조희진'
'My name is 조희진'
Indexing : 각 문자열의 위치
❓ 왜 1이 아니라 0부터 시작하는가? 옛날엔 컴퓨터 성능이 안 좋아서 한 칸이라도 아끼기 위해 1이 아니라 0부터 시작했다고 함. 이 습관이 굳어져서 0부터 시작.
공백도 인덱스 매겨짐
인덱스를 거꾸로 매길수도 있음 (맨 마지막 글자의 주소가 -1임)
Slicing : 문자 썰어서 가져오기
사용법 : 변수[시작위치:종료위치] → 떼 오는 방법은 위 그림을 잘 이해할 것
문자열을 일부분 썰어 오다
Split : string.split() → 문자열을 공백단위로 잘라주어 리스트로 만들어줌
my_name = "김왼손의 왼손코딩"
my_name.split()
['김왼손의', '왼손코딩']
fruit_str = '거봉 수박 딸기 복숭아 포도 망고 배 참외 용과 키위'
fruit_str.split()
['거봉', '수박', '딸기', '복숭아', '포도', '망고', '배', '참외', '용과', '키위']
# 리스트 형으로 담김
# 어떤 문자를 기준으로 잘라라
Docstring : 따옴표 세개 사용해서 쓰는 것, 이 자체도 주석이 될 수 있음
Escape Code
특정한 기능을 하는 문자의 조합
Boolean
True / False (예약어)
List (Mutable)
my_List = [값1, 값2, 값3, ...]
사용자 입장에서 C나 자바에서의 배열(Array)의 기능 뿐 아니라 연결 리스트의 기능 지원
C++의 STL vector와 기능적으로 유사
리스트 대신에 배열 혹은 테이블이라고 부름
리스트 : ([])에 원소 넣거나 쉼표(,)로 구분. 인덱스는 0부터 시작 ⇒ a = [3,5,4,3,2]
→ 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱(Indexing)이라고 함.
인덱스는 양의 정수, 음의 정수 모두 사용 가능
a = [3, 5, 4, 3, 2]
# 0 1 2 3 4
# -5 -4 -3 -2 -1
리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때 슬라이싱(Slicing)을 이용
리스트 초기화 (리스트 컴프리 헨션)
대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화
# 0 ~ 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [ i for i in range(20) if i % 2 == 1 ]
# 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [i*i for i in range(1, 10)]
2차원 리스트를 초기화할 때 효과적으로 사용
N * M 크기의 2차원 리스트를 초기화 해야할 때 매우 유용
리스트 함수
| 함수명 | 사용법 | 설명 | 시간 복잡도 |
| --- | --- | --- | --- |
| append() | 변수명.append() | 리스트에 원소를 하나 삽입할 때 사용됨. → 리스트가 없는 상태에서 append를 쓰면 에러남. list가 꼭 있어야함. | O(1) |
| sort() | 변수명.sort() | 기본 정렬 기능으로 오름차순으로 정렬한다. | O(NlogN) |
| reverse() | 변수명.reverse() | 내림차순으로 정렬한다. | O(N) |
| insert() | insert(삽입할 위치 인덱스, 삽힙할 값) | 특정한 인덱스 위치에 원소를 삽입할 때 사용한다. | O(N) |
| count() | 변수명.count(특정 값) | 리스트에서 특정한 값을 가지는 데이터의 개수를 셀 때 사용한다. | O(N) |
| remove() | 변수명.remove(특정 값) | 특정한 값을 갖는 원소를 제거하는데, 값을 가진 원소가 여러 개면 하나만 제거한다. | O(N) |
→ sort() : 메소드 (사용하는 것만으로도 객체의 값 자체를 바꿔줌)
a = [1,5,2,4,3]
a.sort() ⇒ print(a) → [1,2,3,4,5]
→ sorted() : 내장함수 (값 자체를 안 바꿔줌)
b = [1,5,2,4,3]
sorted(b) ⇒ print(b) → [1,5,2,4,3]
→ remove_All 함수는 없음.
Tuple (Immutable)
튜플 : 튜플은 한 번 선언된 값을 변경할 수 없음.
리스트는 대괄호[]를 이용하지만, 튜플은 소괄호()를 이용.
튜플은 리스트에 비해 상대적으로 공간 효율적.
my_Tuple = ('이곰돌', '이주원', '김광희', '이흥복')
my_Tuple
('이곰돌', '이주원', '김광희', '이흥복')
my_Tuple[0] = '이체니'
# List에선 원소 값을 변경할 수 있지만 Tuple에선 불가능
Traceback (most recent call last):
File "<pyshell#100>", line 1, in <module>
my_Tuple[0] = '이체니'
TypeError: 'tuple' object does not support item assignment
Packing : 값을 모아다가 변수에 할당하는 행위
my_tuple = 1, 2, 3
Unpacking : 튜플에 들어있는 원소를 변수에 나눠 할당하는 행위
```
num1, num2, num3 = my_tuple
num1
1
num2
2
num3
3
#### num1을 2로 num1을 1로 바꾸고 싶을 때
num1, num2 = num2, num1
```
Dictionary
사전 : 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형
# 사전 자료형 초기화 방법
data = {'사과' : 'Apple', '바나나' : 'Banana', '코코넛' : 'Coconut'}
data['사과']
-> 'Apple'
# 또 다른 초기화 방법
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
# 키(Key) 값(Value)
# 사과 Apple
my_dict
{0: 'juwon', 1: 'komdol', 2: 'kkh', 3: 'lhb', 'etc': 'stranger'}
del my_dict['etc']
my_dict
{0: 'juwon', 1: 'komdol', 2: 'kkh', 3: 'lhb'}