• 데코레이터
  • Django
  • Pandas
  • Numpy(2-3 7:46)
  • 조별 과제
  • 회고

 


 

4-6

데코레이더

함수나 메서드를 변경하지 않고 꾸며주는

->함수에 다른 함수로 감싸버린다. 원래함수에 새로운 기능을 덧 붙여준다.

def decorator_function(original_function):
    def wrapper_function(*args, **kwargs):
        print("추가 기능 실행 전")
        result = original_function(*args, **kwargs)
        print("추가 기능 실행 후")
        return result
    return wrapper_function

작성 후

@decorator_function
def display():
    print('원래 함수') 

decorator_function은 @를 앞에 붙이면 자동으로 사용 된다.

그리고

display()를 호출하면 wrapper_function이 호출 되고 wrapper_function 내부에서 original_function을 호출하기 때문에 앞 뒤로 기능을 추가 할 수있게 되는거다. (시간 로그남기기 등에 코드의 재용성이 좋다)

중복 되는 코드는 제거 된다. => 이해가 안됨(저 코드에서 수를 넣게 하고 싶으면 어떻게 써야하지?)

 

1) 데코레이터 체이닝

여러 데코레이터를 하나의 함수로 적용 시킬 수 있다. (안쪽(원래 함수에 가까운 순서)에서 바깥으로 적용 된다.)

 

2)컨텍스트 매니저

with구문

특정 자원 사용 시 자원을 얻는 것 과 정리를 자동으로 해주는 매커니즘

(파일을 닫지 않거나 할당 받은 자원을 돌려주지 않는다면 정상적인 활동을 하지 않아 파일이 잠기거나 누수가 발생하는데  이를 해결하는 구문)

with open("test.txt", "w") as f:
    f.write("test")

작성 후

f.write("tetest")

를 쓰게 되면 파일이 자동으로 닫힌 상태라서 에러가 뜨게 된다.

 

 


 

5-1

Django

 1) 라이브러리

모듈이나 함수의 집합이다.

개발자가 필요에 따라 호출해서 사용하는 경우를 말한다.

(비유: 라이브러리는 도구상자이다.)

 

2) 프레임워크

이미 기본구조가 짜여져있어 일정 방식에 따라 코드를 작성해야한다.

미리 다른 개발자가 정리한 코드나 미리 제공된 코드들을 결합해서 동작하는 방식 

프레임 워크가 전체흐름을 제어하게 된다 -> 제어의 역전 현상 발생(개발자는 요구하는 것만 코드 작성 하게 되는)

(유지 보수, 많은 기능 제공을 의미), (비유: 프레임 워크는 설계도이다.)

 

3)Django

웹프레임 워크라서 웹에 백엔드 기능을 만들 때 편한다 (데이터베이스도 가능, 작성코드 서빙도 가능)

("batteries-included"= 웹을 만들때 필요한 기능을 모두 가지고있다.)

 

주요 구성요소

1. 모델: 데이터베이스 구조를 정의하고, 데이터와 상호작용하는 역할을 합니다.

2. 뷰: 사용자가 보는 화면을 담당하며, 모델에서 가져온 데이터를 사용해 템플릿에 전달합니다.

(사용자의 요청에 대한 답을 준비해준다.)

3. 템플릿: HTML을 생성하는 역할을 하며, 뷰에서 전달받은 데이터를 표시합니다. (웹페이지의 디자인)

4. URL 컨피그: URL과 뷰를 연결하는 역할을 하며, 사용자가 특정 URL로 접근할 때 어떤 뷰를 호출할지를 결정합니다.

(사용자가 입력한 주소와 본인의 페이지 주소 매칭)

 

동작흐름

URL 요청 => 뷰(view) 호출 => 데이터 처리 및 템플릿 렌더링=> HTML 응답

 


5-2

Django의 핵심개념

MVT(Model-View-Template)

모델(데이터 관련)

모델을 사용하여 데이터를 저장, 조회, 수정, 삭제하는 작업을 수행할 수 있습니다.

ORM(Object-Relational Mapping) = sql이 할수있는 동작을 파이썬 코드로 할 수 있게한다.

뷰(내용과 관련)

비즈니스 로직데이터 처리를 담당하며, 사용자 요청에 따라 어떤 데이터를 보여줄지 결정

템플릿(실제로 보여줌)

템플릿 언어를 사용해 동적 콘텐츠를 렌더링할 수 있습니다.

 

데이터 작업 => 처리 => 사용자에게 보여주기

URL을 요청 => 뷰(View) 연결 및 호출 => 데이터 조회 및 처리 => 템플릿 생성 => HTML응답변환 => 데이터 처리 및 조회

 


 

파이썬라이브러리

1-1

Pandas소개

판다스(Pandas)는 Python에서 데이터를 쉽게 다룰 수 있게 해주는 데이터 분석 라이브러리

데이터 처리, 분석, 처리시 수학적 기능을 약간씩 자동

기본: 데이터를 표형식으로 만들어준다.

pandas의 활용 분야 = 데이터 처리가 필요한 모든 분야

 


1-2

jupyetr notebook 설정하기

 

1) 가상환경 설정

conda create --name myenv(이름)

