AI SCHOOL/TIL

[TIL] 멋사 AI SCOOL DAY 5 - 프로그래밍 개요, 변수 선언, 데이터 타입

moru_xz 2023. 1. 2. 16:07

멋사 AI SCOOL 5일차

: Python 기초

 

* Keywords

#프로그래밍_개요

#Python

#list #tuple #dict #set

#del

 

* Retrospective

😍 Liked

: 프로그래밍 개요 부분은 이전에도 궁금했던 것인데 마땅히 배울만한 곳이 없어서 아쉬웠다. 그런데 이번 강의를 통해 배울 수 있어서 좋았음

예전에 들었던 강의의 강사님이었음 


📚 Learned

: 프로그래밍 개요

파이썬 다시 훑어보기 (문자열 포맷팅)

PEP


💦 Lacked

: 새롭게 배웠다기 보다는 이미 알던 것을 다시 훑어 본 느낌이라 강의가 루즈했음. 물론 내 탓임. 하지만 하루가 다르게 빨리 진도 나갈 것을 알기 때문에 시간 있을 때 복습하고 배울 것들 미리 보는 게 좋음


🙏 Longed for

: 아는 내용이라도 집중해서 공부하기 


* Today I Learned

What is Programing?

- Computer(컴퓨터는 계산을 수행하는 기계)

- Computer Structure(중앙저리장치(CPU), 주기억장치(RAM), 보조기억장치(SSD))

- OS(중앙처리장치, 주기억장치, 보조기억장치를 컨트롤 하는 소프트웨어)

- Programing(OS에서 CPU, RAM, SSD를 사용하여 컴퓨터에게 연산 과제를  수행하게 하는 절차 및 방법, 컴퓨터와 의사소통의 수단, App을 만드는 방법)

 

1) Run Excel

- excl 실행, ssd에 있는 excel code를 RAM으로 이동 -> loading

2) Display Excel

- RAM에 excel code 저장, excel 화면에 출력

3) Calculate Numbers 

- CPU를 이용하여 연산 수행

4) Save Excel File

- RAM에 있는 데이터 SSD에 저장 

 

 

 

How programing works?

• Compiler

- code -> Binary(2진 형태로)

• 동작에 따른 언어의 종류

- 컴파일러 언어: Compiler Language: 속도 빠름, 코드 실행 전 Compile파일 필요(Build 과정 필요)

-> 번역서를 읽는 것, build라는 번역 과정이 필요 but 번역이 끝나면 읽기 빠름 JAVA, C언어 같은 

- 인터프리터 언어: Interpreter Language: 속도 느림, Compile 파일 없이 코드 실행(Build 과정 필요 없음)

-> 원서 읽을 때 한 줄 읽고 해석하고 이해하고, 번역 과정 필요 x but 번역 해가면서 읽어야 해서 속도가 느림, 파이썬 같은(문법이 쉬움)  

Features of Python

• 플랫폼에 독립적

- 어떠한 종류의 OS에서도 같은 문법을 사용 

• 인터프리터 언어

- 한줄씩 컴파일링 하면서 코드를 수행 -> 처리 속도가 느림

- Numpy가 파이썬의 느린 처리속도를 보완 -> 데이터 분석 가능

 

• 객체지향적

- 실제 세계를 모델링하여 공통적인 기능을 묶어서 개발하는 방법 -> 협업이 용이 

 

The kind of Python

• Cpython 

• Jython

• IronPython

• Pypy

 

Python Enhancement Proposals

• PEP:

- PEP 20: 파이썬 설계 원리, 파이썬 프로그래밍 언어 설계에 영향을 준 20가지 소프트웨어 원칙(언어의 철학)

- PEP 8: 파이썬 개선 제안서, 파이썬 코드를 어떻게 구상할 지 알려주는 스타일 가이드

 

Coding? Algorithm?

코끼리를 냉장고에 넣는 방법!

• Algorithm -> 생각, 절차

- 코끼리를 냉장고 앞으로 이동

- 냉장고 문을 연다

- 코끼리를 냉장고에 넣는다

- 냉장고 문을 닫는다

• Coding -> 글자로 바꾸는

- move(elephant)

- open(fridge)

- input(elephant, fridge)

- close(fridge)

 

둘다 너무 중요: 알고리즘 어떻게 생각하느냐에 따라서 실행되지 않을 수도 있음

알고리즘, 코딩 같이 하는 사람이 프로그래머

