본문 바로가기

About coding/Today I learned

2023년 04월 06일 TIL [#Django 입문_4]

그 날은 비가 추적 추적 내리는 날이었지...

고개를 돌려 보니...

저기 먼 곳에 그림자 하나가 보이는 거야...

나를 기다리는 과제였다네


오늘의 학습 계획

_Django 스파르타 1.5배속 완강하기 (2배속으로 봤더니 오히려 이해가 안된다 ㄷㄷ 언제 다보고 언제 실제 작업하냐 ㅠㅠ 괴롭다... 실제 작업부터 하면서 필요한 것만 골라 보는게 좋다지만 전체 작업 중에서 내가 필요한 게 이름이 뭔지, 기능이 뭔지, 머리속에 정리가 잘 안된다. 일단 한 번 쭉 보기 전에는 어불성설)

_작업 내용 대충 써보기

더보기

1. 와이어프레임 작성

_발제문에 있었던 실제 무신사 사이트 참조

 


2. 작업 순서 (**매 발자국마다 print 파일실행 해보며 에러 점검)

a)_강의보며 장고 설치/파일생성/데이터베이스 연결
  > 발제문에 나온대로 폴더/파일 구성 따라하기

b)_의사코드 작성하며 import 부분 넣기
  >html 단위로 작성하여 끼워넣고
  > 그때 그때 필요한 urls.py 와 view.py 의사코딩

c)_실제 코딩
  > 뼈대 html 부터 코딩하고 > API 코딩하고 > 데이터베이스 연결

 

 

3. 마무리
_발제문에 있는 요청사항 모두 만족했는지 점검
_Git 푸시
_동기들 작품과 비교해보기

 

 


기록하고 싶은 학습내용

1. 오늘 알고리즘 공부

프로그래머스 코딩테스트의 '문자열 뒤집기' 문제 해결했다.

문자열을 바로 뒤집는 코드가 있을 법했으나, 검색해서 쉽게 풀면 시시하므로 내가 알고 있는 방식들을 합쳐서 해결해보고자 했다.

처음 구상은 이거였다. 문자열을 리스트로 만들고, 리스트를 .sort(reverse =True)로 뒤집은 뒤, 다시 합쳐서 문자열 만들기. 그런데 생각해보니 .sort()나 sorted()는 그냥 뒤집기만 하는 것이 아니라 알파벳 순서대로 정렬까지 하므로 문자열로 받은 단어가 망가져버린다. 그래서 방법을 검색해야했는데

.reverse() 랑 reversed() 함수를 찾았다.

둘 사이에는 차이점이 있는데

.reverse()는 맨 앞에 내가 뒤집고 싶은 리스트를 넣어서 <리스트이름>.reverse() 하면 리턴값으로 주어진 리스트 자체를 뒤집어 준다.

그런데 reversed(<리스트이름>) 함수는 반환하는 값이 이터레이터(?)이기 때문에

a_list = ['a', 'g', 'g', 'h', 'c', 'v', 'b', 'd', 'e', 'g', 'h', 'f']

r_list = reversed(a_list)


print(r_list)

출력하면 <list_reverseiterator object at 0x0000017D67A07B80> 뭐 이렇게 나와버린다.

 

그게 뭔지 gpt에 물어보니

"이터레이터는 한 번만 사용할 수 있는 객체로, 리스트와 같은 시퀀스 객체와 달리 인덱싱을 지원하지 않습니다" 라고 함.

이터레이터는 뭔지 다시 물어보니

"파이썬의 이터레이터는 반복 가능한 객체로, 리스트 튜플 셋 사전 문자열 등 여러개의 요소를 가지는 컨테이에서 각 요소를 하나씩 꺼내어 어떤 처리를 수행하는 간편한 방법을 제공하는 객체" 이고, "이터레이터는 한 번만 사용할 수 있으며 값을 한 번 꺼냈으면 다시 돌아갈 수 없다고 함. 이터레이터를 사용하려면 새로 만들어야 한다고..."

 

내가 이걸 무슨 말인지 이해하려면 튜터님에게 이터레이터의 정체에 대해서 더 물어보고 배경지식을 모아야 될거같다.

이터레이터가 약간 파이썬 구현코드 쪽에 들어가보면 어떤 기능을 가지고 존재하는 Class일 것이라는 추측은 든다.

 

아무튼 다시 돌아가서 reversed() 함수를 이용하려면

아래처럼 써야 한다.

a_list = ['a', 'g', 'g', 'h', 'c', 'v', 'b', 'd', 'e', 'g', 'h', 'f']

r_list = list(reversed(a_list))


print(r_list)

그럼 결과 답안은

> ['f', 'h', 'g', 'e', 'd', 'b', 'v', 'c', 'h', 'g', 'g', 'a']

이렇게 나오게 되고, 이제 이걸 문자열로 합치기만 하면 된다!

합치는 방법도 몰라서 for문을 돌리며 += 하려고 했으나 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

소은님이 ''.join(<리스트이름>) 함수를 알려주셔서 수월하게 해결했다.

a_list = ['a', 'g', 'g', 'h', 'c', 'v', 'b', 'd', 'e', 'g', 'h', 'f']

list(reversed(a_list))


print(''.join(list(reversed(a_list))))

결과는 > fhgedbvchgga

완성!

아래는 reversed() 대신 .reverse()를 쓴 방식

a_list = ['a', 'g', 'g', 'h', 'c', 'v', 'b', 'd', 'e', 'g', 'h', 'f']

a_list.reverse()


print(''.join(a_list))

그리고 탁근님이 알려주신 가장 편리한 방법

def solution(my_string):

    answer = my_string[::-1]     #따로 [::-1] 이라는 기특한 코드가 있었음

    return answer


print(solution("bread"))

오늘의 알고리즘 공부 끝!


오늘 만난 어려움, 작은 질문과 해결, 복습용 키워드 메모장 PASS

오늘은 django로 무신사 재고관리 시스템 만들기 개인과제 프로젝트에 올인해서

거기에 나의 기쁨과 애환이 모두 담겨있다. 여기에 담기엔 적다... 모두 별도의 게시물에서 따로 다루고 게시해야겠다.