으으 피곤해. 어제 남은 심화강의 반틈을 오늘 마저 들었다.
아래는 강의 정리내용, 및 핸드북에서 본 level 1 코딩테스트 삽질기를 기록한다..
강의 내용 정리
*적고 끝내지말고 맨날 읽자
__init__() : 생성자 함수
인스턴스 생성시 바로 메소드 실행!
인자를 입력하지 않으면 실행되지 않는다.
그럴때 쓰는 것 =“default” (default는 함수에서도 사용한다)
상속 : 상속해주는 class가 부모, 상속받는 class가 자식요소 혹은 subclass
class Monster():
def __init__(self, hp):
self.hp = hp
class FireMonster(Monster): #괄호에 받아올 부모 class를 입력한다.
def __init__(self, hp): #받아오고자하는 정의 데이터를 입력하고,
self.attribute = "fire” #자식요소만의 속성을 적어둔다.
상속 내 > super() 부모 클래스 코드를 그대로 사용하는 것
자식클래스의 super().__init__(hp) = 부모클래스의 self.hp = hp
각각 직접 적어넣어야하는 것을 부모 클래스에 넣고 상속받아 사용할 수 있도록 한다.
자식요소에는 기본적으로 부모 클래스에 있는 코드를 사용하게 되지만 똑같은 이름의 메소드를 새로 선언하면 오버라이딩(overwriting)이 가능하다. 클래스를 가져다가 원하는 부분만 수정하여 사용이 가능! (모듈자체는 수정하면 오류가생길 수 있으니 지양한다)
Class 객체 다루기 (object)
객체, object = 인스턴스 라고 보면된다.
구현부 코드를 꼭꼭 읽어서 무엇인지 파악하고 쓰는 습관을 들이자!
정규 표현식 : Regular expression regex
문자열이 특정 패턴과 일치하는 지 판단.
ex) 입력한 이메일이 유효한지, 대문자 시작, 숫자로 끝나는 단어가 몇번 반복되는지 등등 다양한 패턴을 지정하고 검증할 수 있다.
하나하나 if 문을 작성하는 것보다 정규표현식을 사용하여 작업을 짧게 줄일 수 있다.
>>https://regexr.com/.정규표현식 예제 사이트..!
언어마다 정규식을 표현하는 방법이 조금씩 다르니 확인해보아야한다
Python에서는 \와 문자를 붙이면 실행하는 특수문자가 있다. Ex. \n 개행, \t tap
r"" 안에 적으면 (r”\n, \t”) 문자로 사용할 수 있다. 이것으로 정규표현식을 씀!
Glob
변수 = golb.glob(“./venv/*”)
./현재경로, 이후 어떤 폴더를 볼것인지 경로를 작성한다
*모든 파일, 폴더
**, recursive (별 꼭 2개)
모든 파일, 폴더와 하위 폴더까지 탐색하겠다.
+ *.py를 추가하면 특정 파일만 검색이 가능!
++ glob이 실행안되는 문제가 있어서 한참 헤멨다
경로 재 설정하고 폴더 들락날락하고 파일도 옮겨보고 했는데 결국 껐다 켜니까 됐다ㅠ.ㅠ
앞으로는 이 코드로 현재 경로를 확인하고 해결방법을 차분히 생각해보자..
print('CURRENT PATH', os.path.abspath('.'))
++생각해보니 파일 저장을 안하고 실행시켜서인것 같다... 제발... 정신차려...ㅋㅋㅋㅋ
Open
F = open(“file.txt”, “w”, encoding=“utf-8”)
# “경로 설정or안하면 현재폴더”, “write=w새로쓰기 read=r읽기 append=a추가”, encoding 문자 깨짐 방지)
f.write(“글귀 넣기\n”)
f.close() #꼭!!!닫아주기
▶ with + open
With open() as w:
잠깐 파일을 사용할때 쓰는 방법. 간편하고 close를 사용하지 않아도 된다.
Itertools..
다양한 연산을 수행하는.. 본격 수학의 영역이다
특정 패턴이 반복되는 배열, 배열의 값을 일괄 계산하기도 하고.. 여튼 수학적 계산을 잔뜩 해야할때 사용한다.
….나중에 열심히 들여다보자 수열보고 화들짝
requests
http통신을 가능하게 해주는 모듈, beautifulsoup으로 데이터를 가공해서 저장해준다. = 크롤링
Api통신에도 활용
(***동기님 이야기에서 beautifulsoup으로는 js는 가져와지지 않는다고 들었다;; 삽질하지말고 꼭 기억해두자)
▶ 대표적 4가지 메소드. (http의 형식을 받아 python에서 코드로 구동하는것)
Get : 데이터 정보 요청
Post : 데이터 생성 요청 = 어떤 데이터를 생성할건지 담아두어야함
Put : 데이터 수정 요청
Delete : 데이터 삭제 요청
파이썬에서 requests(요청)하면 response(응답)을 내려주며
- Content 서버가 클라이언트에게 보여줄 내용
- Status code 상태 코드 = 이 통신이 정상적으로 진행되었는지. ->if문으로 어떤 상태인지 확인할 수 있다
(http 작동을 간단히 확인 가능 : https://jsonplaceholder.typicode.com/)
json
Javascript object notation
데이터를 저장, 통신을 할때 주로 사용된다.
파일이면 .json 확장자를 사용, key:value 쌍으로 이루어져있다 = dict형식과 유사
= json<->dict 데이터로 바꾸어서 사용할 수 있음!
r = requests.get(f"{url}users/1") # 불러왔을때 형식은 string 이니까
변수 = json.loads(데이터) # dict형식으로 바꾸어 활용한다.
csv : Comma-separated values
텍스트에 쉼표,를 사용해 필드를 구분, .csv 확장자를 사용한다.
단순 텍스트여서 텍스트 편집기로 만들 수 있고, 읽고 쓰는 속도가 빠르다!
그래서 데이터로 가져와 활용하기도 함(단순 텍스트 파일이지만 excel에서 보면 쉼표 기준으로 셀이 나뉘어있다)
내가 csv 데이터를 어떻게 활용할 것인지에 따라서 자료형을 결정하면 된다.
이 부분은 꽤나 자주 활용한다고 들어 강의자료를 따서 넣어둔다..
import csv
csv_path = "sample.csv"
# csv를 list 자료형으로 읽기
csv_file = open(csv_path, "r", encoding="utf-8") #open함수로 read해오고
csv_data = csv.reader(csv_file) #csv.reader로 파일을 읽어낸 데이터를 변수로 지정,
for i in csv_data: #데이터 안의 요소 출력
print(i)
# csv를 dict 자료형으로 읽기
csv_file = open(csv_path, "r", encoding="utf-8")
csv_data = csv.DictReader(csv_file). #dict형으로 읽기 위해 .DictReader를 사용
for i in csv_data:
print(i)
▶ csv에 데이터 입력하기
write는 처음부터 새로 쓰기 때문에 내용을 추가하는 append를 주로 쓴다
import csv
csv_path = "sample.csv"
csv_file = open(csv_path, "a", encoding="utf-8", newline='')
# 내용추가, newline각 라인을 어떻게 작성할지, 지정하지 않으면 공백이 한줄씩 생김**유의
csv_writer = csv.writer(csv_file) # .writer
csv_writer.writerow([“a@abc.com", ‘2000’, “Kim”, "Seoul"])
# 데이터추가, 형식도 생각하여 적어넣는다.
csv_file.close() # **꼭 닫아주기, 저장하고 csv파일에 가면 한줄 더 추가된 것을 알 수 있다!
Decorator
데코레이터. 해당함수위에 @decorator코드를 사용하고, 함수와 함께 실행된다. #decorator이름은 알기 쉽게 지정하기
보통 warpper()로 감싸 정의해주고, 시작과 끝에 반응이 나올 수 있도록 설정
= 함수가 실행되기 전, 후에 내가 원하는 것을 사용할 수 있게 해준다.
사용예제) 로그인 한 사용자가 볼 수 있도록 설정하고 싶으면, if else문으로 로그인했으면 보이기, else에 alert뜨기 등으로 활용할 수 있다!
***
다른 사람들이 어떻게 활용하는지 살펴보면서 차근차근 익숙해져보자:)
특히.. itertools…. 수학이라고 무서워하지 않기..
코딩테스트(feat.허공에_삽질)
강의를 들으면서, 강의를 들은 다음에도 코딩테스트 삽질을 계속 하는 중
코딩테스트 level1, 수포자 문제
일단 문제를 풀어야하니 문제에서 주어진 것, 조건, 구하고자 하는 바를 주석으로 정리했다.
#주어진 것: 정답list answers,
#수포자1,2,3의 성적 변수 리스트
student_one = [1,2,3,4,5]
student_snd = [2,1,2,3,2,4,2,5]
student_trd = [3,3,1,1,2,2,4,4,5,5]
#최대 10000개의 문제를 풀이할 수 있는 배열반복문 만들기
#수포자들의 숫자를 answers list와 비교하고 filter로 true 개수만 걸러낸다.
#정답을 맞춘 개수(true)를 오름차순.sort으로 출력하여 가장 많이 맞춘 사람을 나타낸다.
#마지막으로 누가 가장 정답을 많이 맞추었는지 출력한다.
어제부터 파이썬 심화강의를 들으면서 활용할 수 있을 법한 함수들을 미리 적어넣었다.
그리고 중간중간 풀어볼만한 코드들을 적어넣어보았는데, 강의듣고 풀이하고 왔다갔다하다가 바보같은 짓을 했다!
위의 주석은 열심히 문제풀이를 하면서 바뀐 현재버전으로 보아야하고,,,
문제 정답부터 만들어야하는 줄 알고 어제는 1-5사이의 함수가 랜덤으로 10000개까지 출력되는 코드를 짰다ㅋㅋ;
아래는 해당 코드
#문제의 정답용 랜덤 리스트를 불러오는 코드(문제 정답이 1-5)
problem = 10
answer_result = []
for value in range(0,problem):
answer_result.append(random.randint(1,5))
print(answer_result)
i = int(answer_result()) #이건뭐지 정수로 바꾸고싶었나
# 뭐하냐 문제 안 읽냐?ㅋㅋㅋㅋㅋㅋㅋㅋ
잊어버리기 아까우니까 일단 저장해둔다.. 덕분에 랜덤함수나 range()에 대해서도 공부했으니 완전 삽질은 아니라고 볼 수 있다
하지만.... 하지만 ..... 완전 필요없는거에 삽질을 했는데 잘 작동되는 첫 파이썬 코드다 보니 허탈하다
하고싶은 것에서는 그렇게 오류가 많이 나더니 너는 잘 되는구나 그랬구나
애초에 가장 큰 문제였던 건,
코딩테스트에서 주는 코드에 대한 이해가 부족했던 것이다. 주석을 잘 썼든 못썼든 아예 풀이를 못했다고 봐야겠다..
def solution(answers):
answer = []
return answer
강의를 다 들은 지금 해석해보자면
정의 해답(정답list) :
정답리스트의 요소 = []
반환 정답을 맞추었는지 반환하여 answer에 저장
return : 값을 함수 바깥으로 반환하고 함수에서 나온 값을 변수에 저장한다. 기억해!!
매니저님께 투덜려서 얻은(!) 자세한 주석을 보고도 아직 모든 코드가 이해되지 않아서 풀지 못했다
오늘 남은 시간동안 좀 더 삽질을 진행해서ㅋㅋㅋ 오늘내로 풀이에 성공하고 싶다!
화이팅!
'AI 웹개발반' 카테고리의 다른 글
[TIL] 예제 만들어 공부하기, 코딩 300제! (4) | 2023.03.23 |
---|---|
[TIL] 코딩테스트 삽질기.. (0) | 2023.03.22 |
[TIL]파이썬 기초3 _ 미니프로젝트로 복습 중 (0) | 2023.03.21 |
[TIL+] To being 좋은 개발자,,, (0) | 2023.03.20 |
[TIL] 파이썬 기초2 _문제풀이 (1) | 2023.03.20 |