코드만 작성하는 사람은 코더 

 

Rubber Duck Debugging

디버깅 날 때 무작정 도움 요청하기 보다는 하나하나 설명하며 하다보면 오류가 난 부분을 알아챌 수 있음  

 

To be good at Programming

- 프로그래밍 언어이다

- 언어를 잘 하려면 많이 사용해봐야 함

- 프로그래밍을 잘 하려면 많이 사용해봐야 한다 -> 여러번 코드 작성

 

colab

• jupyter notebook

- cell 단위로 코드 실행하는 환경(에디터: IDE)

• mode

- 명령모드, 편집모드

• style

- 코드: python 문법 실행 / 텍스트: markdown 문법 실행 

- shift + enter : 코드 실행
- esc + a, b : 셀 생성
- ctrl + space : 자동완성

 

Python

1) 변수선언

2) 데이터 타입

3) 연산자

4) 조건문

5) 반복문

6) 함수

7) 클래스

8) 모듈, 패키지

9) 예외처리

10) 입출력 

 

1) 변수선언

- RAM 저장공간 만들어서 데이터 저장하는 문법 

- 식별자: 저장공간 구별해주는 문자열 

  - 문법 : 틀리면 에러발행 > 코드실행 X

      - 대소문자, 숫자, _ 사용가능

      - 가장 앞에 숫자 X : data_1(O), 1_data(X)

      - 명령어(예약어) 사용 X : def, if, for(X) print(O)

  - 컨벤션 : 틀려도 코드실행 O > 보기에 안좋음 : PEP8

      - 변수 : jupyter_notebook : snake_case

      - 상수 : 대문자로 작성 : JUPYTER_NOTEBOOL

# 식별자 1개, 데이터 1개
data1 = 1
# 식별자 n개, 데이터 n개
data2, data3 = 2, 3
# 식별자 n개, 데이터 1개
data4 = data5 = 4

%whos 
#매직(스페셜)커멘드: %, %% 문법 
# %: 커멘드 한 줄 단위, %%: 셀 단위 
#ls, %reset, %%time, %%writefile ...

Quiz1

# RAM을 표현하는 그림대로 변수를 선언하고, 데이터를 출력
goal1 = 30
goal2 = 30
player1 = 'son'
player2 = 'messi'
print(player1, goal1, player2, goal2)
son 30 messi 30

2) 데이터 타입

RAM를 효율적으로 사용하는 문법

- 기본 데이터타입

  - int, float, bool, str

- 컬렉션 데이터타입 : 식별자 1, 데이터 n

  - list, tuple, dict, set

  - CRUD : create, read, update, delete

 

• list : [] : 순서가 있고, 수정이 가능
data1 = [1, 2, 3, 'A', 'B']

- 데이터 선택: masking 

data[] : [idx], [key], [start:end], [start:end:stride]

- 음수도 사용 가능 -> 음수는 뒤에서 부터 

- str도 사용 가능 

 

• tuple : () : 순서가 있고, 수정이 불가능
data2 = (1, 2, 3, 'A', 'B')
- tuple 사용하는 이유: 같은 데이터 가지고 있으면 tuple이 list보다 저장공간 적게 사용

import sys
sys.getsizeof(d1), sys.getsizeof(d2)

sys.getsizeof() -> 저장공간 얼마나 사용하는지 알 수 있음 

 


• dict : {} : 순서가 없고, 수정이 가능, 순서값 > 키값
data3 = {'one': 1, 2: 'two'}

- 데이터 삭제 : del 데이터 선택


• set : set() :  집합 데이터 표현 : 중복 데이터 허용 X : 교집합, 합집합, 차집합
data4 = set([1, 2, 3, 2])

d1 & d2 #교집합
d1 | d2 #합집합
d1 - d2 #차집합

 

Quiz 2: 해결의 책 만들기

# 1. 답변 리스트 생성: answer = []
answer = ['잘 될 거야', 
          '걱정하지마시오', 
          '내가 하는 것이 곧 답']

# 2. 질문 받기 : question = input()
question = input('질문을 입력하시오: ')

# 3. 답변 리스트의 갯수 만큼의 범위에서 랜덤한 정수 1개 생성: random.randint()
import random
idx = random.randint(0,2) #idx = random.randint(0,len(answer)-1)

# 4. 랜덤한 정수에 해당하는 답변 리스트의 데이터 출력: answer[random_number]
answer[idx]