가상환경을 설정해야지 다른 패키지들과 충돌을 막을 수 있다.

 

2) 가상환경 활성화, 비활성화

conda activate myenv

conda deactivate

 

3) 판다스 설치

conda install pandas

 

4) 쥬피터 노트북 설치, 실행

pip install jupyter

jupyter notebook

 

5) 가상환경 쥬피터에서 연결하기

pip install ipykernel

 

6) 가상환경을 Jupyter Notebook에 추가하기

python -m ipykernel install --user --name myenv --display-name "My Env"

 

이렇게 진행하면 쥬피터 노트북에서 가상환경을선택 가능해집니다.

 

※기능

conda evn list 환경 목록 검색

conda list 현재 설치 된 패키지 목록 검색

 

※판다스 넘파이 기능 가져오기

import pandas as pd

import numpy as np

(pd=pandas, np=numpy)

 

※다양한 기능

-Shift+tap 함수의 설명 다양한 기능의 문서 확인

-에러 발생 지점 전까지는 작동하기 때문에 에러 지점을 찾을 때 참고

 

※명령어 찾아보기

주말에 찾아서 정리 예정

 

 


 

 

1-3

판다스의 기본!

 

1) 시리즈란? 

  • 시리즈(Series)는 1차원 배열과 같은 데이터 구조입니다.
  • 엑셀의 한 열(column)을 떠올리면 이해가 쉬워요!
  • 인덱스(Index)와 데이터 값(Value)이 쌍으로 구성됩니다

import pandas as pd

판다스를 가져온다.

# 예시: 시리즈 생성
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

시리즈의 값을 1차원의 형태(리스트 형태)로 넣어준다.

 

2) 데이터 프레임 이해하기

  • 데이터 프레임(DataFrame)은 2차원의 표 형태 데이터 구조입니다.

데이터 프레임 생성

data = { '이름': ['철수', '영희', '민수'], '나이': [25, 30, 35], '직업': ['학생', '회사원', '프리랜서'] }

 

df = pd.DataFrame(data)

 

df실행하면 표가 만들어진다.

 

컬럼 명으로 접근하기

df['이름'][0]

이름이라는 컬럼으로 접근하고 [0]으로 첫 번째 데이터만 뽑아 올 수 있다.

 

3) index

  • 시리즈나 데이터프레임에 각 값을 고유하게 식별해주는 레이블
  • 필요에따라 사용자가 설정 가능

df.set_index('이름', '나이', '직업')

set_index = 원하는 column들을 리스트 내에 순서대로 넣을수 있다.

 

df.set_index('이름', inplace = True)

inplace = True = 기존 데이터 프레임에 변경된 데이터 프레임을 덮어 씌어 버린다.

 

tip. 데이터 타입을 확인 할 때

     1개의column만 확인하면 시리즈가 나오고

     여러개면 데이터 폼으로 나오거나 numpy.int 등 다르게 나온다.

 


 

2-1

Numpy란?

과학계산 수학계산에 강력한 성능을 제공하는 파이썬 라이브러리이다.

 

import numpy as np

넘파이를 가져온다.

 

arr = np.array([1,2,3,4,5])

array의 배열을 만든다.

 

1) 배열의 연산

복합 대입 연산자: 원래 메로리 위치에서 값을 직접 수정하려고하고 일일이 나눠주는건 새로운 배열을 생성하고

그걸 다시 넣어준다. (적용형태나 내부적인 동작원리에 따라 에러가 발생할 수 있다.)

ex.1)

sample_list = [1,2,3,4,5]

 

for i, v in enumerate(sample_list):
    sample_list[i] = v + 10

 

sample_list #[11,12,13,14,15]

ex.2)

arr += 10

 

arr  #array([11,12,13,14,15])

 

ec.3)

arr /= 2 #error

 

arr = arr / 2   #array([5.5, 6.0, 6.5, 7.0, 7.5])

tip. 복합대입연산자가 안되더라도 일반 연산은 가능할 수 있다.

tip. 복합대입연산자는 메모리 자체에 변경을 가하려 하는데 데이터타입이 맞지않는 경우 문제가 생길 수 있다.

=>데이터 타입을 바꾸는 연산을 진행하는 경우 계산을 한 후에 다시 변수에 집어 주는 형태로 값을 내야한다.

tip. 데이터 타입은 작아지는 형태로 자동변환 되지 않는다. ex) 실수에서 정수로는 바뀌지 않는다.

 

2) 데이터 형태 바꾸기

reshape

넘파이 배열 차원 변경 함수

a.reshape(변환 shape) 혹은 np.reshape(a, 변환 shape)

arr = np.array([1,2,3,4,5,6])

arr_2 = arr.reshape((1, 6)) #차원의 개수는 데이터와 맞아야한다.

데이터 타입을 1차원과 6차원을 갖는 2차원 데이터으로 변환 된거다.

1차원, 2차원의 정의 는 뭐지?

[1,2,3,4,5,6,7,8,9] = 1차원 (1차원은 리스트의 형태라고 생각하면 되는건가?)

[[1,2,3,4],[5,6,7,8]] 이랑 [ [1,2,3],[4,5,6],[7,8,9] ] = 2차원 (띄워쓰기는 알아보기 쉽게 하려고 넣음)

