본문 바로가기
Appz Knowledge/Python

Python 혼공노트 1 - 자료형

by 스쳐가는인연 2023. 1. 30.

세번째(?) 보는 파이썬 도서. 그 전에 본 초급 인문서 덕분인지 많은 것이 정리/이해 되었다.

물론 저자님의 명강의가 있었기 때문이기도 하고~ 다시 예전 학생때로 돌아간 느낌도 ... 잊지 말자고 기록해두기 ...

 

Python 혼공노트 1.

- 혼자 공부하는 파이썬(개정판) 청강하며... (그외 파이썬 강의도 여럿…)

https://www.youtube.com/playlist?list=PLBXuLgInP-5n2fvfXHU9mHVuWBgAKpHNi

 

Program

- 미리 작성/만들어둔 Computer에서 실행되는 명령어의 모음/집합

- 명령어는 순차/반복/선택 으로 수행됨

 

번역 프로그램: 프로그래밍 언어로 작성한 명령문을 컴퓨터가 이해할 수 있는 기계어로 번역해주는 프로그램

e.g.) 컴파일러, 인터프리터

 

Note. 프로그래밍 관련 지식인 서비스

https://stackoverflow.com/

 

Note. 파이썬 및 일부 프로그래밍 언어의 코드 흐름 검토

https://pythontutor.com/

 

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

))

---------------------------------------------------

 

 

 

 

 

 

반응형