파이썬 기초 문법 1
- 프로그래밍
- 파이썬
- style guide
- data types
- 프로그래밍
프로그램 : 명령어들의 집합
프로그램 예시
→ 친구에게 우리 집 오는 길을 적어줌 (프로그램 작성)
적어준 길대로 따라가는 것 (프로그램 실행)
프로그램은 몇 가지 기초 연산으로 구성됨 (xx에서 두 블록 직진 후 좌회전 등)
컴퓨터는 훨씬 더 다양한 연산 집합을 가진다.
- 프로그래밍의 핵심
새 연산을 정의하고 조합해 유용한 작업을 수행하는 것
→ 문제를 해결하는 매우 강력한 방법
개발자들은 결국 문제를 해결하는 사람들이다.
- 프로그래밍 언어
컴퓨터에게 작업을 지시하고 문제를 해결하는 도구
- 파이썬을 사용하는 이유
간결하고 읽기 쉬운 문법
다양한 응용 분야 (데이터 분석, 인공지능, 웹 개발, 자동화 등)
파이썬 커뮤니티의 지원 (세계적인 규모의 풍부한 온라인 포럼 및 커뮤니티 생태계)
- 파이썬 실행
컴퓨터는 기계어로 소통하기 때문에 사람이 기계어를 직접 작성하기 어려움
인터프리터가 사용자의 명령어를 운영체제가 이해하는 언어로 바꿈
운영체제 ↔ 파이썬 인터프리터 ↔ 파이썬 프로그램
사용하기도 쉽고 운영체제 간 이식도 가능하여 확장성이 있음.
- 파이썬 인터프리터를 사용하는 2가지 방법
- shell 이라는 프로그램으로 한번에 한 명령어씩 입력해서 실행
- 확장자가 .py인 파일에 작성된 파이썬 프로그램을 실행
- 표현식과 값
“1 + 2” → 표현식
값, 변수, 연산자 등을 조합하여 계산되고 결과를 내는 코드 구조
파이썬은 결국 표현식이 평가되어 값이 반환됨.
평가 : 표현식이나 문장을 실행하여 그 결과를 계산하고 값을 결정하는 과정
→ 표현식이나 문장을 순차적으로 평가하여 프로그램의 동작을 결정
문장 : 실행 가능한 동작을 기술하는 코드 (조건문, 반복문, 함수 정의 등)
표현식보다 큰 단위다. 문장이 보통 여러 개의 표현식을 포함한다.
- 타입
값이 어떤 종류의 데이터인지, 어떻게 해석되고 처리되어야 하는지를 정의
ex) 1 + 2 → 1,2는 값(피연산자). +는 연산자라고 한다.
타입은 이렇게 값과 값에 적용할 수 있는 연산이라는 2가지 요소로 이루어진다.
- 데이터 타입
numeric types
sequence types
text sequence types
set types
mapping types
등등…
- 산술 연산자
+
-
* : 곱셈
/ : 나눗셈
// : 정수 나눗셈 (몫)
% : 나머지
** : 지수 (거듭제곱)
- 연산자 우선순위
** ← - (음수부호) , *, // , / , % ← 덧셈, 뺄셈
지수가 제일 우선순위가 높고, 음수부호가 뺄셈보다 우선순위가 높다!
ex) -2 ** 4 = -16 (2**4이 먼저 계산되기 때문)
-(2**4) 이런 느낌이다!
(-2)**4 우리가 원하는 느낌은 이렇게 써야 계산이 된다.
- 변수와 메모리 “값이 저장되는 법”
변수 = 값을 참조(바라보다)하는 이름
보통 우리는 변수를 어떤 값이 담긴 상자로 생각하지만, 컴퓨터 언어적인 관점에서는 변수는 어떤 값을 담고 있는게 아니라 어떤 값을 바라보고 있는 것이다.
ex) degrees = 36.5 → 할당문 “변수 degrees에 36.5를 할당했다.”
- 변수명 규칙
영문 알파벳, 언더스코어(_), 숫자로 구성
숫자로 시작할 수 없다
대소문자 구분함
아래 키워드는 파이썬의 내부 예약어로 사용할 수 없음. (트루 논 펄스 앤드 class break def 등등)
- 변수, 값, 메모리
거리에 집 주소가 있듯이 메모리의 모든 위치에는 그 위치를 고유하게 식별하는 메모리 주소가 존재한다. degrees는 스스로의 메모리 주소를 갖고 있고 동시에 다른 메모리 주소를 가진 값을 바라만 보고 있는 것이다.
→ 변수는 그 변수가 참조하는 객체의 메모리 주소를 가진다.
객체 : 타입을 갖는 메모리 주소 내 값, “값이 들어있는 상자” (아까 36.5)
아~! 변수가 직접 값이 들어있는 상자가 아니라 고유한 메모리 주소를 가진 값을 그냥 참조할 뿐이구나!
- 할당문
- 할당 연산자 (=) 오른쪽에 있는 표현식을 평가해서 값(메모리 주소)을 생성
- 값의 메모리 주소를 ‘=’ 왼쪽에 있는 변수에 저장
- 존재하지 않는 변수라면 새 변수를 생성
- 기존에 존재했던 변수라면 기존 변수를 재사용해서 변수에 들어 있는 메모리 주소를 변경
- 변수에 재할당
n = 10
d = 2 * n
n = 5
→ 이래도 d 는 값이 변하지 않는다. d는 2번째 줄에서 20이라는 값의 메모리 주소를 참조하는 것으로 할당이 끝났다! 이후 값이 변한 것은 n 뿐이다!
- style guide
어떤 언어든 스타일 가이드가 있다.
코드의 일관성과 가독성을 향상시키기 위한 규칙과 권장 사항들의 모음
프로그래밍 언어의 맞춤법!
- 파이썬 스타일 가이드
변수명은 직관적인 이름을 가져야 함 ex) degrees, number 등등
공백 4칸을 사용하여 코드 블록을 들여쓰기 함
한 줄의 길이는 79자로 제한, 길어지면 줄 바꿈을 사용
문자와 밑줄(_)을 사용하여 함수, 변수, 속성의 이름을 작성
함수 정의나 클래스 정의 등의 블록 사이에는 빈 줄을 추가
- python tutor
파이썬 프로그램이 어떻게 실행되는지 도와주는 시각화 도우미
나중에 알고리즘 문제 풀이할 때 복잡한 과정을 시각화해서 따라갈 수 있게 도와준다.
- 주석
프로그램 코드 내에 작성되는 설명이나 메모
인터프리터에 의해 실행되지 않음
오로지 사람(개발자)를 위한 것이다.
# 한 줄 주석 (ctrl + / )
“””
여러 줄 주석
“””
- 주석의 목적
코드의 특정 부분을 설명하거나 임시로 코드를 비활성화할 때
코드를 이해하거나 문서화하기 위해
다른 개발자나 자신에게 코드의 의도나 동작을 설명하는 데 도움
- Data Types
값의 종류와 그 값에 적용 가능한 연산과 동작을 결정하는 속성
데이터 타입이 필요한 이유
→
값들을 구분하고 어떻게 다뤄야 하는지 알 수 있다
각 데이터 타입 값들도 각자에게 적합한 도구를 가짐
변수의 의도를 쉽게 읽을 수 있다
- Numeric types
int (정수 자료형)
→ 2진수 (binary) : 0b
8진수 (octal) : 0o
16진수 : 0x
print(0b10) = 2진수 10 = 2
float (실수 자료형) : 실수를 표현하는데, 프로그래밍 언어에서 float는 실수에 대한 근삿값이다.
ex) 0.1은 정확히 0.1이 아니라 0.1에 가까운 근삿값이다.
유한 정밀도 : 컴퓨터 메모리 용량이 한정돼 있고 한 숫자에 대해 저장하는 용량이 제한됨.
수 체계에 한계가 있고 2/3이나 5/3 등은 0.666666666666과 1.6666666666666667 등으로 근삿값을 표시함.
실수 연산 시 주의사항
컴퓨터는 2진수를 사용
10진수 0.1은 2진수로 표현하면 무한대로 반복
무한대 숫자를 저장할 수 없어서 사람이 사용하는 10진법의 근삿값만 표시함
이런 과정에서 예상치 못한 결과가 나타남
이런 증상을 floating point rounding error 라고 함
실수 연산 시 해결책
두 수의 차이가 매우 작은 수보다 작은지 확인하거나 math 모듈을 활용
두 수 차이가 엄청엄청 작으면 같은 수로 보자고 약속해서 에러를 해결
e-2 = 10**-2
e와 E로 10의 거듭제곱을 표현
- sepuence types
여러 개의 값들을 순서대로 나열하여 저장하는 자료형 (str, list, tuple, range)
- 시퀀스 타입의 특징
- 순서 : 값들이 순서대로 저장, 단 정렬되어 있다는 것은 아니다! (like 1 2 3 ) 순서가 있다는 거지 크기 순 등으로 정렬되어 있다는 것은 아님!!!
- 인덱싱 : 각 값에 고유한 인덱스(번호)를 가지고 있으며, 인덱스를 사용하여 특정 위치의 값을 선택하거나 수정할 수 있음
- 슬라이싱 : 인덱스 범위를 조절해 부분적인 값을 추출할 수 있음
- 길이 : len() 함수를 사용하여 저장된 값의 개수(길이)를 구할 수 있음
- 반복 : 반복문을 사용하여 저장된 값들을 반복적으로 처리할 수 있음
str : 문자열
문자들의 순서가 있는 변경 불가능한 시퀀스 자료형
문자열 표현
→ 문자열은 단일 문자나 여러 문자의 조합으로 이루어짐. 작은 따옴표(’) 또는 큰 따옴표(”)로 감싸서 표현함. 단, 한번 작은 따옴표 쓰면 쭉 작은 따옴표 쓰라는게 스타일 가이드다.
중첩따옴표
따옴표 안에 따옴표를 표현할 경우
작은따옴표가 들어 있는 경우는 큰따옴표로 문자열 생성
큰따옴표가 들어 있는 경우는 작은따옴표로 문자열 생성
escape sequence
역슬래시 뒤에 특정 문자가 와서 특수한 기능을 하는 문자 조합
파이썬의 일반적인 문법 규칙을 잠시 탈출한다는 의미
\n 줄 바꿈
\t 탭
\\ 백슬래시
\’ 작은 따옴표
\” 큰 따옴표
문자열 내에 변수나 표현식을 삽입하는 방법
→ f-string (중요!!!!!!!!!!!)
문자열에 f 또는 F 접두어를 붙이고 표현식을 { }로 작성하여 문자열에 파이썬 표현식의 값을 삽입할 수 있음.
{ } 안에 3+5 같은 간단한 표현식도 들어갈 수 있다.
- 문자열의 시퀀스 특징
인덱싱 → i[1]
슬라이싱 → i[2:4]
길이 → len(i)
인덱스 : 시퀀스 내의 값들에 대한 고유한 번호로, 각 값의 위치를 식별하는 데 사용되는 숫자
슬라이싱 : 시퀀스의 일부분을 선택하여 추출하는 작업
→ 시작 인덱스와 끝 인덱스를 지정하여 해당 범위의 값을 포함하는 새로운 시퀀스를 작성
자르는 범위가 연속되지 않게도 가능하다.
ex) i [0:5:2] → 0부터 5까지 2칸씩 왼쪽에서 오른쪽으로 잘라간다.
맨 뒤 숫자가 음수면 방향이 반대로 바뀐다.
i [::-1] → 방향 반대로 스탭을 -1씩 잘랐기 때문에 매우 쉽게 문자열 뒤집기가 가능하다.
문자열은 불변 (변경 불가)
i = ‘hello’
i[1] = z 이러면 에러가 뜬다.
헬로가 다같이 통째로 고유 메모리에 들어갔기 때문에 이 안에서 일부만 따로 바꾸는 것이 안된다.
메모리를 변경하면서 그 값을 바꾸는 것이 안된다.
하나의 값으로 평가되는 것이 수식이다.
→ 10, num이라는 변수 하나, 함수, 변수와 연산자의 조합 등 모두 수식이다.
수식을 구성하는 요소 → 피연산자(값), 연산자
값의 종류가 있다. → 자료형
1과 1.0 은 의미상으로는 같지만 컴퓨터에서 다루어질 때는 다른 성격(타입)으로 취급된다.
그렇다면 값의 종류, 자료형은 왜 필요한가?
컴퓨터는 0, 1 만 저장하는데, 다른 수많은 정보들을 어떻게 저장하겠는가?
그래서 다 0과 1로 이루어지는 정보로 변환되어 저장된다.
저장된 정보가 숫자인지, 문자인지 구별해야 함. 각 타입 별로 저장 용량 사이즈를 정하고 타입을
구분해서 컴퓨터가 제한된 저장공간 안에서 정보를 구별함.