2차원에서 값이 (3, 3)으로 나온다면 3개의 행, 3개의 열이 존재한다고 본다.

[ [ [1, 2], [3, 4] ], [ [5, 6], [7, 8] ] ] = 3차원 (띄워쓰기는 알아보기 쉽게 하려고 넣음)

=>대괄호 안에 어떻게 들어가있는지가 중요해 보이고 

3차원은 어떻게 나타내는거지?

(나타낸다고 하는게 맞나? 2차원은 행과 열이 있어서 표라고 생각하면 쉬운데 3차원은 모르겟다.)

 

arr_2 = arr.reshape((1, 6))

을 조금 더 2차원적인 부분을 확인 한다고 하셨는데 2차원 적이다라는 말이 뭐지?

arr_3 = arr.reshape((2, 3))  #확인을 위해 쓴 코드

 

1, 6과 2, 3을 넣은 이유가 뭐지?

 

 

 


 

 

2-2

numpy 배열 생성하기

1) shape

배열의 형상을 튜플의 형태로 나오게한다.

 

import numpy as np

arr = np.array([1,2,3,4,5])

arr_1 = np.array(1)

arr_1  #array(1) 스칼라, 차원이없는 배열, 단일값 배열 이라 부른다.

arr_1.shape() #() 아무것도 없는 값이 나온다.

 

2) arr.ndim

몇차원인지 확인 시켜준다.

 

3) arr.size

전체 요소의 개수를 확인시켜준다.

 

4) arr.dtype

어레이의 데이터 타입 확인

 

5) arr.nbytes

메모리 크기 확인

 

6) arr.T

    arr.transpose()

- T메소드는 배열의 shape을 역방향으로 바꾸는 것만 할 수

- 배열의 전치를 원하는 방향으로 (transpose 메소드) 

transpose는 예제를 보아도 이해가 어렵고 강의에서도 이런게 있다정도로 넘어가라 했으니 이정도만 하자

 

7) arr_2.ravel()

데이터차원이 몇개든지 1차원으로 바꾼다.

 

8) arr_2.Flaten()

플래튼 = 차원을 평탄화 해주는데 원래 값은 건드리지 않음 

 

9) arr.sum()

더하기 함수랑 같음

arr.sum(axis=0) 축을 지정(열 기준)

arr.sum(axis=1) 축을 지정(행 기준) 

 

10) arr.mean()

평균을 계산한다.

 

11)arr.max()

최댓값 구한다.

 

12) arr.zeros(2,3)

      0으로 채워진 2행3열

      arr.ones(2,3)

     1로 채워진 2행3열

      arr.full((2,3),7)나 arr.full((arr_1.shape), 7)

      7로 채워진 2행 3열 / arr_1형태에 7로채워진 배열

 

13) np.arange(10)

    연속적인 수로 (0부터 9까지) 채워진 배열 tip.10은 안채워짐

 

배열을 만드는 이유는 각종 수학 연산을 쉽게하기 위해서다.

 

★dir()

해당 객체가 가지고있는 매서드와 어트리뷰트를 확인가능!!!!!

 

 

 


2-3

배열연산 및 브로드 캐스팅

 

1) 브로드캐스팅

배열의 크기가 다른 연산을 가능하게 만들어준다.

전부 가능한건 아님

=> 규칙: 두배열의 차원이 같다, 작은 배열의 차원이 1이여야한다,

               배열의 각 차원에서 크기가 동일하다, 한 배열에서 해당 차원의 크기가 1이여야한다.

ex)

arr3 = np.array([[1,2,3],[4,5,6]])

arr4 = np.array([10,11,12])

arr3 + arr4

array([[11, 13, 15],
       [14, 16, 18]])

 

여기서 한배열의 차원의 크기가 1이다라는건 이해가는데 각 배열의 차원에서 크기가 동일하다는 이해가 안감 

 

 

2) 함수를 이용해서도 연산이 가능하다.

ex)

np.add(arr1, arr2) 

#array([5,6,7,8])

 

3) out = result(result는 결과를 받을 이름)

결과를 저장할 수 있다.

np.add(arr1,arr2, out = result)

result # array([5,6,7,8])

 


 

조별mission

1조 변수 타입힌트

2조 리스트 버블sort, selection sort, insertion sort, binary insertion sort, heap sort, tim sort

3조 튜플 리스트 보단 덜 사용 된다. 변화면 안되는 값이 변해 오류가 낫을때 사용
4조 딕셔너리 효율적인 검색 성능(키값이 벨류의 주소 역할), dict()는 딕셔너리 생성 함수, 딕셔너리 메서드 keys(), valnues(), items(), pop(), get() (공부)

5조 set union(), 대칭차집합, set은 정렬이 되지않아 사용 후에 정리 필요(공부)

6조 연산자 연산자가 어떻게 어떤 순서로 쓰이는지 알아봐야할 것 같다.

7조  제어문-조건문 split(), map()

9조 함수

10조 class class는 각각 독립 된 것, class와 관련 된 '속성'(공부)

11조 객체지향 상속받을 클래스 뒤에(상속해주는 클래스) 오버라이딩 오버로딩 차이(공부)

12조 예외처리 에러정리 try, except정의 

