들어가며
본격적으로 프로그래밍 수업이 시작되는 날이다. 백준에서 매일 한문제 씩 알고리즘 문제를 풀고 있어서 기본적인 사용법은 알고 있지만 그래도 아직은 많이 부족하다. 처음부터 다시 배운다는 마음가짐으로 수업에 임해야겠다.
Jupyter Notebook 설치 및 사용법
저번 겨울에 참여했던 ABC부트캠프 7days 때는 `Google Colab` 환경에서 코드를 작성했지만 이번 과정에서는 `Jupyter Noterbook`에서 진행되었다. 교수님께서 제공해주신 자료에 기본적인 사용법과 단축키가 설명되어 있어서 금방 익숙해질 수 있었다.
Library 설치
라이브러리는 우리가 어떤 자료가 필요할 때 도서관에서 필요한 서적을 꺼내 쓰는 것을 생각하면 된다.
!pip install <설치할 라이브러리1> <설치할 라이브러리2>...
!pip install numpy pandas matplotlib seaborn plotly xlrd openpyxl
여러가지 라이브러리를 설치하게 되는데 이번 수업에서는 이 라이브러리들을 직접적으로 이용하지 않았으므로 관련 내용은 추후에 다시 다뤄보도록 하자.
기본 문법
세미콜론 `;` | 한줄에 여러 코드를 입력할때 각 코드를 구별한다. |
주석 `#` | 실행 코드가 아닌 설명을 위한 텍스트 |
들여쓰기 | `Tab`으로 들여쓰기 |
코드블럭 | 복수의 명령집합, 들여쓰기를 기준으로 하며 동일 코드블럭은 동일한 들여쓰기를 갖는다. |
입력 | `input` 내장 함수 |
출력 | `print()`, `display()` 내장 함수 |
세미콜론은 `C`나 `JAVA`같은 경우에서는 문장의 끝을 의미한다. 하지만 파이썬에서는 문장의 끝을 세미콜론으로 표시해 줄 필요가 없다. 세미콜론을 쓰는 경우는 아래와 같이 여러 코드를 한줄에 입력할 때 구별하기 위해 사용한다.
print('a'); print('b')
또한 코드블럭은 여타 다른 프로그래밍 언어처럼 중괄호로 구분하는 것이 아닌 들여쓰기로 구분한다. 따라서 동일한 코드블럭은 동일한 크기의 들여쓰기를 가져야 한다.
Python 기초
변수 | 값을 저장하는 메모리 공간 |
상수 | 기본적으로 변하지 않는 값이지만 파이썬에서는 표기법으로만 구분 |
리터럴 | 저장되는 값 자체 |
변수 표기법
userName = '홍길동' # 카멜 표기법
user_name = '홍길동' # 스네이크 표기법
str_userName = '홍길동' # 헝가리안 표기법
교수님께서는 스네이크 표기법과 헝가리안 표기법을 보편적으로 많이 사용한다고 하셨다. 나도 지금까지는 스네이크 표기법을 많이 사용했는데 헝가리안 표기법은 한번도 사용한 적이 없다. 파이썬에서 헝가리안 표기법이 중요한 이유가 파이썬은 변수에 어떤 값이든 할당할 수 있기 때문에 변수 선언 시 자료형을 함께 표기함으로써 명시성을 높여주기 때문이라고 한다.
상수
PI = 3.14
PI = 123
# 123
대문자 표기로 상수임을 암시한다. 기본적으로 변하지 않는 값이지만 변수와 동일하게 값 변경이 가능하다.
데이터 타입과 연산자
파이썬에서는 다양한 데이터 타입을 제공한다. 그 중 `숫자형`, `논리형`, `문자형` 데이터 타입에 대해 알아보자.
숫자형 데이터 타입
x = 10
y = 10.0
type(x) # x의 데이터 타입은 int(정수)
type(y) # y의 데이터 타입은 float(실수)
이 두 가지 데이터타입의 숫자는 산술 연산자, 대입연산자와 함께 활용될 수 있다.
# 산술 연산자
# +, -, *, /, //, %, **
10 // 4 # 나눈 몫의 소숫점을 없앤 결과
10 % 3 # 나머지
2 ** 3 # 거듭제곱
# 대입연산자
# +=, -=, *=, /=
x += 10 # x = x + 10
# 연산자 우선순위
a = 1 + (3 * 2) # 괄호 권장
교수님께서는 우선순위가 정해져 있더라도 코드가 길어지면 가독성을 위해 괄호를 써주는 것이 좋다고 하셨다.
# 숫자형 데이터 다루기
# abs, pow, divmod
abs(-1) # 절대값 함수
pow(2, 3) # 거듭제곱 함수
divmod(10, 3) # 몫과 나머지를 구하는 함수
코딩테스트에서도 유용하게 쓰이는 함수이다. `abs()`는 알고 있었지만 `pow()`와 `divmod()`는 이번 수업을 통해서 처음 알게 되었다. 이렇게 간편하게 함수하나로 해결 가능한 점이 파이썬의 가장 큰 장점이 아닐까싶다.
논리형 데이터 타입
논리형 데이터 타입은 참과 거짓을 나타내는 `True`와 `False`가 있다. 맨 앞글자는 대문자로 써줘야 함을 주의하자.
논리형 데이터 타입의 형변환은 다음과 같다.
bool()
## 거짓으로 취급되는 다양한 값들
## 1. None, False
## 2. 0, 0.0
## 3. '', (), [], {}, set(), range(0)
논리형 값의 연산은 `and`, `or`, `not` 크게 3가지로 이루어진다.
`and`는 쉽게 말해 둘 다 참일 경우에만 참이 된다.
`or`은 둘 중 하나만 참이어도 참이 된다.
`not`은 참을 거짓으로, 거짓을 참으로 만든다.
이러한 논리연산자를 이용하여 다음과 같이 다양하게 활용해볼 수 있다.
x = 20
# x가 10 이상이고, 99 이하인가? True
(x >= 10) and (x <= 99)
x = 60
# x가 3의 배수이고, 7의 배수가 아닌가? True
(x % 3) == 0 and (x % 7) != 0
[참고] 논리연산의 단락평가
x = True
y = '참'
x and y
x는 논리형 데이터 타입이니 문제가 없지만 y는 `참`이라는 값을 가진 문자열 데이터 타입이다. 만약 `and`연산을 하게되면 `and`는 앞서 말했듯이 둘 다 참이어야 `True`가 되므로, 먼저 확인한 값이 `False`이면 뒤에껀 볼 필요도 없이 그냥 결과는 `False`가 된다. 근데 위의 코드는 먼저 확인한 값이 `True`이기 때문에 뒤의 데이터까지 마저 확인을 해야한다. y는 참이라는 문자열 데이터 타입이므로 직접적인 논리연산을 할 수는 없으므로, 마지막으로 확인한 데이터 값인 참을 출력하게 된다.
`and`와 `or`의 참,거짓을 판단하는 흐름을 잘 이해해야겠다.
문자열 데이터 타입
말 그대로 문자열을 가지는 데이터이다. 큰 따옴표 또는 작은 따옴표로 표현하고, 여러줄을 한번에 표현하기 위해서는 `'''`, `"""`을 쓰기도 한다.
문자열의 연산은 다음과 같이 숫자 연산과 조금 다른 방식으로 작동한다.
# 문자열을 활용한 연산 ( + , * )
## 덧셈(+), 곱셈(*)
"AB" + "CD" # 더하기는 문자열을 이어붙이기
"AB" * 4 # 곱하기는 문자열을 해당 수만큼 반복해서 이어붙이기
str_age = '10' # 문자열 타입의 '10'
int(str_age) * 5 # 문자열 타입의 '10'을 정수 10으로 형변환 후 5를 곱함 => 50
문자열 포맷팅
문자열의 특정 부분을 다른 문자열로 치환하는 개념이다. 문자열을 포맷팅하는 방식은 3가지가 있는데 자신에게 편한 방식으로 사용하면 될 것같다.
# 문자열 포멧팅
## printf-style String Formatting | format % values
## %로 시작하며
"나는 %s를 좋아합니다" % '고양이'
## format method
"나는 {}를 좋아합니다.".format('고양이' * 3) # str.format() --> .format() 메서드
## f-strings
animal = '고양이'
f"나는 {animal * 3}를 좋아합니다."
문자열 슬라이싱
문자열의 각 문자위치(인덱스)를 이용하여 원하는 부분을 추출할 수 있다. 인덱스는 아파트의 층이라고 생각하면 좋을 것 같다.
# 문자열 다루기
## 인덱스 : 여러 개의 값중에 구별하기 위한 값
message = "hello python!"
message[0] # 0번째 글자 == 'h'
## 인덱싱과 슬라이싱
## object[index]
## object[start:end[:step]] # :step은 옵션(미지정 시 1)
message[4:1:-1] # 4번째 인덱스부터, 2번째 인덱스 까지 -1만큼씩 이동해서 추출
이 외에도 다양한 기능을 가진 함수와 메서드가 있다.
## function : len, count
## method : find, index, split, join, upper, lower, replace
"abcd".replace('a', '1') # a를 1로 교체
"abcd".find('e') # 값이 없으면 -1 반환
# "abcd".index('e') # 값이 없으면 에러(substring not found)
마무리
정리하고 보니 기초부분이라도 생각보다 양이 많은 것 같다. 매번 배울 때마다 새로운 느낌이고 프로그래밍 언어가 가지고 있는 기능이나 개념이 정말 방대하다는 것을 느꼈다. 부트캠프 특성상 진도를 빠르게 나가는 만큼 그날그날 배운 내용을 복습하는 것은 선택이 아닌 필수이지 않을까싶다.
'ABC부트캠프 테크노트' 카테고리의 다른 글
[6일차] ABC부트캠프 : 파이썬 프로그래밍 미니프로젝트 (0) | 2024.07.11 |
---|---|
[5일차] ABC부트캠프 : 파이썬프로그래밍 기초3 (0) | 2024.07.10 |
[4일차] ABC부트캠프 : 파이썬 프로그래밍 기초2 (0) | 2024.07.09 |
[2일차] ABC부트캠프 : ESG포럼 & 세미나 (0) | 2024.07.05 |
[1일차] ABC 부트캠프 : 오리엔테이션 (0) | 2024.07.04 |