엘리스의 아침이 밝았습니다!
더 이상은 공부 핑계로 블로그 글을 미루지 않기 위해 시작한 TIL 프로젝트! 이미 AI Track은 시작한지 벌써 이틀이 다 돼가지만 역시 시작은 사전 학습 기간동안 배운 파이썬부터 정리하는 것이 맞다고 생각해 이 글을 시작으로 그날그날 공부한 내용을 정리해보고자 한다. 부디 1일 1커밋만큼 이 글 작성도 꾸준히 하길 바라며 🙏🏻
Regular Expression [ 정규식 표현 ]
정규식 검사 함수
- re.match (pattern, string) → string 시작 부분부터 패턴이 있는지 쭉 검사한 후 match object 변환
- re.search ( `` ) → string 전체에 패턴이 있는지 검사한 후 match object 변환
- re.findall ( `` ) → string 전체에 패턴이 있는지 검사한 후 list 반환
- re.finditer ( `` ) → string 전체에 패턴이 있는지 검사한 후 그 결과에 대한 iterator 객체 반환
문자열 수정 함수
- re.sub ('패턴', '바꿀문자열', '문자열', 바꿀횟수) → 특정 문자열을 찾아 다른 문자열로 바꿈
함수 예시
>>> re.match('Hello', 'Hello, world!') # 문자열이 있으므로 정규표현식 매치 객체가 반환됨
<_sre.SRE_Match object; span=(0, 5), match='Hello'>
>>> re.search('^Hello', 'Hello, world!') # Hello로 시작하므로 패턴에 매칭됨
<_sre.SRE_Match object; span=(0, 5), match='Hello'>
>>> re.sub('apple|orange', 'fruit', 'apple box orange tree') # apple 또는 orange를 fruit로 바꿈
'fruit box fruit tree'
메타 문자
→ 약속된 기호. 규칙을 가진 단어를 짧게 쓸 수 있다!
^ | 문자열 시작 | \n | 개행 문자 ( 줄바꿈, 엔터와 같은 역할) |
$ | 문자열 끝 | \ | 이스케이프용 문자 |
[ ] | 문자 클래스 [aeiou], [^aeiou], [A-Za-z] | . | 모든 문자와 대응 |
\d | 숫자 | \t | 가로 탭 문자 |
\D | 숫자가 아닌 모든 문자 | \u | 세로 탭 문자 |
\w | 알파벳 대소문자, 숫자, 밑줄( _ ) | \f | 용지 넘김 |
\W | 위 내용 빼고 나머지 ↑ | \r | 캐리지 리턴 |
\s | 공백, 탭 문자 | \b | word boundary / 단어 구분자를 찾아줌 |
\S | 위 내용 빼고 나머지 ↑ |
수량자
* | 0개 이상 (elice* = elice, elic, eliceee..) | {n} | n개 ( \d{3} = 123,456.. ) |
+ | 1개 이상 | {n,m} | n 이상 m 이하 |
? | 0 or 1 (elice? = elic or elice) | {n,} | n개 이상 |
그룹 ( )
- (e | a)lice = elice or alice
- (tom | pot)ato = tomato or potato
- (base | kick){2} = basebase, basekick, kickkick, kickbase
- (to)ma\\1 = tomato
객체지향 프로그래밍
상속, 다형성(같은 모양의 코드가 다른 역할을 하는 것), 캡슐화를 통해 코드의 재사용이 쉽고 우리 실생활을 더 잘 나타낼 수 있다!
클래스 : 객체를 만들 수 있는 틀 ( 빈 껍데기 / 붕어빵 틀 )
→ class Human (self):
field( 필드 ) : 객체가 가지고 있는 성질 ( 변수 )
method( 메서드 ) : 객체가 가지고 있는 행동 ( 함수 )
class Pokemon:
p_name = ""
p_hp = 0
p_type = ""
def skill(self): # 생성자
pass
생성자 : 모든 클래스의 기본이 되는 메소드 // 인스턴스가 처음 어떻게 만들어질지 결정
class Post:
def __init__(self, author, content):
self.author = author
self.content = content
인스턴스 : 클래스로 만들어낸 객체 ( 붕어빵 )
→ 인스턴스는 '예를 들어' 에 사용하는 'for instance' 에서 나왔다. 즉 클래스의 예시라고 생각하면 이해하기 좋다.
class Pikachu(pokemon):
p_name = "Pikachu"
p_hp = 50
p_type = "Electric"
def skill(self):
print("10만 볼트!!")
인스턴스를 사용함에 있어 '상속' 이라는 개념이 있는데, 여러 클래스가 비슷한 속성과 메소드를 공유해야할 때, 또는 클래스 간 계층 구조 (부모 - 자식)가 확실할 때 상속을 한다. 이 과정에서 자식 클래스가 부모 클래스보다 정보가 많을 수 있다!!
class Reaction:
def __init__(self, reaction_type, post, user):
if reaction_type not in ["LIKE", "LOVE", "HAHA", "SAD", "ANGRY", "WOW"]:
raise ValueError("올바른 리액션을 선택해주세요!")
self.reaction_type = reaction_type
self.post = post
self.user = user
>>>> class Angry(Reaction):
def __init__(self, post, user):
super().__init__("ANGRY", post, user) # 상속
post.negative_reactions += 1
class User:
def __init__(self, name):
self.name = name
class Post:
def __init__(self, content):
self.content = content
self.reactions = []
self.positive_reactions = 0
self.negative_reactions = 0
모듈 : 특정 목적을 가진 함수, 자료의 모임 (코드 모음집)
→ import 로 불러와서 사용한다.
import random
random.randrange(start, stop)
패키지 : 모듈을 폴더로 구분해 관리하는 것
import food(패키지).tomato(모듈)
from food(패키지).tomato(모듈) import ketchup(함수)
matplotlib
mat : math // plot : 점찍다, 그래프 그리다 // lib : 라이브러리
→ 데이터들을 그래프로 만들어주는 라이브러리
import matplotlib.pyplot as plt
→ 보통 이렇게 시작한다.
plt.bar ( x[가로], y[세로], align="center" [가운데 정렬]) → 바 그래프
plt.plot ( ) → 꺾은선 그래프
plt.seatter ( ) → 점만 찍힘 / 경향성 파악에 용이
버그(Bug)
→ 코드가 원하는대로 동작하지 않는 모든 경우
- 프로그램이 죽는 경우 (crash)
- 예상보다 훨씬 느릴 때
- 잘못된 결과가 나올 때
- 설계상 일어나면 안되는 일이 일어났을 때
예외 (Exception)
→ 일반적이지 않은 코드의 동작
- 사용자가 프로그램을 강제 종료했을 때
- 분수의 분모가 0일 때
- 열고자 하는 파일이 없을 때
- 인터넷이 불안정할 때
에러 메세지 (Error)
Traceback (most recent call last) |
함수를 아래부터 위로 읽어봐라 | TypeError | 연산 실수 (문자와 숫자의 합 등) |
NameError | 오타 | ZeroDivisionError | 0으로 나눴다! |
SyntaxError | 문법이 잘못됐다! | IndexError | 문자열의 n번째 글자가 존재하지 않는다! |
'Programming > 6. Elice AI Track' 카테고리의 다른 글
006_git_the final (6/25) (0) | 2021.06.27 |
---|---|
005_git & Clean Code(6/24) (0) | 2021.06.25 |
004_gitlab & Clean Code(6/23) (0) | 2021.06.23 |
003_git(6/22) (2) | 2021.06.23 |
002_리눅스(6/21) (0) | 2021.06.23 |
댓글