13조 모듈과 패키지 pip 어떤 모듈이 있는지 알아보는게 좋다. 추가 나중에 쓰면 좋은 것virtualenv, pipenv, poetry

14조 파일 입출력 Decorator 설명이 너무 좋은듯 나는 아직 아무것도 모르는데 보면 좋을듯

 

 

 


 

 

회고

 

궁금했고 알아낸 것들

 

1. 데코레이터 조별과제 발표에서 발표하신 내용 찾아보고 정리해봐야겟음

중복 되는 코드는 제거 된다. => 이해가 안됨(저 코드에서 수를 넣게 하고 싶으면 어떻게 써야하지?)

 

2. pandas indexe와 시리즈 개념 다시 잡을 필요있어 보임

※명령어 찾아보기

주말에 찾아서 정리 예정

 

3. numpy 정의 자체를 모르겟어서 어려웠음

1차원, 2차원의 정의 는 뭐지?

[1,2,3,4,5,6,7,8,9] = 1차원 (1차원은 리스트의 형태라고 생각하면 되는건가?)

[[1,2,3,4],[5,6,7,8]] 이랑 [ [1,2,3],[4,5,6],[7,8,9] ] = 2차원 (띄워쓰기는 알아보기 쉽게 하려고 넣음)

2차원에서 값이 (3, 3)으로 나온다면 3개의 행, 3개의 열이 존재한다고 본다.

[ [ [1, 2], [3, 4] ], [ [5, 6], [7, 8] ] ] = 3차원 (띄워쓰기는 알아보기 쉽게 하려고 넣음)

=>대괄호 안에 어떻게 들어가있는지가 중요해 보이고 

 

3차원은 어떻게 나타내는거지?

(나타낸다고 하는게 맞나? 2차원은 행과 열이 있어서 표라고 생각하면 쉬운데 3차원은 모르겟다.)

 

arr_2 = arr.reshape((1, 6))

을 조금 더 2차원적인 부분을 확인 한다고 하셨는데 2차원 적이다라는 말이 뭐지?

arr_3 = arr.reshape((2, 3))  #확인을 위해 쓴 코드

1, 6과 2, 3을 넣은 이유가 뭐지?

 

arr3 = np.array([[1,2,3],[4,5,6]])

arr4 = np.array([10,11,12])

arr3 + arr4

한배열의 차원의 크기가 1이다라는건 이해가는데 각 배열의 차원에서 크기가 동일하다는 이해가 안감 

 

  • 파이썬의 활용법
  • 개발자란?
  • 복습
  • 파일 다루기!
  • 이터레이터(Iterator) 제너레이터(Generator)
  • 느낀 느낌

 


 

 

파이썬의 활용법

 

 

python으로 할 수 있는 일

 

1. 시스템 유틸리티 제작 

※유틸리티란? 컴퓨터 사용에 도움을 주는 소프트웨어

 

2. GUI 프로그래밍

창을 만들고 그 창에 프로그램을 동작시킬 수 있는 메뉴나 버튼, 그림 등을 추가할 수 있다.

 

3. 웹 프로그래밍

 

4. 데이터 분석, 사물 인터넷

 

결론

무엇을 할 수 있는지 알 수 있었지만

정확하게 어떤 식으로 UI나 웹 프로그램이 구현되는 것인지가 궁금해졌다.

이 부분은 강의를 계속 듣고 실습하다 보면 자연스럽게 알게 될 것으로 생각한다.

기회가 된다면 파이썬으로 설계한 웹사이트를 구경하고 UI 버튼을 누를 때마다 파이썬으로 짠 코드가 진행되는

모습을 직접 경험해 보고 싶다.

 

 


 

 

개발자란?

 

 

위에 파이썬을 어떻게 어디에 쓰는지 궁금해서 알아보았는데 

알아보던 중 

파이썬으로 우리는 개발자가 되는 과정을 배우고있다라는 생각과 함께

개발자란 무엇인지 궁금해져 찾아 보았고 이해하기 쉽게 정리 된 글을 가져왔습니다.

 

개발자란 무엇일까? (brunch.co.kr)

 

개발자란 무엇일까?

개발자와 신호등의 차이 | 컴퓨터를 위한 신호등 "좋은 소프트웨어 개발자란 코딩, 문제 해결, 단위 테스트 작성을 능숙하게 잘하는 사람이 아니다. 좋은 소프트웨어 개발자는 자신의 경력을 관

brunch.co.kr

 

 

개발자는 코딩을 할 수 있고 새로운 문제를 만났을 때 해결할 수 있는 지식을 가지고있는 사람이라는 설명이있습니다.

더욱 연습해서 개발자에 가까워 지고싶습니다.

 

 


 

 

복습

 

딕셔너리: 키와 값을 데이터로 저장하는 거이다. 중괄호{}로 표현하고 콜론:으로키와 값을 구분한다.

 

셋: 중복요소를 하나로 처리한다.

변수.union(qustn2) 합집합을 나타낸다.

변수.intersection(변수2) 교집합

 

조건문

IF문: 조건식이 오고 조건식이 True면 실행 된다.

 

else문: IF문의 조건이 False일 때 실행 된다.

 