question은 그냥 질문 받은 것 넣기 위한 변수 큰 의미 x 

idx = random.randint(0,len(answer)-1) -> 만일 answer가 여러개인 경우 or 바뀔 경우에 매번 수정하기 힘드니 len(answer)-1 하는 것임 

 

얕은 복사, 깊은 복사

data1 = [1, 2, 3]
data2 = data1 # 얕은복사 : 주소값 복사
data3 = data1.copy() # 깊은복사 : 데이터 복사
print(data1, data2, data3)
data1[1] = 4
print(data1, data2, data3)

id(): 식별자의 주소값 출력

 

Quiz 3: 데이터를 list와 dict로 표현

손흥민: 30골, 메시: 20골, 호날두: 10골

# 두 개의 리스트로
player = ['손흥민', '메시', '호날두']
goal = [30, 20, 10]
player, goal

# 한 개의 딕셔너리로
soccer = {'손흥민': 30, '메시': 20, '호날두': 10}
soccer

# 한 개의 리스트로
data = [('손흥민', 30), ('메시', 20), ('호날두', 10)]
data

 

변수의 데이터를 문자열에 삽입

data1, data2 = '3000', '2000'
string = '저는 ' + data1 + '원중에 ' + data2 + '원을 사용하였습니다.'
string

string = '저는 {}원중에 {}원을 사용하였습니다.'.format(data1, data2)
string

string = f'저는 {data1}원중에 {data2}원을 사용하였습니다.'
string
'저는 3000원중에 2000원을 사용하였습니다.'

'저는 3000원중에 2000원을 사용하였습니다.'

'저는 3000원중에 2000원을 사용하였습니다.'

 

* Homework

pep8 문서 읽어보기 

https://peps.python.org/pep-0008/

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Nick Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python co

peps.python.org

- 가독성이 중요 

- 들여쓰기

- 최대 줄 길이는 79문자로 제한

- import는 분리된 줄에 있어야 함 

- 작은 따옴표(' ')나 큰 따옴표(" ") 는 내가 알아서 결정하지만 하나를 정하면 그것을 고수해야 함

- 공백 -> spam(ham[1]) O, spam( ham[ 1 ] ) X

 if x == 4: print x, y O, if x == 4 : print x , y X

FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )

O

FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

X

 

: 그냥 눈에 들어오는 것만 작성 

정리하자면 가독성이 좋게, 한눈에 봐도 알아 볼 수 있게 작성하는 것이 중요한 것 같음 

-> 보기도 좋고, 프로그램도 효율적으로 돌아감

 

* Reference 

PEP - 8에 대하여

https://wikidocs.net/7896

 

0.3 파이썬 스타일 가이드 (PEP-8)

파이썬엔 PEP(Program Enhance Proposal)이란 것이 있다. 앞 절의 The Zen of Python도 그 중 하나인데 코딩 방법에 대한 제안서도 있다. …

wikidocs.net

깊은 복사, 얕은 복사 시각화

https://pythontutor.com/

 

Python Tutor: Learn Python, JavaScript, C, C++, and Java programming by visualizing code

Learn Python, JavaScript, C, C++, and Java This tool helps you learn Python, JavaScript, C, C++, and Java programming by visualizing code execution. You can use it to debug your homework assignments and as a supplement to online coding tutorials. Over 15 m

pythontutor.com

문자열 포맷팅

https://www.daleseo.com/python-f-strings/

 

파이썬의 f-string 사용법

Engineering Blog by Dale Seo

www.daleseo.com


* Retrospective

😍 Liked

: 프로그래밍 개요 부분은 이전에도 궁금했던 것인데 마땅히 배울만한 곳이 없어서 아쉬웠다. 그런데 이번 강의를 통해 배울 수 있어서 좋았음

예전에 들었던 강의의 강사님이었음 


📚 Learned

: 프로그래밍 개요

파이썬 다시 훑어보기 (문자열 포맷팅)

PEP


💦 Lacked

: 새롭게 배웠다기 보다는 이미 알던 것을 다시 훑어 본 느낌이라 강의가 루즈했음. 물론 내 탓임. 하지만 하루가 다르게 빨리 진도 나갈 것을 알기 때문에 시간 있을 때 복습하고 배울 것들 미리 보는 게 좋음


🙏 Longed for

: 아는 내용이라도 집중해서 공부하기