2025-01-09T14:30:26
This commit is contained in:
1
doc/00_intro.md
Normal file
1
doc/00_intro.md
Normal file
@@ -0,0 +1 @@
|
||||
https://www.tutorialspoint.com/python/python_hello_world.htm
|
||||
55
doc/01_install.md
Normal file
55
doc/01_install.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Python
|
||||
|
||||
```bash
|
||||
sudo apt install python2 # python2를 설치합니다.
|
||||
sudo apt install python3 # python3를 설치합니다.
|
||||
sudo apt install python-is-python2 # /usr/bin/python에 대한 링크를 Python 2.x로 지정합니다.
|
||||
sudo apt install python-is-python3 # /usr/bin/python에 대한 링크를 Python 3.x로 지정합니다.
|
||||
```
|
||||
|
||||
```bash
|
||||
python2 --version
|
||||
python3 --version
|
||||
```
|
||||
|
||||
## PIP
|
||||
Package Installer for Python
|
||||
|
||||
```bash
|
||||
sudo apt install python3-pip
|
||||
```
|
||||
|
||||
```bash
|
||||
pip install xxx
|
||||
pip search xxx
|
||||
pip list
|
||||
pip show xxx
|
||||
pip uninstall xxx
|
||||
|
||||
pip freeze > requirements.txt # 의존성 목록을 파일로 저장합니다.
|
||||
pip install -r requirements.txt # 의존성 목록을 설치합니다.
|
||||
```
|
||||
|
||||
## VENV
|
||||
가상 실행환경
|
||||
|
||||
```bash
|
||||
sudo apt install python3-venv
|
||||
```
|
||||
|
||||
프로젝트 디렉토리로 이동해서 가상 환경을 생성합니다. 일반적으로 `.venv` 디렉토리를 사용합니다.
|
||||
|
||||
```bash
|
||||
cd project-dir
|
||||
python -m venv .venv
|
||||
```
|
||||
|
||||
가상 환경을 시작합니다. 프롬프트 앞에 가상환경 이름이 표시됩니다.
|
||||
|
||||
```bash
|
||||
source .venv/bin/activate #또는
|
||||
. .venv/bin/activate
|
||||
|
||||
deactivate # 가상 환경을 종료합니다.
|
||||
```
|
||||
|
||||
25
doc/02_helloworld.md
Normal file
25
doc/02_helloworld.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Hello, World!
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
s = 'Hello, World!'
|
||||
print(s) # print()는 화면에 출력하는 함수입니다.
|
||||
```
|
||||
|
||||
- 스크립트 파일의 확장자는 *.py*를 사용하며, 파일 인코딩은 UTF-8을 사용하는 것이 원칙입니다.
|
||||
- C 계열의 프로그래밍 언어들과는 달리 줄 끝에 세미콜론(;)을 붙이지 않습니다. 다만, 여러 구문들을 한 줄에 붙여서 쓰려는 경우에는 세미콜론을 사용해서 구분해줍니다.
|
||||
- C 계열의 프로그래밍 언어들과는 달리 중괄호(`{`)는 사용하지 않으며, 대신 들여쓰기를 사용합니다. 같은 블록은 들여쓴 칸 수가 동일해야 하며, 공백문자와 탭을 섞어서 사용하면 안됩니다.
|
||||
- 주석은 `#`로 시작합니다.
|
||||
|
||||
## 메인 함수를 사용한 Hello, World!
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
|
||||
def hello():
|
||||
print("Hello, World!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
hello()
|
||||
|
||||
```
|
||||
191
doc/03_data_types.md
Normal file
191
doc/03_data_types.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# 자료형
|
||||
|
||||
## 변수
|
||||
|
||||
### 변수의 선언 및 할당
|
||||
|
||||
```python
|
||||
a = 100
|
||||
b = 'Hello'
|
||||
|
||||
c = None # 할당없이 선언만 하려면 None을 사용합니다. None은 다른 프로그래밍 언어의 null에 해당합니다.
|
||||
|
||||
x, y, z = 100, 200, 300 # x=100, y=200, z=300
|
||||
i = j = k = 10 # i=10, j=10, k=10
|
||||
```
|
||||
|
||||
### 객체의 자료형 확인
|
||||
|
||||
```python
|
||||
type(a) # type() 함수는 자료형을 반환합니다.
|
||||
```
|
||||
|
||||
### 형변환
|
||||
|
||||
```python
|
||||
int(3.3) # 3
|
||||
int('100') # 100
|
||||
float(3) # 3.0
|
||||
```
|
||||
|
||||
### 변수 삭제
|
||||
|
||||
```python
|
||||
x = 100
|
||||
del x
|
||||
```
|
||||
|
||||
### 스왑
|
||||
|
||||
```python
|
||||
x, y = 10, 20
|
||||
x, y = y, z
|
||||
```
|
||||
|
||||
## 자료형
|
||||
|
||||
### 숫자
|
||||
|
||||
- int
|
||||
|
||||
정수형
|
||||
|
||||
- float
|
||||
|
||||
부동소수형
|
||||
|
||||
- complex
|
||||
|
||||
복소수형. 허수부 뒤에 j를 붙입니다(`1.2+1.3j`).
|
||||
|
||||
|
||||
```python
|
||||
a = 100
|
||||
b = 3.14
|
||||
c = 0o34
|
||||
d = 0xff
|
||||
e = 1.28e-10
|
||||
```
|
||||
|
||||
#### 숫자의 연산
|
||||
|
||||
```python
|
||||
print(1 + 1) # 2
|
||||
print(1 - 2) # -1
|
||||
print(3 * 7) # 21
|
||||
print(4 / 2) # 2.0
|
||||
print(4 // 2) # 2
|
||||
print(4 % 3) # 1
|
||||
print(2 ** 4) # 16
|
||||
```
|
||||
|
||||
- Python3 에서는 다른 프로그래밍 언어와는 달리, 정수 끼리의 나눗셈 결과가 실수(float)로 반환됩니다. 나눗셈의 결과를 정수로 받으려면 버림 나눗셈 연산자(`//`)를 사용해야 합니다.
|
||||
|
||||
나눗셈의 몫과 나머지를 함께 구하려면 `divmod()` 함수를 사용하면 됩니다.
|
||||
|
||||
- `**`는 거듭제곱 연산자입니다.
|
||||
|
||||
|
||||
### 부울
|
||||
|
||||
- bool
|
||||
|
||||
`True` 또는 `False`값을 가질 수 있습니다. True와 False는 대문자로 시작합니다.
|
||||
|
||||
|
||||
#### 형변환
|
||||
|
||||
`0`과 `0.0` 이외의 모든 숫자는 `True`입니다. 또 빈 문자열 이외의 모든 문자열은 `True`입니다.
|
||||
|
||||
```python
|
||||
bool(0.0) # False
|
||||
bool('False') # True
|
||||
```
|
||||
|
||||
#### 비교 연산
|
||||
|
||||
```python
|
||||
1 == 1.0 # True
|
||||
1 is 1.0 # False
|
||||
1 is not 1.0 # True
|
||||
```
|
||||
|
||||
- 객체를 비교할 때에는 `is`와 `is not` 연산자를 사용합니다.
|
||||
|
||||
#### 논리 연산
|
||||
|
||||
- `and`, `or`, `not` 연산자를 사용합니다.
|
||||
|
||||
### 문자
|
||||
|
||||
- str
|
||||
|
||||
문자열은 홑따옴표 또는 쌍따옴표로 묶어서 표현합니다. 삼중 따옴표(홑따옴표 또는 쌍따옴표)로 여러 줄 문자열을 표현할 수 있습니다.
|
||||
|
||||
|
||||
```python
|
||||
a = 'Hello'
|
||||
b = "Hello"
|
||||
c = '''Hello,
|
||||
여러 줄 문자열.'''
|
||||
d = "It's me."
|
||||
```
|
||||
|
||||
### 집합
|
||||
|
||||
- list
|
||||
|
||||
리스트는 각 항목을 콤마로 구분하고, 대괄호(`[`, `]`)로 묶어서 표현합니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3]
|
||||
b = [10, 'Hello', True] # 여러 자료형을 혼용해도 됩니다.
|
||||
c = [] # 빈 리스트 자료형을 반듭니다. 또는,
|
||||
d = list() # list() 함수를 사용해서 빈 리스트 자료형을 만듭니다.
|
||||
e = list('Hello') # 문자열을 리스트로 변환하면 ['H', 'e', 'l', 'l', 'o']
|
||||
```
|
||||
|
||||
- tuple
|
||||
|
||||
튜플은 괄호(`(`, `)`)로 묶어서 표현합니다. 튜플은 리스트와 비슷하지만 항목을 추가, 변경, 삭제할 수 없습니다.
|
||||
|
||||
```python
|
||||
a = (1, 2, 3)
|
||||
# 또는, 괄호를 생략해도 됩니다.
|
||||
b = 1, 2, 3
|
||||
```
|
||||
|
||||
```python
|
||||
a = (10) # 10 => 튜플의 아이템이 하나인 경우, 튜플이 아니라 그냥 숫자값이 됩니다.
|
||||
# 아이템이 하나인 튜플을 만들려면 끝에 콤마를 붙여야 합니다.
|
||||
b = (10,) # (10,)
|
||||
c = 10, # 또는, 튜플은 괄호를 생략할 수 있으므로
|
||||
```
|
||||
|
||||
- dict
|
||||
|
||||
딕셔너리는 키/값 형식의 자료형입니다. 중괄호(`{`, `}`)를 사용해서 표현합니다.
|
||||
|
||||
```python
|
||||
a = {'name': 'Charlie', 'age': 14}
|
||||
b = dict(name='Steve', age=37) # dict()를 사용할 때에는 키를 따옴표로 묶지 않습니다.
|
||||
|
||||
c = {} # 빈 딕셔너리를 만듭니다. 또는,
|
||||
d = dict()
|
||||
|
||||
e = dict(zip(['name', 'age'], ['Jane', 24])) # zip()을 사용해서 키와 값을 묶을 수도 있습니다.
|
||||
f = dict([('name', 'Olaf'), ('age', 7)]) # 리스트 안에 튜플을 사용해서 생성할 수도 있습니다.
|
||||
g = dict({'name': 'Charlie', 'age': 14}) # dict() 안에 중괄호를 한 번 더 사용해도 됩니다.
|
||||
```
|
||||
|
||||
- set
|
||||
|
||||
세트의 아이템은 중복될 수 없으며, 순서도 없습니다. 중괄호(`{`, `}`)를 사용해서 표현합니다.
|
||||
|
||||
```python
|
||||
a = {'apple', 'orange', 'banana'}
|
||||
b = set('apple', 'orange', 'banana')
|
||||
|
||||
# 불변 세트를 만들려면 frozenset()를 사용합니다.
|
||||
c = frozenset('apple', 'orange', 'banana') # Immutable 세트는 값을 수정할 수 없습니다.
|
||||
```
|
||||
518
doc/04_sequence_types.md
Normal file
518
doc/04_sequence_types.md
Normal file
@@ -0,0 +1,518 @@
|
||||
# ㅁㅁㅁ
|
||||
|
||||
## 시퀀스 자료형
|
||||
|
||||
리스트, 튜플, 레인지, 그리고 문자열은 모두 어떤 값들의 연속체라는 공통점이 있습니다. 이들을 시퀀스 자료형이라고 부릅니다. 그 외에 `bytes`, `bytearray`라는 자료형도 있습니다.
|
||||
|
||||
### 레인지 객체 (range)
|
||||
|
||||
`range()`는 일련의 숫자를 만드는데 사용되며, Python3에서는 `range` 타입이 반환됩니다.
|
||||
|
||||
- range(끝값)
|
||||
|
||||
시작 값이 주어지지 않으면 0부터 시작하며, 끝값은 포함되지 않습니다.
|
||||
|
||||
- range(시작값, 끝값)
|
||||
|
||||
- range(시작값, 끝값, 증분)
|
||||
|
||||
|
||||
```python
|
||||
a = list(range(10)) # [0,1,2,3,4,5,6,7,8,9]
|
||||
b = list(range(5, 10)) # [5,6,7,8,9]
|
||||
c = list(range(1, 10, 2)) # [1,3,5,7,9]
|
||||
d = list(range(5, -5, -2)) # [5,3,1,-1,-3]
|
||||
```
|
||||
|
||||
### 특정 아이템을 포함하고 있는지 확인
|
||||
|
||||
```python
|
||||
a = [1, 3, 5, 7, 9]
|
||||
b = 2 in a # False
|
||||
c = 2 not in a # True
|
||||
```
|
||||
|
||||
### 연결
|
||||
|
||||
시퀀스 자료형은 `+` 연산자를 사용해서 이어 붙일 수 있습니다. 단, `range`는 안됩니다.
|
||||
|
||||
```python
|
||||
a = [1, 3, 5, 7, 9] + [2, 4, 6, 8, 10] # [1,3,5,7,9,2,4,6,8,10]
|
||||
```
|
||||
|
||||
```python
|
||||
a = 'Hello, ' str(100) # 문자열에 숫자를 연결할 때에는 숫자를 문자열로 변환해 주어야 합니다.
|
||||
```
|
||||
|
||||
### 반복
|
||||
|
||||
`*` 연산자는 반복에 사용됩니다. 단, `range`는 안됩니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3] * 3 # [1,2,3,1,2,3,1,2,3]
|
||||
```
|
||||
|
||||
### 갯수
|
||||
|
||||
```python
|
||||
a = len([1, 2, 3]) # 3
|
||||
```
|
||||
|
||||
```python
|
||||
hello = '안녕하시오!'
|
||||
a = len(hello) # 문자열의 길이는 6입니다. Python2에서는 문자열의 바이트 길이를 반환합니다.
|
||||
b = len(hello.encode('utf-8')) # 문자열의 바이트 길이는 16
|
||||
```
|
||||
|
||||
### 인덱스를 통한 접근
|
||||
|
||||
다른 프로그래밍 언어들과 마찬가지로 인덱스는 대괄호를 사용해서 표현하며, 인덱스는 0부터 시작합니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3]
|
||||
print(a[0]) # 1
|
||||
# 내부적으로는 객체의 __getitem__() 메서드를 호출합니다. 따라서,
|
||||
print(a.__getitem__(0))
|
||||
# 음수 인덱스를 사용하면 맨 마지막 항목부터 셉니다.
|
||||
print(a[-1]) # 3
|
||||
```
|
||||
|
||||
### 인덱스를 통한 항목 값의 변경
|
||||
|
||||
튜플, 문자열, 레인지의 경우에는 값을 변경할 수 없는 타입이므로 오류가 발생합니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3]
|
||||
a[1] = 4 # [1,4,3]
|
||||
a[5] = 5 # Error. 리스트의 범위를 벗어났으므로 오류입니다.
|
||||
```
|
||||
|
||||
### 항목의 삭제
|
||||
|
||||
`del`을 사용해서 항목을 삭제합니다. 튜플, 문자열, 레인지의 경우에는 값을 변경할 수 없는 타입이므로 오류가 발생합니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3]
|
||||
del a[1] # [1,3]
|
||||
```
|
||||
|
||||
### 부분 시퀀스
|
||||
|
||||
시작 인덱스와 끝 인덱스를 사용해서 어떤 시퀀스의 부분을 가져올 수 있습니다. 끝 인덱스는 포함되지 않습니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
b = a[0:2] # [1,2]
|
||||
c = a[0:5:2] # [1,3,5] => 시작과 끝 인덱스에 덧붙여 증분도 사용할 수 있습니다.
|
||||
d = a[:5] # 시작 인덱스를 생략하면 0번 인덱스부터 가져옵니다.
|
||||
e = a[2:] # 끝 인덱스가 생략되면 마지막 요소까지 가져옵니다.
|
||||
```
|
||||
|
||||
### 반전
|
||||
|
||||
```python
|
||||
reversed(range(5))
|
||||
```
|
||||
|
||||
### 슬라이스 객체 (slice)
|
||||
|
||||
`slice()`는 `range()`와 사용법이 같으며, `slice` 타입이 반환됩니다.
|
||||
|
||||
- slice(끝값)
|
||||
|
||||
시작 값이 주어지지 않으면 0부터 시작하며, 끝값은 포함되지 않습니다.
|
||||
|
||||
- slice(시작값, 끝값)
|
||||
|
||||
- slice(시작값, 끝값, 증분)
|
||||
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
s = slice(0, 2)
|
||||
a[s] # [1,2] 대괄호 안에 슬라이스 객체를 넣어서 사용합니다.
|
||||
```
|
||||
|
||||
### 슬라이스 객체를 이용한 할당
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
a[0:2] = ['a', 'b'] # ['a', 'b', 3, 4, 5]
|
||||
```
|
||||
|
||||
만약 슬라이스의 범위와 할당할 값의 길이가 서로 다르다면
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
a[0:2] = ['a'] # ['a', 3, 4, 5] => a[0]은 할당되고, a[1]은 사라집니다.
|
||||
|
||||
a = [1, 2, 3, 4, 5]
|
||||
a[0:2] = ['a', 'b', 'c'] # ['a', 'b', 'c', 3, 4, 5]
|
||||
```
|
||||
|
||||
## 리스트의 메서드
|
||||
|
||||
- append()
|
||||
|
||||
리스트의 맨 뒤에 아이템을 하나 추가합니다.
|
||||
|
||||
- extend()
|
||||
|
||||
리스트를 연결해서 확장합니다.
|
||||
|
||||
- insert()
|
||||
|
||||
특정 인덱스에 아이템을 추가합니다.
|
||||
|
||||
|
||||
```python
|
||||
a = [1, 2, 3]
|
||||
a.append(4) # [1,2,3,4]
|
||||
a.extend([5, 6]) # [1,2,3,4,5,6]
|
||||
a.insert(2, 'a') # [1,2,'a',3,4,5,6]
|
||||
```
|
||||
|
||||
- pop()
|
||||
|
||||
마지막 아이템 또는 특정 아이템을 반환하며 리스트에서 제거합니다.
|
||||
|
||||
- remove()
|
||||
|
||||
특정 값을 삭제합니다. `pop()`이 인덱스를 사용하는 반면 `remove()`는 리스트에서 특정 값을 제거합니다. 만일, 리스트에 같은 값이 여러 개인 경우에는 처음 찾은 값이 제거됩니다.
|
||||
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
b = a.pop() # b=5 a=[1,2,3,4]
|
||||
b= a.pop(2) # b=3 a=[1,2,4]
|
||||
a.remove(4) # a=[1,2]
|
||||
```
|
||||
|
||||
- index()
|
||||
|
||||
특정 값의 인덱스를 반환합니다.
|
||||
|
||||
- count()
|
||||
|
||||
특정 값의 갯수를 반환합니다.
|
||||
|
||||
- reverse()
|
||||
|
||||
아이템의 순서를 반대로 뒤집습니다.
|
||||
|
||||
- sort(reverse=False)
|
||||
|
||||
아이템을 정렬합니다.
|
||||
|
||||
- sorted()
|
||||
|
||||
`sort()`와 비슷하지만, 리스트를 수정하지 않고 새로운 리스트를 반환합니다.
|
||||
|
||||
- clear()
|
||||
|
||||
리스트의 모든 아이템을 삭제합니다.
|
||||
|
||||
- copy()
|
||||
|
||||
리스트를 복제합니다.
|
||||
|
||||
|
||||
## 리스트 컴프리핸션
|
||||
|
||||
리스트 구문 안에 반복문이나 조건문을 사용할 수 있습니다.
|
||||
|
||||
이 방식으로 튜플을 만들 때에는 `tuple()`을 사용해야 합니다. 괄호를 사용하면 튜플이 아니라 제너레이터가 만들어집니다.
|
||||
|
||||
```python
|
||||
a = [i for i in range(5)] # [0,1,2,3,4]
|
||||
b = [i * 2 for i in range(5)] # [0,2,4,6,8]
|
||||
|
||||
# 반복문 뒤에 조건문을 이어 붙일 수 있습니다.
|
||||
c = [i for i in range(5) if i % 2 == 0] # [0,2,4]
|
||||
|
||||
# 반복문을 여러 개 사용할 수도 있습니다. 이 때 처리 순서는 뒤에서부터 앞으로 처리됩니다.
|
||||
d = [i * J for j in range(2,10) for i in range(1,10)]
|
||||
```
|
||||
|
||||
## 맵
|
||||
|
||||
- map(함수, 리스트)
|
||||
|
||||
리스트 또는 튜플 등 반복 가능한 객체의 아이템을 지정된 함수로 처리한 다음 새로운 리스트 또는 튜플을 생성할 떄 사용됩니다.
|
||||
|
||||
|
||||
```python
|
||||
a = ['1', '2', '3']
|
||||
b = list(map(int, a))
|
||||
```
|
||||
|
||||
## 다차원 리스트
|
||||
|
||||
리스트 안에 리스트를 넣으면 다차원 리스트가 됩니다. 튜플도 마찬가지입니다.
|
||||
|
||||
```python
|
||||
a = [[1,2], [3,4], [5,6]]
|
||||
```
|
||||
|
||||
다차원 리스트를 복제하려면 `deepcopy()`를 사용해야 합니다.
|
||||
|
||||
```python
|
||||
import copy
|
||||
b = copy.deepcopy(a)
|
||||
```
|
||||
|
||||
## 문자열 메서드
|
||||
|
||||
- replace(바꿀문자열, 새문자열)
|
||||
|
||||
- translate()
|
||||
|
||||
문자열 내의 문자를 치환합니다.
|
||||
|
||||
```python
|
||||
table = str.maketrans('aeiou', 'AEIOU')
|
||||
a = 'i like an apple'.translate(table) # I lIkE An ApplE
|
||||
```
|
||||
|
||||
- split()
|
||||
|
||||
공백을 기준으로 문자열을 분리합니다. 구분 문자열을 지정할 수도 있습니다.
|
||||
|
||||
```python
|
||||
a = 'apple,orange,mango,banana'.split(',')
|
||||
```
|
||||
|
||||
- join(리스트)
|
||||
|
||||
리스트를 결합하여 문자열을 만듭니다.
|
||||
|
||||
```python
|
||||
'-'.join(['apple','orange','mango','banana'])
|
||||
```
|
||||
|
||||
- upper(), lower()
|
||||
|
||||
대소문자 변환
|
||||
|
||||
- strip(), lstrip(), rstrip()
|
||||
|
||||
문자열의 왼쪽, 오른쪽, 또는 양쪽의 공백을 제거합니다. 매개변수에 제거할 문자목록 지정할 수도 있습니다.
|
||||
|
||||
```python
|
||||
'...hello'.strip('.')
|
||||
```
|
||||
|
||||
- ljust(길이), rjust(길이), center(길이)
|
||||
|
||||
정렬
|
||||
|
||||
```python
|
||||
'apple'.ljust(10) # 'apple '
|
||||
```
|
||||
|
||||
- zfill(길이)
|
||||
|
||||
지정된 길이 맞춰서 0으로 채웁니다.
|
||||
|
||||
- find(찾을문자열), rfind()
|
||||
|
||||
주어진 문자열이 처음 나타나는 인덱스를 반환하며, 찾는 문자열이 없으면 -1을 반환합니다.
|
||||
|
||||
- index(), rindex()
|
||||
|
||||
`find()`와 마찬가지로 찾는 문자열의 인덱스를 반환하지만, 문자열을 찾지 목한 떄에는 오류가 발생됩니다.
|
||||
|
||||
- count(문자열)
|
||||
|
||||
주어진 문자열의 갯수를 셉니다.
|
||||
|
||||
|
||||
## 형식화 문자열
|
||||
|
||||
```python
|
||||
name = 'Charlie'
|
||||
a = 'Hello, %s.' % name
|
||||
|
||||
age = 14
|
||||
b = "I'm %d years old." % age
|
||||
|
||||
value = 3.3
|
||||
c = 'The price is %f dollars.' % value
|
||||
c = 'The price is %.2f dollars.' % value # 소수점 이하 자릿수를 지정
|
||||
|
||||
d = '%s is %d years old.' % (name, age) # 여러 개일 떄에는 괄호로 묶습니다.
|
||||
```
|
||||
|
||||
문자열의 `format()` 메서드를 사용하면 더 쉽습니다.
|
||||
|
||||
```python
|
||||
'Hello, {0}.'.format('Charlie')
|
||||
'{1} is {0} years old.'.format(14, 'Charlie')
|
||||
|
||||
'{} is {} years old.'.format('Charlie', 14) # 인덱스가 생략되면 순서대로 삽입됩니다.
|
||||
|
||||
'{name} is {age} years old.'.format(name='Charlie', age=14) # 숫자 인덱스 대신 이름을 지정할 수도 있습니다.
|
||||
|
||||
# Python 3.6이상에서는 변수명을 그대로 사용할 수 있으며, 문자열 앞에 포맷 지시자('f')를 붙여주면 됩니다.
|
||||
name = 'Charlie'
|
||||
age = 14
|
||||
s = f'{name} is {age} years old.'
|
||||
```
|
||||
|
||||
## 딕셔너리
|
||||
|
||||
딕셔너리의 키에 대괄호를 사용해서 아이템에 접근하거나 변경할 수 있습니다.
|
||||
|
||||
```python
|
||||
a = {'name': 'Charlie', 'age': 14}
|
||||
a['name'] # 'Charlie'
|
||||
|
||||
a.get('name') # get() 메서드를 사용할 수도 있습니다.
|
||||
```
|
||||
|
||||
`in` 연산자를 사용해서 딕셔너리에 해당 키가 존재하는지 확인할 수 있습니다.
|
||||
|
||||
```python
|
||||
a = {'name': 'Charlie', 'age': 14}
|
||||
b = 'name' in a # True
|
||||
```
|
||||
|
||||
키의 갯수를 알고 싶으면 `len()`을 사용합니다.
|
||||
|
||||
```python
|
||||
len({'name': 'Charlie', 'age': 14}) # 2
|
||||
```
|
||||
|
||||
키를 제거하려면 `del`을 사용합니다.
|
||||
|
||||
```python
|
||||
del a['name']
|
||||
```
|
||||
|
||||
딕셔너리를 복제하려면 `deepcopy()`를 사용해야 합니다.
|
||||
|
||||
```python
|
||||
import copy
|
||||
y = deepcopy(a)
|
||||
```
|
||||
|
||||
## 딕셔너리의 메서드
|
||||
|
||||
- setdefault(키, 값)
|
||||
|
||||
키에 대한 기본값을 지정합니다. `update()`와 달리 해당 키가 이미 정의되어 있다면 값이 변경되지 않습니다.
|
||||
|
||||
- update(키, 값)
|
||||
|
||||
키에 대한 값을 변경합니다. 키가 정의되어 있지 않다면 새로운 키가 등록됩니다.
|
||||
|
||||
- pop(키, 기본값)
|
||||
|
||||
키에 대한 값을 반환하며, 딕셔너리에서는 제거됩니다. 매개변수에 기본값을 주면 해당 키가 없을 때에 그 값을 반환합니다.
|
||||
|
||||
- popitem()
|
||||
|
||||
마지막 키/값 쌍을 튜플로 반환하고 삭제합니다. Python 3.5 이하에서는 임의의 키/값 쌍을 반환합니다.
|
||||
|
||||
- clear()
|
||||
|
||||
모든 키/값 쌍을 삭제합니다.
|
||||
|
||||
- get(키)
|
||||
|
||||
- items()
|
||||
|
||||
- keys()
|
||||
|
||||
- values()
|
||||
|
||||
|
||||
```python
|
||||
for key, value in {'a':100, 'b':200, 'c':300}.items():
|
||||
print(key, value)
|
||||
```
|
||||
|
||||
## 멀티 레벨 딕셔너리
|
||||
|
||||
딕셔너리 안에 딕셔너리를 넣으면 계층형 데이터 구조를 만들 수 있습니다.
|
||||
|
||||
```python
|
||||
a = {
|
||||
'charlie': {'name': 'Charlie', 'age': 14},
|
||||
'steve': {'name': 'Steve', 'age': 37},
|
||||
'jane': {'name': 'Jane', 'age': 22}
|
||||
}
|
||||
```
|
||||
|
||||
## 세트
|
||||
|
||||
리스트와 달리 순서가 없으므로 대괄호 안에 인덱스를 사용해서 요소에 접근할 수 없습니다.
|
||||
|
||||
세트 안에 중첩된 세트를 넣을 수도 없습니다.
|
||||
|
||||
세트 안에 어떤 값이 있는지 확인하려면 `in`을 사용합니다.
|
||||
|
||||
```python
|
||||
a = {'apple', 'orange', 'banana'}
|
||||
'orange' in a # True
|
||||
```
|
||||
|
||||
논리 연산자 또는 set의 메서드를 사용해서 집합 연산을 할 수 있습니다.
|
||||
|
||||
```python
|
||||
a = {1, 2, 3}
|
||||
b = {3, 4, 5, 6}
|
||||
|
||||
a | b # 합집합 {1,2,3,4,5,6}
|
||||
set.union(a, b)
|
||||
a & b # 교집합 {3}
|
||||
set.intersection(a, b)
|
||||
a - b # 차집합 {1,2}
|
||||
set.difference(a, b)
|
||||
a ^ b # 대칭 차집합
|
||||
set.symmetric_difference(a, b)
|
||||
```
|
||||
|
||||
- set,union()
|
||||
|
||||
- set,intersection()
|
||||
|
||||
- set,difference()
|
||||
|
||||
- set,symmetric_difference()
|
||||
|
||||
- update(세트)
|
||||
|
||||
`|=`
|
||||
|
||||
- intersection_update(세트)
|
||||
|
||||
`&=`
|
||||
|
||||
- difference_update(세트)
|
||||
|
||||
`-=`
|
||||
|
||||
- symmetric_update(세트)
|
||||
|
||||
`^=`
|
||||
|
||||
|
||||
비교 연산자를 사용해서 포함 관계를 확인할 수 있습니다.
|
||||
|
||||
```python
|
||||
{1,2,3} <= {1,2,3,4,5} # 다른 집합의 부분집합인지 여부
|
||||
{1,2,3}.issubset({1,2,3,4,5})
|
||||
|
||||
{1,2,3} < {1,2,3,4,5} # 다른 집합의 진부분집합인지 여부
|
||||
|
||||
{1,2,3} >= {1,2,3,4,5} # 다른 집합의 상위집합인지 여부
|
||||
{1,2,3}.issuperset({1,2,3,4,5})
|
||||
|
||||
{1,2,3} > {1,2,3,4,5} # 다른 집합의 진상위집합인지 여부
|
||||
|
||||
{1,2,3} == {1,2,3,4,5} # 서로 같은지 여부
|
||||
{1,2,3} != {1,2,3,4,5}
|
||||
|
||||
{1,2,3}.isdisjoint({1,2,3,4,5}) # 서로 겹치는 요소가 없으면 True가 반환됩니다.
|
||||
```
|
||||
40
doc/05_std_io.md
Normal file
40
doc/05_std_io.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 표준 입출력
|
||||
|
||||
## input()
|
||||
|
||||
표준 입력으로부터 한 줄을 입력 받습니다.
|
||||
|
||||
```python
|
||||
x = input() # 표준 입력으로부터 한 줄을 입력 받습니다.
|
||||
y = input('문자열을 입력하시오: ')
|
||||
|
||||
a, b = input().split() # 공백을 기준으로 분리합니다.
|
||||
a, b = input().split(',') # 콤마를 기준으로 분리합니다.
|
||||
```
|
||||
|
||||
입력받은 값을 숫자 형태로 바꾸려면, `int()` 또는 `float()`을 사용해야 합니다.
|
||||
|
||||
```python
|
||||
a = int(input('A? '))
|
||||
b = int(input('B? '))
|
||||
|
||||
print(a + a)
|
||||
```
|
||||
|
||||
또는, `map()`함수를 사용할 수도 있습니다.
|
||||
|
||||
```python
|
||||
a, b = map(int, input().split())
|
||||
```
|
||||
|
||||
## print()
|
||||
|
||||
표준 출력으로 한 줄을 출력합니다.
|
||||
|
||||
```python
|
||||
print('Hello')
|
||||
|
||||
print(1, 2, 3) # 나열된 값이 공백으로 구분되어 출력됩니다.
|
||||
print(1, 2, 3, sep=',') # sep으로 구분자를 지정할 수 있습니다. 기본값은 ' '입니다.
|
||||
print(1, 2, 3, end='') # end로 줄 끝 문자를 지정할 수 있습니다. 기본값은 '\n'입니다.
|
||||
```
|
||||
75
doc/06_flow_controls.md
Normal file
75
doc/06_flow_controls.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# 흐름 제어
|
||||
|
||||
## 조건문
|
||||
|
||||
`if`문의 조건식 뒤에 콜론(`:`)을 붙이고 `if` 블록은 들여쓰기를 합니다.
|
||||
|
||||
```python
|
||||
if 조건식:
|
||||
실행문
|
||||
```
|
||||
|
||||
```python
|
||||
if 조건식:
|
||||
실행문
|
||||
else:
|
||||
실행문
|
||||
```
|
||||
|
||||
```python
|
||||
if 조건식:
|
||||
실행문
|
||||
elif 조건식:
|
||||
실행문
|
||||
else:
|
||||
실행문
|
||||
```
|
||||
|
||||
## 반복문
|
||||
|
||||
```python
|
||||
for 변수 in range(횟수):
|
||||
실행문
|
||||
```
|
||||
|
||||
`range`외에 리스트, 튜플, 문자열 등의 시퀀스 타입을 사용해도 됩니다.
|
||||
|
||||
```python
|
||||
a = [1, 2, 3, 4, 5]
|
||||
for i in a:
|
||||
print(i)
|
||||
|
||||
for i in range(len(a)):
|
||||
print(a[i])
|
||||
|
||||
# 리스트의 인덱스도 필요한 때에는 enumerate()를 사용하면 됩니다.
|
||||
for idx, val in enumerate(a):
|
||||
print(idx, val)
|
||||
```
|
||||
|
||||
```python
|
||||
while 조건식:
|
||||
실행문
|
||||
```
|
||||
|
||||
```python
|
||||
i = 0
|
||||
while i <= len(a):
|
||||
print(a[i])
|
||||
i += 1
|
||||
```
|
||||
|
||||
## 그 외
|
||||
|
||||
### break
|
||||
|
||||
### continue
|
||||
|
||||
### pass
|
||||
|
||||
써 넣을 실행문이 없을 경우에 사용합니다. Python의 들여쓰기 문법 때문에 사용되는 키워드입니다.
|
||||
|
||||
```python
|
||||
for i in range(10):
|
||||
pass # 아무 것도 실행되지 않습니다.
|
||||
```
|
||||
Reference in New Issue
Block a user