elif문: 여러개의 조건을 순차적으로 검사할 때 사용한다.

 

반복문

For문: 컬렉션의 각 요소를 순차적으로 순회하면서 코드 실행한다.

 

While문: 조건식이 True일 때 반복해서 코드 블록을 실행한다.

(조건이 False일 때 종료된다.)

 

breake문: 반복문을 즉시 종료시킨다.

 

continue문: 현재 반복을 건너뛰고 다음 반복을 이어간다.

 

range함수: 특정 숫자 시퀸스를 생성한다.

for i in range(시작, 종료, 단계):

실행할 코드

for i in range(끝나는 자리)

실행할 코드

 

들여쓰기오류 코드  IndentationError

 

sorted함수: 리스트 요소들을 정렬한다.

sort()와 sorted()차이

sort()는 원본 자체를 변환 시킨다.

sorted()는 원본은 변경하지 않고 정렬 된 경우를 보여준다.

 

round함수: 숫자를 지정한 자리까지 반올림한다.

round(변수, 소수점 자리)

 

매개변수: 함수를 호추할 때 사용하는 괄호 내부의 여러가지 자료를 말한다.

 

가변 매개변수: 함수에 전달하는 인자의 수를 유연하게 조절한다.

tip. *args로 사용하고 튜플로 처리 된다.

 

기본 매개변수: 함수를 정의할 때 기본값을 설정하는 매개변수

(인자가 잘 전달 되지 않으면 기본 매개변수가 기본값으로 사용된다.)

 

키워드 매개변수: 함수를 호출할 때 매개변수의 이름과 함께 값을 전달한다.

(매개변수의 순서에 구애받지 않고 인자전달 가능)

 

greet(name): 주어진 이름에 대한 인사를 출력하는 함수

 

calculate(a,b,c): 세개의 매개변수를 받아 계산하는 함수

 

add(a,b): 두 수를 더해서 결과를 반환하는 함수

 

add(*args): 주어진 모든 수를 더하는 함수

 

def process_data(*args): 매개변수로 받은 값들을 튜플로 처리하는 함수

 

square함수: 입력값의 제곱을 계산한다.

 

return: 함수가 작업을 완료한 후 호출된 위치로 돌려준다.

 

import키워드: 다른 파일에 있는 모듈을 불러와 사용 가능하다.

 

from키워드: 모듈에서 특정 항목만 불러오기

(from 모듈이름 import  항목이름)

 

사용자 정의 모듈

(사용할 모듈 만들기)

ex)

def greet(name):
    return f"안녕하세요, {name}님!"

(내가 사용할 모듈 불러오기)

ex)

import my_module

message = my_module.greet("Alice")
print(message)  # 안녕하세요, Alice님!

 

패키지: 모듈의 모음 __init__.py 파일이 있어야 한다.

ex)

mypackage/
    __init__.py
    module1.py
    module2.py

 


 

 

파일 다루기!

 

1)  파일 열기

file = open(파일이름, 모드)

file = open("example.txt", "r")

저는 파일을 찾을 수 없는 FileNotFoundError 구문이 나와서 튜터님의 도움으로

file = open('C:\\Users\\USER\\Desktop\\이게맞나.txt', 'r')

으로 파일 열기를 했습니다.

 

2) 파일 모드

'r': 읽기 모드(기본값). 파일이 존재하지 않으면 오류가 발생합니다.

'w': 쓰기 모드. 파일이 존재하지 않으면 새로 만들고, 파일이 존재하면 내용을 덮어씁니다.

'a': 추가 모드. 파일 끝에 데이터를 추가합니다.

'b': 바이너리 모드. 이진 파일을 읽거나 쓸 때 사용하며, 다른 모드와 함께 사용됩니다.

('rb', 'wb')

 

3) 파일 닫기

file.close()

 

4) 파일 자동으로 닫기

with open('C:\\Users\\USER\\Desktop\\이게맞나.txt', 'r')

 

5) 파일 읽기

file.read() 파일 내용 전체읽기file.readline() 파일 한줄씩 읽기file.readlines() 파일의 모든 줄을 리스트 형태로 일기file.seek(0) 읽은 위치를 처을으로 되돌린다.

 

6) 파일쓰기

file = open('C:\\Users\\USER\\Desktop\\이게맞나.txt', 'w')

파일쓰기가 작동 되지않아 검색을 통해

open('C:\\Users\\USER\\Desktop\\이게맞나.txt', 'w', encording = 'UFT-8')

encording = 'UFT-8'을 추가해 쓰기를 작동할 수 있었다.

 

file.write("이것도 써지나")  #7  파일에 글을 넣을 수 있다

tip. 덮어써지는 형식으로 원본이 사라지게 된다.(주의필요!!)

tip. flie.close()를 해야지 적용이 된다.

 

file.writelines() 리스트에 담긴 여러줄을 한꺼번에 쓴다.

ex)

lines = ["첫 번째 줄\\n", "두 번째 줄\\n", "세 번째 줄\\n"]

with open('C:\\Users\\USER\\Desktop\\이게맞나.txt', 'w', encording = 'UFT-8') as file:
    file.writelines(lines)

줄 나누기 언어 = \\n 

 

7) 파일 추가

