From a6be4b4c3018876dcbee9283f766daa306466789 Mon Sep 17 00:00:00 2001 From: Elex Date: Thu, 9 Jan 2025 14:30:26 +0900 Subject: [PATCH] 2025-01-09T14:30:26 --- .gitignore | 2 + app.sh | 26 ++ doc/00_intro.md | 1 + doc/01_install.md | 55 ++++ doc/02_helloworld.md | 25 ++ doc/03_data_types.md | 191 +++++++++++ doc/04_sequence_types.md | 518 ++++++++++++++++++++++++++++++ doc/05_std_io.md | 40 +++ doc/06_flow_controls.md | 75 +++++ src/helloworld.py | 8 + datatypes.py => src0/datatypes.py | 0 file_io.py => src0/file_io.py | 0 filewalk.py => src0/filewalk.py | 0 flow.py => src0/flow.py | 0 hello.py => src0/hello.py | 0 regex.py => src0/regex.py | 0 switch.py => src0/switch.py | 0 sys_call.py => src0/sys_call.py | 0 18 files changed, 941 insertions(+) create mode 100644 .gitignore create mode 100755 app.sh create mode 100644 doc/00_intro.md create mode 100644 doc/01_install.md create mode 100644 doc/02_helloworld.md create mode 100644 doc/03_data_types.md create mode 100644 doc/04_sequence_types.md create mode 100644 doc/05_std_io.md create mode 100644 doc/06_flow_controls.md create mode 100755 src/helloworld.py rename datatypes.py => src0/datatypes.py (100%) rename file_io.py => src0/file_io.py (100%) rename filewalk.py => src0/filewalk.py (100%) rename flow.py => src0/flow.py (100%) rename hello.py => src0/hello.py (100%) rename regex.py => src0/regex.py (100%) rename switch.py => src0/switch.py (100%) rename sys_call.py => src0/sys_call.py (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4329ec8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/.venv +/.vscode \ No newline at end of file diff --git a/app.sh b/app.sh new file mode 100755 index 0000000..78153d9 --- /dev/null +++ b/app.sh @@ -0,0 +1,26 @@ +#! /usr/bin/env bash + +case $1 in + activate) + echo "Activating the virtual environment" + . ./venv/bin/activate + ;; + deactivate) + echo "Deactivating the virtual environment" + deactivate + ;; + gitup) + echo "Pushing to git" + git add -A + git commit -m $(date "+%Y-%m-%dT%H:%M:%S") + git push origin + ;; + helloworld) + echo "Running the helloworld script" + python src/helloworld.py + ;; + *) + echo "Usage: $0 {activate|deactivate|helloworld}" + exit 1 + ;; +esac \ No newline at end of file diff --git a/doc/00_intro.md b/doc/00_intro.md new file mode 100644 index 0000000..c4b2a79 --- /dev/null +++ b/doc/00_intro.md @@ -0,0 +1 @@ +https://www.tutorialspoint.com/python/python_hello_world.htm diff --git a/doc/01_install.md b/doc/01_install.md new file mode 100644 index 0000000..7b6e362 --- /dev/null +++ b/doc/01_install.md @@ -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 # 가상 환경을 종료합니다. +``` + diff --git a/doc/02_helloworld.md b/doc/02_helloworld.md new file mode 100644 index 0000000..7bb440b --- /dev/null +++ b/doc/02_helloworld.md @@ -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() + +``` \ No newline at end of file diff --git a/doc/03_data_types.md b/doc/03_data_types.md new file mode 100644 index 0000000..5e21059 --- /dev/null +++ b/doc/03_data_types.md @@ -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 세트는 값을 수정할 수 없습니다. + ``` \ No newline at end of file diff --git a/doc/04_sequence_types.md b/doc/04_sequence_types.md new file mode 100644 index 0000000..386f259 --- /dev/null +++ b/doc/04_sequence_types.md @@ -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가 반환됩니다. +``` \ No newline at end of file diff --git a/doc/05_std_io.md b/doc/05_std_io.md new file mode 100644 index 0000000..40f094e --- /dev/null +++ b/doc/05_std_io.md @@ -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'입니다. +``` \ No newline at end of file diff --git a/doc/06_flow_controls.md b/doc/06_flow_controls.md new file mode 100644 index 0000000..1677749 --- /dev/null +++ b/doc/06_flow_controls.md @@ -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 # 아무 것도 실행되지 않습니다. +``` \ No newline at end of file diff --git a/src/helloworld.py b/src/helloworld.py new file mode 100755 index 0000000..f13016a --- /dev/null +++ b/src/helloworld.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python3 + +def hello(): + print("Hello, World!") + +if __name__ == "__main__": + hello() + diff --git a/datatypes.py b/src0/datatypes.py similarity index 100% rename from datatypes.py rename to src0/datatypes.py diff --git a/file_io.py b/src0/file_io.py similarity index 100% rename from file_io.py rename to src0/file_io.py diff --git a/filewalk.py b/src0/filewalk.py similarity index 100% rename from filewalk.py rename to src0/filewalk.py diff --git a/flow.py b/src0/flow.py similarity index 100% rename from flow.py rename to src0/flow.py diff --git a/hello.py b/src0/hello.py similarity index 100% rename from hello.py rename to src0/hello.py diff --git a/regex.py b/src0/regex.py similarity index 100% rename from regex.py rename to src0/regex.py diff --git a/switch.py b/src0/switch.py similarity index 100% rename from switch.py rename to src0/switch.py diff --git a/sys_call.py b/src0/sys_call.py similarity index 100% rename from sys_call.py rename to src0/sys_call.py