프로그램
: 명령어들의 집합
프로그램의 핵심
: 새 연산을 정의하고 조합해 유용한 작업을 수행하는 것
-> "문제를 해결"하는 매우 강렬한 방법
프로그래밍 언어
: 컴퓨터에게 작업을 지시하고 문제를 해결하는 도구
파이썬 프로그램 실행 방법
: 인터프리터가 사용자의 명령어를 운영체제가 이해하는 언어로 바꿈 (훨씬 더 사용하기 쉽고 운영체제간 이식도 가능)
1. shell이라는 프로그램으로 한 번에 한 명령어씩 입력해서 실행
2. 확장자가 .py인 파일에 작성된 파이썬 프로그램을 실행
표현식 (Expression)
: 값, 변수, 연산자 등을 조합하여 계산되고 결과를 내는 코드 구조
ex)
'hello'
greeting = 'hi'
5 * 21 - 4
평가 (Evaluate)
: 표현식이나 문장을 실행하여 그 결과를 계산하고 값을 결정하는 과정
-> 표현식이나 문장을 순차적으로 평가하여 프로그램의 동작을 결정
문장 (Statement)
: 실행 가능한 동작을 기술하는 코드 (조건문, 반복문, 함수 정의 등)
*표현식보다 더 큰 개념. 문장은 보통 여러 개의 표현식을 포함
타입 (Type)
: 값이 어떤 종류의 데이터인지, 어떻게 해석되고 처리되어야 하는지를 정의
*타입은 2가지 요소로 이루어짐. "값(피연산자)"과 "값에 적용할 수 있는 연산(연산자)"
데이터 타입
- Numeric Type: int(정수), float(실수), complex(복소수)
- Sequence Types: list, tuple, range
- Text Sequence Type: str(문자열)
- Set Types: set
- Mapping Types: dict
- 기타: None, Boolean, Functions
산술 연산자

연산자 우선순위

변수 (Variable)
: 값을 참조하는 이름
ex) degrees = 36.5 <- 할당문 / "변수 degrees에 값 36.5를 할당했다"
변수명 규칙
- 영문 알파벳, 언더스코어(_), 숫자로 구성
- 숫자로 시작할 수 없음
- 대소문자 구분
- 파이썬 내부 예약어로 사용 불가 (False, None, True, and, as, assert, elif, else, break, return, while, not, del, def 등)
변수, 값, 그리고 메모리
- 메모리의 모든 위치에는 그 위치를 고유하게 식별하는 메모리 주소가 존재
- 변수는 그 변수가 참조하는 객체의 메모리 주소를 가짐
- 변수 degrees는 값 36.5를 참조

- 객체(Object) : 타입을 갖는 메모리 주소 내 값, 값이 들어있는 상자
할당문
ex) variable = expression
1. 할당 연산자(=) 오른쪽에 있는 표현식을 평가해서 값(메모리 주소)을 생성
2. 값의 메모리 주소를 '=' 왼쪽에 있는 변수에 저장
- 존재하지 않는 변수라면, 새 변수를 생성
- 기존에 존재했던 변수라면, 기존 변수를 재사용해서 변수에 들어있는 메모리 주소를 변경
Style Guide
: 코드의 일관성과 가독성을 향상시키기 위한 규칙과 권장 사항들의 모음
- 변수명은 무엇을 위한 변수인지 직관적인 이름을 가져야 함
- 공백 4칸을 사용하여 코드 블록을 들여쓰기
- 한 줄의 길이는 79자로 제한하며, 길어질 경우 줄 바꿈을 사용
- 문자나 밑줄을 사용하여 함수, 변수, 속성의 이름을 작성
- 함수 정의나 클래스 정의 등의 블록 사이에는 빈 줄을 추가
Data Types
: 값의 종류와 그 값에 적용 가능한 연산과 동작을 결정하는 속성
Numberic Types (숫자형 타입)
1. int (정수 자료형)
- 진수 표현
2진수(binary): 0b ex) print(0b10) #2
8진수(octal): 0o ex) print(0o30) #24
16진수(hexadecimal): 0x ex) print(0x10) #16
2. float (실수 자료형)
*프로그래밍 언어에서 float는 실수에 대한 근삿값
ex) 컴퓨터는 0.1을 정확히 표현할 수 없음 => 유한 정밀도 때문
< 실수 연산 시 주의사항 >
- 컴퓨터는 2진수를 사용, 사람은 10진법을 사용
- 이때 10진수 0.1은 2진수로 표현하면 0.00011001100110011.. 같이 무한대로 반복
- 무한대 숫자를 그대로 저장할 수 없어서 사람이 사용하는 10진법의 근삿값만 표시
- 0.1의 경우 3602879701896397 / 2 ** 55이며 0.1에 가깝지만 정확히 동일하지는 않음
- 이런 과정에서 예상치 못한 결과가 나타남
- 이런 증상을 Floating point rounding error(부동소수점 에러)라고 함
< 실수 연산 시 해결책 >
- 임의의 작은 수 활용 : print(abs(a - b) <= 1e-10) #True
- math 모듈 활용
import math
print(math.isclose(a, b)) #True
Sequence Types
: 여러 개의 값들을 순서대로 나열하여 저장하는 자료형 (str, list, tuple, range)
< Sequence Type의 특징 >
- 순서 (Sequence): 값들이 순서대로 저장 (정렬돼 있다는 의미는 아님)
- 인덱싱 (Indexing): 각 값에 고유한 인덱스(번호)를 가지고 있으며, 인덱스를 사용하여 특정 위치의 값을 선택하거나 수정할 수 있음
- 슬라이싱 (Slicing): 인덱스 범위를 조절해 부분적인 값을 추출할 수 있음
- 길이 (Length): len() 함수를 사용하여 저장된 값의 개수(길이)를 구할 수 있음
- 반복 (Iteration): 반복문을 사용하여 저장된 값들을 반복적으로 처리할 수 있음
- str (문자열)
: 문자들의 순서가 있는 변경 불가능한 시퀀스 자료형
< 문자열 표현 >
- 문자열은 단일 문자나 여러 문자의 조합으로 이루어짐
- 작은따옴표(') 또는 큰따옴표(")로 감싸서 표현
< 중첩 따옴표 > : 따옴표 안에 따옴표를 표현할 경우
- 작은 따옴표가 들어있는 경우는 큰 따옴표로 문자열 생성
ex) print("문자열 안에 '작은 따옴표'를 사용하려면 큰 따옴표로 묶는다.")
- 큰 따옴표가 들어있는 경우는 작은 따옴표로 문자열 생성
ex) print('문자열 안에 "큰 따옴표"를 사용하려면 작은 따옴표로 묶는다.')

String Interpolation
: 문자열 내에 변수나 표현식을 삽입하는 방법
< f-string >
: 문자열에 f 또는 F 접두어를 붙이고 표현식을 {expression}로 작성하여, 문자열에 파이썬 표현식의 값을 삽입할 수 있음

< 문자열 시퀀스의 특징 >

*문자열은 불변 (변경 불가)
ex) my_str = 'hello'
my_str[1] = 'z'
=> #TypeError: 'str' object does not support item assignment
인덱스 (index)
: 시퀀스 내의 값들에 대한 고유한 번호로, 각 값의 위치를 식별하는 데 사용되는 숫자
슬라이싱 (slicing)
: 시퀀스의 일부분을 선택하여 추출하는 작업
-> 시작 인덱스와 끝 인덱스를 지정하여 해당 범위의 값을 포함하는 새로운 시퀀스를 생성