with open('C:\\Us ers\\USER\\Desktop\\이게맞나.txt', 'a') as file:

    file.write("이 내용은 기존 파일의 끝에 추가됩니다.")

 


 

 

이터레이터(Iterator)

반복 가능한 객체의 요소를 하나씩 꺼내오는 객체다.

__iner__() : 이터레이터 객체 자신을 반환하는 메서드

__next__() : 이터레이터의 다음 요소를 반환하는 메서드

stopIteration : 더이상 반환할 요소가 없을 경우 예외를 발생시킨다.

 

반복 가능한 객체(Iterable)

for 루프에서 반복할 수 있으며

내부적으로는 __iter__() 메서드를 통해 이터레이터를 반환한다.

 

제너레이터(Generator)

이터레이터를 생성하는 특별한 함수

yield 키워드를 사용해 값을 하나씩 반환한다.

(한번에 메모리에 올리지 않고 필요 시 값을 생성한다.)

yield가 호출될 때 마다 함수의 상태가 유지 되며 다음 호출에도 그 상태로 실행한다.

next() 함수를 사용해 제너레이트 값을 하나씩 가져온다.

 


회의

오늘 오전 회의에서 팀원들에게 어제 공부한 부분에서 궁금한 것을 물어보았다. 

 

그것은 바로sorted()함수이다.

 

해답을 듣고 느낀 생각은 내가 너무 근본적이지만

실사용에서는 크게 영향을 끼치지 않는 부분을 고민하고 있다고 생각이 들었다.

 

오후 회의에서는 금요일에 있을 파이썬에 대한 발표를 맏게 되었다.

 

사다리타기로 뽑혔지만 내일 쉬는 만큼 더 열심히 준비해야할 것 같다.

 

공부

이때까지 진도 나가는게 너무 느려서 내가 파이썬을 모르고 개발 언어 등을 잘 모르기 때문인가

생각했지만 근본적으로 파이썬이라는 것 자체를 모르기 때문이라는 생각이 들었다.

 

내가 왜, 무엇을 하기 위해 파이썬을 공부하는지 알아보는 시간을 가진 뒤

한결 가벼운 마음으로 복습을 구석구석 확실하게 

어떤 구문은 어떻게 작성하고 기본문법인지 아닌지 등 

파이썬을 알던 사람들은 이런걸 왜 궁금해하지 하는 부분까지 확실하게 복습을 진행하였다.

 

그리고 얼마 남지 않은 시간에 진도를 나갓고 저녁을 먹고 회의가 끝나 다시 진도를 나가려는데

 

.............

 

내가 복습하면서 적고 진도 나가면서 적은 필기들을 저장하지 않았고 블로그에 쓰고있었기 때문에 노트북이 절전 모드로

바뀌어서 인터넥이 잠깐 끊겨 전부 날라가 버렸다.

 

멘탈이 조금 흔들렸지만 다시 검색기록을 뒤져가며 중요하게 생각했던 부분들을 다시 적어 나갓다.

 

복습한 부분은 마음에 들지 않지만 그래도 복습만 2번한 것 같아 다시 적을때 더욱 많은 것을 알게 된 것 같아 그나마 나았다.

 

내일 공휴일인 만큼 진도를 나가고 발표준비를 해야겟다.

목차

  • 파이썬 설치(VSCODE)
  • 연산자
  • 데이터 타입
  • 컬렉션
  • 데이터 타입 변환
  • 제어문과 반복문

  

  • 파이썬 설치

VSCODE-공식 사이트 Visual Studio Code - Code Editing. Redefined

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

- VSCODE공식 사이트에 접속하여 OS환경에 맞게 설치 

- 파이썬 확장을 설치합니다!(Extensions)을 클릭 후 python검색하고 설치

- 파이썬 홈페이지로가서 파이썬을 설치 (PATH 클릭 필수!!!)

Download Python | Python.org

 

Download Python

The official home of the Python Programming Language

www.python.org

 


  • 연산자

1) 산술연산자

+ 더하기

- 뺴기

* 곱하기

/ 나누기

% 나머지

** 거듭제곱(몇에몇승)

//

tip. 나머지(%)를 구할 때 2로 나누었을 때 0이나오면 짝수 1이 나오면 홀수

 

2) 비교연산자

== 값이 같음

!= 값이 다름

>

< 작음

>=크거나 같음

<= 작거나 같음

 

3) 논리연산자 

and 두 조건 모두 참

or 두 조건 중 하나라도 참

not 논리값을 반대로 뒤집음

 

4) 대입연산자

= 값 할당

+= 더한 후 할당

-= 뺀 후 할당

*= 곱한 후 할당

/= 나눈 후 할당

%= 나머지를 구한 후 할당

**= 거듭제곱한 후 할당

//= 몫을 구한 후 할당

 

5) 비트연산자 (2진수 수준에서 계산)

& 비트and

| (엔터 위) 비트or

^ 비트xor

~ 비트 not(보수)

<< 왼쪽 시프트

>> 오른쪽 시프트

 

6) 멤버십 연산자

in 포함 되어있는지

not in 포함 되어있지 않은지

 

7) 식별 연산자

is 두 변수가 동일 객체인지 확인

is not 두 변수가 동일하지 않은 객체인지 확인

 


  • 데이터 타입

