세번째(?) 보는 파이썬 도서. 그 전에 본 초급 인문서 덕분인지 많은 것이 정리/이해 되었다.
물론 저자님의 명강의가 있었기 때문이기도 하고~ 다시 예전 학생때로 돌아간 느낌도 ... 잊지 말자고 기록해두기 ...
Python 혼공노트 1.
- 혼자 공부하는 파이썬(개정판) 청강하며... (그외 파이썬 강의도 여럿…)
https://www.youtube.com/playlist?list=PLBXuLgInP-5n2fvfXHU9mHVuWBgAKpHNi
Program
- 미리 작성/만들어둔 Computer에서 실행되는 명령어의 모음/집합
- 명령어는 순차/반복/선택 으로 수행됨
번역 프로그램: 프로그래밍 언어로 작성한 명령문을 컴퓨터가 이해할 수 있는 기계어로 번역해주는 프로그램
e.g.) 컴파일러, 인터프리터
Note. 프로그래밍 관련 지식인 서비스
Note. 파이썬 및 일부 프로그래밍 언어의 코드 흐름 검토
RURPLE: Python 기반의 교육용 프로그램
https://rur-ple.sourceforge.net/
https://sourceforge.net/projects/rur-ple/files/latest/download/
http://aispiration.com/rur-ple/RUR-PLE_Korean_ver_1_1.pdf
Python: 여러 개발 언어 중 하나
통합개발환경(IDE, Integrated Development Environment):
Python 개발 시 작성 및 실행을 위한 툴로서 아래 기능 제공
- Syntax Highlighting
- Autocomplete
- Building Executables
- Debugging
대표적인(많이 사용하는) 통합개발환경:
1. 기본 내장 IDE인 IDLE (Integrated Development and Learning Environment)
2. 파이참 PyCharm (https://www.jetbrains.com/pycharm/)
3. Visual Studio Code (https://code.visualstudio.com/)
두 가지 구동/수행 방식:
REPL(Read–Eval–Print Loop) 방식: 명령을 실행하여 결과를 얻는 방식
스크립트 실행 방식: ".py" 파일로 저장 후, 실행하여 결과를 얻는 방식
문장(statement): 실행할 수 있는 코드의 최소단위
표현식(expression): 어떤 값을 만들어내는 코드
리터럴(literal): 소스 코드의 고정된 값을 대표하는 용어 / 데이터(값) 그 자체
상수(constant): 변하지 않는 변수
연산자(operator): 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입 연산 등을 수행
키워드(keyword): 특별한 의미가 부여되어 파이썬이 사용하겠다고 예약되어있는 문자열로서 다른 용도로 사용이 불가능한 문자열
식별자(identifier): 어떤 대상을 유일하게 식별 및 구별할 수 있는 이름 / 다른 것들과 구분하기 위해서 사용되는 변수의 이름, 상수의 이름, 함수의 이름, 사용자 정의 타입의 이름 등 '이름'을 일반화 해서 지칭하는 용어
식별자규칙
- 키워드 사용 불가
- 특수문자는 '_' 만 가능
- 숫자로 시작 불가
- 공백문자 ' '를 포함 불가
- 가능한 알파벳 사용
- 의미있는 단어 사용
- 스네이크 및 카멜 표기법(쌍봉/파스칼표기법) 사용
Note. 함수, 변수, 속성은 스네이크 표기법 권장, 클래스 및 예외는 파스칼 표기법을 권장
표기법 ---------------------------------------
카멜 표기법(Camel Case)
여러 단어를 연달아 사용할 때 각 단어의 첫 글자를 대문자로 적되, 맨 앞에 오는 글자는 소문자로 표기하는 것.
낙타의 등에 있는 혹과 같다고 하여 카멜(Camel) 표기법이라고 함
예) camelVariable, firstName, lastName ...
파스칼 표기법(Pascal Case)
단어의 모든 앞글자를 대문자로 표기. 카멜 표기법이 단봉낙타라면 파스칼은 쌍봉낙타라고 할 수 있음
예) PascalVariable, FirstName, LastName ...
헝가리안 표기법(Hungarian Notation)
접두어에 자료형을 붙이는 표기법
예) strName, intCount ...
Note. 요즈음은 잘 사용하지 않는 스타일.
스네이크 표기법(Snake Case)
단어 사이에 언더바('_')를 넣어서 표기하는 방법.(공백을 '_'로 대체)
"_" 이나 "__"로 시작되는 식별자들은 많은 언어에서 확장으로 예약되어 있는 경우가 많아 사용하지 않음.
케밥 표기법(Kebab case)(공백을 '-'로 대체)
단어 사용 시 하이픈('-')을 넣어서 표기하는 방법
-----------------------------------------------
주석:
행단위 : '#' 와 함께 기술
블럭단위 : ''' 문단(블럭) 기술 '''
들여쓰기: 가독성을 위해. 여러 방법이 있으나, " " 공백문자 4개 권장
행결합 : 여러 행을 한 행에 기술할 때, 문장 마지막에 ';' 삽입
행분리 : 하나의 행을 가독성을 위해 여러 행으로 분리 기술할 때, 줄바꿈 위치에 '\' 삽입 또는 전체 문장을 '()'로 묶음
자료: 어떤 의미나 목적이 없이 단순 수집된 사실 또는 값
정보: 어떤 목적이나 의도를 가지고 데이터를 가공(처리하고 분석하여) 의미를 부여한 것
자료형(Data Type) --------------
기본자료형: 작고 간단한 것 / 스택: 특정공간에 자료를 직접 넣어 두는 것
- 문자열(str)
- 수
-- 정수 (int, 소수점이 없는 수)
-- 실수(부동소수점, float, 소수점이 있는 수)
- 불(True/False)
복합자료형: 크고 무거운 것 / 힙: 다른 위치에 자료를 넣어 보관하고, 그 위치(주소)를 기억하는 것
- tuple: (데이터) / # 정의시 할당된 자료를 변경 불가 / 변경되지 않는 자료에 대한 활용시 유용함
- list : [데이터] / # 정의시 할당된 자료를 변경 가능
- dict : { 키: 값 }
- complex: 복소수 (존재하는 수 실수와 가상의 수 허수의 조합)
- object : 프로그램에서 저장되는 모든 데이터
- function: 함수
-----------------------------------
이뮤터블: 변수에 넣었을 때 스택에 있는 값을 변경해야만 값을 변경할 수 있는 것
숫자, 불, 문자열, 튜플
뮤터블: 변수에 넣었을 때 스택에 있는 값을 변경하지 않아도 값을 변경할 수 있는 것
리스트, 딕셔너리
Note. 이뮤터블 자료는 딕셔너리의 키로 사용이 가능함
문자열변환: " " 또는 ' ' 안에 표기
Note. 문자열 내 따옴표를 사용할 때, 서로 다른 표시 이용 필요
e.g.)
print(""문자열 표시"") # 오류
print("'문자열 표시'") # 정상
print('"문자열 표시"') # 정상
Note. 이스케이프 문자 사용 ('\', 역슬래시)
print("\"문자열 표시\"") # 정상
줄바꿈: \n
print("문자열 \n 줄바꿈")
print("""문자열
줄바꿈""")
print("문자열\
줄바꿈\
무시")
Note. 문자열\ # 문자열 뒤에 '\'가 포함되면 줄바꿈 무시 / 코드 작성이 용이하도록 하는 효과
탭간격 띄움: \t
'\' 문자 출력: \\
문자열연산자
연결: +
문자열+문자열
반복: *
문자열 * 수
수 * 문자열
선택 [index], index는 0부터 증가 또는 '-'와 함께 역순 가능 / index: 위치/순서를 나타내는 숫자
문자열[수] : '수' 번째 글자 추출 / 인덱싱
문자열[수:수] : 첫'수' 부터 두번째 '수'-1 까지 추출 / [:3], [3:], [:] 는 ':' 앞 또는 뒤의 지정되지 않은 수 전부 추출 / 슬라이싱
문자열[수:수:수] : 첫'수' 부터 두번째 '수'-1 까지, 세번째 '수' 간격(step)으로 추출 / 슬라이싱
Note. 문자열[::-1] # 문자열을 역순으로 나열
Note. 슬라이싱에서는 IndexError를 표시하지 않음.
len(문자열): 문자열의 length(문자수)를 확인가능함에 이를 활용
연산자(Operators)
파괴적연산자: '=', 연산 후 원래 값(피연산자)을 다른 값으로 변경
비파괴적연산자: 연산 후 원래 값(피연산자)을 다른 값으로 변경하지 않음
산술(Arithmetic):
+: 더하기
-: 빼기
*: 곱하기
/: 나누기
%: 나머지
//: 몫(정수나누기)
**: 제곱
Note. 연산자는 *, / 가 +, - 보다 우선함. 연산 우선을 위해 '()'를 이용할 수 있음
Note. 연산이 복잡할 경우, ()를 통해 우선 순위를 명시하는 것을 권장
Note. n제곱근: 제곱근을 연산하고 싶은 값을 입력하고 ** (제곱을 수행한 후) (1/n)의 값을 곱
e.g.) print("2의 루트 : ", 2**(1/2))
print("2의 세제곱근: ", 2**(1/3))
비교/관계(Relational): 기준은 좌측
==: 같음
!=: 같지 않음
>: 큼
<: 작음
>=: 크거나 같음
<=: 작거나 같음
대입/할당(Assignment):
a = b : a 에 b를 할당
복합대입: "변수" "연산자"= "값" : 변수에 값을 연산하여 다시 변수에 저장/할당
a += b : a = a + b
a -= b : a = a - b
a *= b : a = a * b
a /= b : a = a / b
a %= b : a = a % b
a //= b : a = a // b
a **= b : a = a ** b
a &= b : a = a & b
a |= b : a = a | b
a ^= b : a = a ^ b
a <<= b : a = a << b
a >>= b : a = a >>b
논리(Logical):
이항:
and: 논리곱
True and True # True
True and False # False
False and True # False
False and False # False
or: 논리합
True or True # True
True or False # True
False or True # True
False or False # False
단항:
not: 논리부정
True # True
False # False
not True # False
not False # True
비트(Bitwise) : 비교하고자 하는 자료를 bit로 변환 후, bit 값을 연산(비교 또는 이동/변경)
&, I, ^, ~ <<, >>
멤버십(Membership): 앞의 문자열이 뒤의 문자열에 포함되는지 여부
in, not in
Identity 연산자
is : 포함여부
is not: 비포함 여부
삼항(Ternary):
"참조건의 값" if 조건 else "거짓조건의 값"
변수 : 값에 붙이는 이름/식별자
생성: 식별자 = 값
사용: 식별자를 이용하여 연산
정의(define): 변수를 만드는 것
할당(assign): 변수에 값을 넣는 것
접근/참조(reference): 변수에 할당된 값을 이용하는 것
input함수: 사용자에게 입력을 받기 위해 대기 < 입력된 내용(리턴값, string 속성)으로 치환/변환됨
input("prompt: ")
input(">>> ")
타입변환:
int() : 정수로 변환
float() : 실수로 변환
str() : 문자열로 변환
bool(): bool로 변환 (** Note. None, '0', 빈 컨테이너는 False가 됨)
type(): 자료형의 타입 확인
특정 형태의 문자열 작성:
a + "년" + b + "월" + c + "일
"{}".format() : format 함수의 내용을 문자열로 변환
"{} {}".format(a, b)
"{}년 {}월 {}일".format(a, b, c)
f문자열: f뒤의 문자열에 변수를 바로 사용할 수 있는 형태
f"{a} 년 {b} 월 {c}일"
"문자열".split(): split 함수의 내용문자를 기준으로 추출하여 리스트로 표시 (default: 기준문자 생략시, 공백/줄바꿈/탭 기준으로 분리)
피타고라스의 정리 (밑변: a / 높이: b / 빗변: c : c ** 2 = a ** 2 + b ** 2 )
a = ( c ** 2 - b ** 2 ) ** 0.5
b = ( c ** 2 - a ** 2 ) ** 0.5
c = ( a ** 2 + b ** 2 ) ** 0.5
문자열.upper(): 대문자로 변경
문자열.lower(): 소문자로 변경
문자열.strip(): 문자열 앞과 뒤의 공백(공백/줄바꿈/탭) 제거
문자열.lstrip() : left
문자열.rstrip() : right
문자열.isalpha(): 문자열이 alphabet 인지 확인
find() : 좌측부터 문자 검색
rfind() : 우측부터 문자 검색
값(수)의 정렬 후, 양수/음수 여부에 대한 부호 출력
정수(int:d)
"{:d}". format(값) : 값을 출력하는 위치 조정 (자리수 왼쪽 정렬)
"{:nd}". format(값) : n칸 뒤에 출력 (n자리수로 출력)
"{0:5d}". format(값) : 5칸 뒤에 출력하고 앞에 '0'을 채움
"{:+5d}". format(값) : 5칸 뒤에 출력하고 부호 출력
"{:=5d}". format(값) : 5칸 뒤에 출력하고 부호가 있는 경우, 처음에 출력
"{:=+5d}". format(값) : 5칸 뒤에 출력하고 처음에 부호 출력
실수(float:f)
"{:f}". format(값) : 값을 출력하는 위치 조정 (자리수 왼쪽 정렬)
"{:nf}". format(값) : n=수, 소수점 아래 n 자리까지 출력
# 날짜/시간:
---------------------------------------------------
from pytz import timezone
from datetime import datetime
seoul = timezone("Asia/Seoul")
now = datetime.now(seoul)
now.year
now.month
now.day
now.hour
now.minute
now.second
print("{}년 {}월 {}일 {}시 {}분 {}초".format(
now.year,
now.month,
now.day,
now.hour,
now.minute,
now.second
))
---------------------------------------------------