1) 숫자형

정수: 소수점없이 정수를 나타냄 a = 10

실수: 소수점을 포함한 숫자를 나타냄 x = 2.14

복소수형(실제로는 잘 안씀)

tip. 더하기 연산은 정수 실수 문자열 끼리는 가능하지만 정수와 문자열의 등장은 불가능

 

2) 문자열 (‘’, “”로 표현 할 수 있다, =*을 사용해 연산가능)

name = “장한검

name_2 = “Alice”

name_3 = “”“장 

한검”“”      (줄바꿀 때 사용)

name = ‘한검’ (글 사이에 따옴표 사용)

 

3) 인덱싱과 슬라이싱

text = “python”

인덱싱 print(text[0]) => p 특정 텍스트를 뽑아냄  tip. 0이 시작 숫자

슬라이싱 print(text[1:4]) => yth 구역설정하여 특정 텍스트를 뽑아냄 

 

4) 불리언 타입

참 거짓을 나타내는 데이터 타입 tip. and, or not 등 연산 사용가능

A = true

B = False

트루 값은 1로 거짓은 0으로 표현 되어 A = B 하면 1로 나온다.


  • 컬렉션

1) List 

여러개의 항목을 저장할 수 있는 가변운 자료형(저장 못하는 자료도 있음)

리스트는 []로 표현 ,로 구분

ex) fruits = ["apple", "banana", "cherry"]

- 접근 print(fruits[0]) # apple tip. print(fruits[-1])을 하면 가장 뒤에 값이 나온다

- 변경 fruits[1] = "blueberry"

- 추가 fruits.append("orange")

- 제거 fruits.remove("blueberry")

- 길이 학인 print(len(fruits))

- 정렬 fruits.sort()

 

2) 튜플

튜플은 리스트와 유사하지만, 한 번 생성되면 수정할 수 없는 불변 자료이며 소괄호()로 표현됩니다.

ex) coordinates = (10, 20)

 

3) 딕셔너리

딕셔너리는 키-값 쌍(Key-Value Pair)으로 데이터를 저장하는 자료형입니다.

딕셔너리는 중괄호{}로 표현되며, 키와 값은 콜론:으로 구분됩니다.

ex) person = { "name": "Alice", "age": 25, "city": "New York" }

print(person["name"]) # Alice

- 변경

person["age"] = 26

print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York'}

- 추가

person["email"] = "alice@example.com"

print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York', 'email': 'alice@example.com'}

- 제거( del )

del person["city"]

print(person) # {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}

- 접근( .keys(), .values() )

print(person.keys()) # dict_keys(['name', 'age', 'email'])

print(person.values()) # dict_values(['Alice', 26, 'alice@example.com'])

 

4) 셋

셋은 중복되지 않는 요소들의 집합을 나타냅니다.

셋은 중괄호{}로 표현되며, 순서가 없고, 중복을 허용하지 않습니다.

추가 .add()

제거 .remove()

집합 연산

합집합

.union()

교집합

.intersection()


  • 데이터 타입 변환

1) 명시적 타입 변환

.int() 정수형

.float() 소수형

str() 문자형

bool() 불리언 (참과 거짓으로 값은 내는 것)

list() 문자열을 리스트로 변환

tuple() 리스트를 튜플로 변환

set() 리스트를 셋으로 변환 (중복제거)

tip. 불리언에서 0과 “”(빈문자열)은 false로 나온다.

 

2) 암시적 타입 변환

자동으로 변환 되는 것을 말한다.


  • 제어문과 반복문

제어문 중 조건문

 

1) IF문 tip. 들여쓰기 할 곳에 :(콜론)필요 / 들여쓰기 ctrl+[

 IF 뒤에는 조건식이 오고, 조건식이 참(True)이면 해당 코드 블록이 실행된다.

IF로 조건을 걸고 조건이 아닐때는 else 결과 갑을 설정 할 수 있다.

 

2) ELIF

여러 개의 조건을 순차적으로 검사할 때 사용

tip. 순차적으로 검사하기 때문에 조건의 순서를 잘 설정해야한다. 

 

3) 중첩 조건문

tip. 들여쓰기 신경써야함

if 조건식1:

     if 조건식2:

         실행할 코드1

    else:

         실행할 코드2

else:

    실행할 코드3

 

tip. .lower() = 입력한 값을 소문자로 바꿔주는 것

 

반복문

 

1) for문

컬렉션(collection)의 각 요소를 순차적으로 순회하면서 코드 블록을 실행

 

2) while

조건식이 참인 동안 반복해서 코드 블록을 실행하고 조건식이 거짓이 되면 반복문이 종료됩니다.

tip. 거짓인 조건문이 없으면 무한이 반복한다.

 

3) breake문

특정 조건이 만족되면 반복문을 즉시 종료시킨다.

ex) for i in range(1, 11):

            if i == 5:

                 break

           print(i)

 

4) continue문

현재 반복을 건너뛰고, 다음 반복을 이어간다.

ex) for i in range(1, 6):

             if i % 2 == 0:

                 continue

            print(i)

 

5) rang함수

특정 범위의 숫자 시퀀스를 생성한다.

ex) for i in range(시작, 종료, 단계):

         실행할 코드

tip. 단계는 2를 쓰면 2씩 증가 하게 만들 수 있다.

tip. (시작, 종료, 단계)에서 생략하고 1개만 사용할 수 있다. (이해X 복습 필요)

 

6) 중첩 반복문

2차원 데이터(예: 행렬)를 처리하거나, 복잡한 반복 작업을 수행할 때 유용하다.

ex) for i in range(1, 4):
            for j in range(1, 4):
                 print(f"i={i}, j={j}")


OT와 팀 회의

오늘은 본캠프가 시작해서 OT를 듣고 조가 편성 되어 ZEP에서 모여 회의도 나누고 공부도 하였다.

 

획실히 본캠프가 시작 되니 내용이 너무 어려웠고(OT때 부터 모르는 단어가 너무 많았다)

직접 만나는 것이 아닌 인터넷에서 캠을키고 회의를 하는 것은 어색하여

낯가림이 크게 없는데도 용기를 내지 못하였고 먼저 말도 걸어주셨지만 친해지지 못한것같아 아쉬웠다.

 

공부

사전 캠프에서 SQL강의를 먼저 들으면서 했던 생각은 와! 쉽고 재미가있다. 반복해서 익숙해지면 금방하겟는걸~~

 

..........하지만 

 

과제와 연관 되어 새롭게 듣게 된 강의 PYTHON은 설치부터 1시간이 넘게 걸려 점심시간 까지 소비하였고

그 수업의 내용은 본 적이 없는 것들로 가득했다.

 

그래도 겁먹지말고 하자라는 생각으로 강의를 틀고 듣기 시작하고 1시간을 넘기고 2시간을 넘기고

한주차에 평균 1시간 20분정도 되는 강의를 3시간은 넘게 경청하였다.

 

필기하다 못들어서 뒤로가고, 이해 안되어서 뒤로가고... 무한반복;;

 

결국 오후 5시쯤 머리 속이 멍해져 버렸고 속도는 더 느려졌다.

 

그래도 저녁시간에 쉬고 팀회의를 진행하고 나서 다시 강의를 들으니 이해가 안되던 내용들이 이해가 되어 다행이였다.

(팩트는 아직 이해 안가는 부분이 많지만 그게 너무 많아 기억도 안난다는거임ㅋㅋ)

새롭게 알게 된

- select 컬럼 별명  = 컬럼 별명 붙이기

 

- group by 컬럼1, 컬럼2 = 카테고리별 숫자연산

 

-order by = 범주별 정렬

1) order by  함수(계산 할 컬럼) desc  기본 (오름차순) desc (내림차순) 

ex) select restaurant_name,

               max(price) max_price

      from food_orders

      group by restaurant_name

      order by max(price) DESC

 

2) order by gender, name => 여성의 성'ㄱ'씨 부터 성'ㅎ'씨 까지 나온 뒤 남성 순으로 정렬

ex) SELECT *

      FROM customers

      order by gender, name

 

-REPLACE(컬럼, A, B) = 컬럼의 이름이 A에서B로 바뀌었을 때

ex) select name,

      replace(name, 'A', 'B') "newname"

      from table

      where name like '%A%'

 

-SUBSTR(컬럼, 시작위치, 글자수) = 특정 문자를 뽑아주는(글의 끝까지 뽑을 땐 글자수 생략 가능)

 

-CONCAT(붙이고 싶은 값1, 붙이고 싶은 값2,....) = 원하는 데이터를 붙여줌

ex) 컬럼1의 데이터 (티스토리) / 컬럼2의 데이터(블로그)

      concat('[', substr(컬럼1, 1, 2), ']', 컬럼2) => [티스]블로그

 

-IF(조건, 조건을 충족 할 때 값, 아닐 때 값) = 조건을 걸고 맞을 때 아닌 때 값을 설정

tip. IF 안에 함수가 포함 될 수 있다.

    ex) IF(컬럼 like'%asd%', replace(컬럼, A, B), 컬럼)

    => 컬럼에 asd가 들어간 데이터는 A를 B로 바꾸고 아닌 데이터들은 그대로 사용

 

-case when = 조건을 여러가지 달아야할 때

ex) select case when 조건 then '결과'

                         when 조건2 then '결과2'

                else '결과3' end

case = 조건 시작, when = 조건시작, then = 결과값, else = 조건에 들어 가지 않을때, end = 조건 끝

 

-데이터 타입 변경은 강의에서 잠깐 설명하였는데 이해X

 

 

새롭게 알게 된

 

-CREATE DATEBASE table( coulmn1, coulmn2, ....);

 

- SELECT table FROM coulmn

 

- SELECT  DISTINCT(중복방지) table FROM column

 

-WHERE = 조건에 맞는 수 (~이상~미만인 수, ~와 ~사이 수, ~보다 작은 수 등)

 

-ORDER = 정렬

 

-LIMIT = 수 제한

 

-INSERT INTO

 

-UPDATE

 

-DELETE

 

-기본키 외래키 정의(해석과 예시는 이해X)

 

-집계함수 중 AVG(평균)

 

-조건문(단어만 기억나는 이유가 배울 때에도 이해가 어려웠던 것)

+ Recent posts