1 - Python : variable datatype

최민규·2023년 1월 2일
0

프로그래밍 개요

컴퓨터란

컴퓨터 : 계산을 수행하는 기계 장치

컴퓨터의 구성 : CPU, RAM, SSD(HDD)

OS : 물리적 장치 제어

APP : 물리적 장치 사용 절차

프로그래밍 언어의 종류

  • 컴파일러 언어 : 코드 실행하기 위해 컴파일 시간 필요, 속도가 빠름
  • 인터프리터 언어 : 컴파일 시간 필요 없음, 속도가 느림, 문법이 쉬움 (Python)

Jupyter Notebook

웹 브라우저에서 Python 코드를 작성하고 단계적으로 실행 가능하도록 하는 개발자 도구
cell 단위로 코드를 실행하는 환경 (에디터 : IDE)

IDE (Integrated Development Environment)

통합 개발 환경, 소프트웨어 개발에 관련된 모든 작업, 즉 패키지 인클루딩, 문서 편집, 컴파일, 디버그, 원격 서버 액세스, 바이너리 배포 등을 하나의 프로그램 안에서 모두 처리하는 환경을 제공하는 툴

Mode

  • 명령 모드(esc) : cell 수정
  • 편집 모드(enter) : cell 내용 수정

Style

  • 코드 : Python 문법 실행
  • 텍스트 : Markdown 문법 실행, 코드를 설명하거나 이미지를 추가할 때

Shortcut

  • shift + enter : 코드 실행
  • esc + a, b : cell 윗줄에 생성, 아랫줄에 생성
  • ctrl + space : 자동 완성

Python

Preview

Python(언어)를 배우는 것은 컴퓨터의 CPU, RAM, SSD(HDD)를 사용하는 방법인 문법을 학습하는 것

변수 선언
RAM을 사용하는 문법 : 메모리에 저장 공간을 만들어 데이터 저장

데이터 타입

  • RAM을 효율적으로 사용하는 문법
  • int float str bool list tuple dict set
  • integer(정수), floating-point(실수), string(문자열), boolean(불리언 : 참, 거짓), list(리스트), tuple(튜플), dictionary(딕셔너리), set(집합)
  • 점프투파이썬 자료형 (https://wikidocs.net/11)

연산자

  • CPU를 사용하는 문법
  • 산술, 할당, 비교, 논리, 멤버

코드를 효율적으로 작성할 수 있도록 도와주는 문법

조건문

  • 특정 조건에 따라서 다른 코드를 실행
  • if elif else

반복문

  • 특정 코드를 반복적으로 실행
  • while for break continue range() zip() enumerate()

함수

  • 반복되는 코드를 묶어서 코드 작성 및 실행
  • def args params docstring scope lambda

클래스

  • 비슷한 기능의 변수, 함수를 묶어서 코드 작성 및 실행
  • 객체 지향?을 구현한 문법
  • class self __int__() __add__() __str__()

모듈, 패키지

  • 모듈 : 변수, 함수, 클래스를 파일(.py)로 묶어서 코드 작성 및 실행
  • 패키지 : 여러개의 모듈을 디렉토리로 묶어서 코드 작성 및 실행 (버전 정보가 붙음)
  • import from as

예외처리

  • 코드 에러에 대한 처리를 하는 문법
  • try except finally raise

입출력

  • SSD(HDD)를 사용하는 문법 : RAM(data) → SSD(data), SSD(data) → RAM(data)
  • pickle

변수선언

RAM을 사용하는 문법 : 메모리에 저장 공간을 만들어 데이터 저장

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

식별자 규칙

  • 문법 : 틀리면 에러 발행 → 코드 실행 불가 (법)
    • 대소문자 숫자 _ 사용 가능
    • 가장 앞에 숫자 불가 : data_1 (O), 1_data (X)
    • 명령어(예약어) 사용 불가 : def if for (X), print (O)
  • 컨벤션 : 틀려도 코드 실행 가능 → 보기에 안좋으므로 가능한 따르는 규칙 (PEP8) (도덕)

식별자 규칙 실습

# 식별자 1개, 데이터 1개
data1 = 1

# 식별자 n개, 데이터 n개
data2, data3 = 2, 3

# 식별자 n개, 데이터 1개
data4 = data5 = 4

매직 커맨드 %

: iPython 인터프리터에 추가된 특수 명령어, alias 등록, 스크립트 실행, 명령어 실행 시간 확인 등의 기능이 있음
jupyter notebook 매직 커맨드 (https://pinkwink.kr/1235?category=522424)

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

print() : 식별자에 저장되어 있는 데이터 출력

print(data1, data2, data3, data4, data5)

RAM을 표현하는 그림대로 변수를 선언하고, 데이터를 출력해보자

# son 30 messi 30

# 1
player1 = 'son'
player2 = 'messi'
goal1 = 30
goal2 = 30
print(player1, goal1, player2, goal2)

# 2
player1, player2 = 'son', 'messi'
goal1 = goal2 = 30
print(player1, goal1, player2, goal2)

데이터 타입

  • RAM을 효율적으로 사용하는 문법
  • 기본 데이터 타입 : int float str bool
  • 컬렉션 데이터 타입 (식별자 1개, 데이터 n개)
    • list tuple dict set
    • CRUD : 컴퓨터 소프트웨어의 기본적인 데이터 처리 기능 (create, read, update, delete)

기본 데이터 타입

data1, data2, data3, data4 = -10, 1.2, True, 'python'

type() : 식별자의 데이터 타입 출력

data1, data2, data3, data4 = -10, 1.2, True, 'python'

type(data1), type(data2), type(data3), type(data4)

# Terminal
(int, float, bool, str)

동적 타이핑 : 변수 선언 시 데이터 타입 지정 안해도 자동으로 지정됨

  • 인터프리터 언어의 특징
  • 컴파일러 언어 : int data1 = -10

컬렉션 데이터 타입

iterable (순서가 있는) collection

list []

순서가 있고, 수정이 가능

data1 = [1, 2, 3, 'A', 'B']
data1, type(data1)

# Terminal
([1, 2, 3, 'A', 'B'], list)

데이터 선택 : read (masking)

data[] [index] [key]

[start:end] (범위, start는 포함 end는 미포함) [start:end:stride] (점프)

data1 = [1, 2, 3, 'A', 'B']

print(data1)
data1[3], data1[2:4], data1[:2], data1[3:], data1[:], data1[::2]

# Terminal
[1, 2, 3, 'A', 'B']
('A', [3, 'A'], [1, 2], ['A', 'B'], [1, 2, 3, 'A', 'B'], [1, 3, 'B'])

data[] str(문자열)에서도 사용 가능

str : 문자들의 집합 → 문자열

data = 'macbook notebook'
data[8:12]

# Terminal
# 'note'

masking을 이용해 년도 데이터만 출력되도록 start, end 데이터를 설정해보자

# 1
d1 = '사업보고서(2022)'
d2 = '감사보고서(2023)'
start, end = 6, 10
d1[start:end], d2[start:end]

# Terminal
# ('2022', '2023')

# 2
d1 = '사업보고서(2022)'
d2 = '감사보고서(2023)'
d3 = '[기재정정]감사보고서(2021)'
start, end = -5, -1
d1[start:end], d2[start:end],d3[start:end]

# Terminal
# ('2022', '2023', '2021')

masking의 -(음수) 사용

data1 = [1, 2, 3, 'A', 'B']

print(data1)
data1[-2], data1[-2:], data1[::-1]

# Terminal
[1, 2, 3, 'A', 'B']
('A', ['A', 'B'], ['B', 'A', 3, 2, 1])

tuple ()

순서가 있고, 수정이 불가능 (소괄호 생략 가능)

data2 = (1, 2, 3, 'A', 'B')
data2, type(data2)

# Terminal
((1, 2, 3, 'A', 'B'), tuple)

데이터 수정 : update

데이터 선택 = 수정할 데이터 (= 은 대입해준다는 의미)

data1 = [1, 2, 3, 'A', 'B']

print(data1)
data1[3] = 'C'
print(data1)

# Terminal
[1, 2, 3, 'A', 'B']
[1, 2, 3, 'C', 'B']

tuple 은 데이터 수정 불가

data2 = (1, 2, 3, 'A', 'B')

print(data2)
data2[3] = 'C'
print(data2)

# Terminal
TypeError: 'tuple' object does not support item assignment

tuple 을 사용하는 이유 (수정이 안되면 list 만 사용하면 될 것 같은데 왜 tuple 을 사용할까)

: 같은 데이터를 가지고 있으면 list 보다 저장 공간을 적게 사용하기 때문

d1, d2 = [1,2,3], (1,2,3)
type(d1), type(d2)

# Terminal
(list, tuple)

sys.getsizeof()

데이터의 용량값 구하기 (import sys 필요)

d1, d2 = [1,2,3], (1,2,3)

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

# Terminal
(80, 64)

dict {}

순서가 없고, 수정이 가능 (순서값 대신 키값)

data3 = {'one': 1, 2: 'two'}
data3, type(data3)

# Terminal
({'one': 1, 2: 'two'}, dict)

데이터 수정 : update

data3 = {'one': 1, 2: 'two'}

print(data3)
data3['one'] = 10
print(data3)

# Terminal
{'one' : 1, 2 : 'two'}
{'one' : 10, 2 : 'two'}

데이터 삭제 : delete

del 변수이름[KEY값(범위선택가능)]

data3 = {'one': 1, 2: 'two'}

print(data3)
del data3['one']
print(data3)

# Terminal
{'one': 1, 2 : 'two'}
{2 : 'two'}

set

set() 집합 데이터 표현 (중복 데이터 허용하지 않음) (교집합, 합집합, 차집합)

data4 = set([1, 2, 3, 2])
data4, type(data4)

# Terminal
({1, 2, 3}, set)

교집합 & , 합집합 | , 차집합 -

d1, d2 = set([1,2,3]), set([2,3,4])
print(d1 & d2, d1 | d2, d1 - d2)

# Termianl
{2, 3} {1, 2, 3, 4} {1}

iPython의 특징

가장 마지막 줄의 변수는 데이터를 출력

d1 = 1
d2 = 2
# print(d1)
d1, d2

# Terminal
(1, 2)

실습하기 (해결의 책 : 질문을 입력하면 임의로 답변을 출력해주는 기능)

기능의 알고리즘

  • 답변리스트 생성 answers = []
    answers = [
        '무엇을 상상하던 그 이상으로 안좋을 것이다.', 
        '뜻하는 대로 모든 일이 잘 풀릴 것이다.',
        '네 자신을 돌아봐라.'
    ]
  • 질문 받기 question = input()
    question = input('고민을 입력하세요. 고민이 해결될 것입니다.')
  • 답변 리스트의 갯수 만큼의 범위에서 랜덤한 정수 1개 생성 random.randint()
    idx = random.randint(0, len(answers) - 1)
  • 랜덤한 정수에 해당하는 답변 리스트의 데이터 출력 answers[random_number]
    answers[idx]
  • 완성
    import random
    
    answers = [
        '무엇을 상상하던 그 이상으로 안좋을 것이다.', 
        '뜻하는 대로 모든 일이 잘 풀릴 것이다.',
        '네 자신을 돌아봐라.'
    ]
    
    question = input('고민을 입력하세요. 고민이 해결될 것입니다.')
    
    idx = random.randint(0, len(answers) - 1)
    
    answers[idx]

len()

answers = [
    '무엇을 상상하던 그 이상으로 안좋을 것이다.', 
    '뜻하는 대로 모든 일이 잘 풀릴 것이다.',
    '네 자신을 돌아봐라.'
]
len(answers) - 1

# Terminal
2

랜덤한 숫자 생성

import random
data = random.randint(0, 2)
data

# Terminal
0 or 1 or 2

데이터 입력 받기

data = input('insert data : ')
data

# Terminal
insert data : python
python

실수할 만 한 코드 1

# 원본은 data1으로 남겨두고, data2에서만 2를 4로 바꾸고 싶음
# 얕은복사, 깊은복사
data1 = [1, 2, 3]
data2 = data1 # 얕은복사 : 주소값 복사
data3 = data1.copy() # 깊은복사 : 데이터 복사
print(data1, data2, data3)
data1[1] = 4
print(data1, data2, data3)

# Terminal
[1, 2, 3] [1, 2, 3] [1, 2, 3]
[1, 4, 3] [1, 4, 3] [1, 2, 3]

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

data1 = [1, 2, 3]
data2 = data1
data3 = data1.copy()

id(data1), id(data2), id(data3)

# Terminal
(140125954395200, 140125954395200, 140125954395392)
# 얕은 복사를 하면 주소 값이 같지만 깊은 복사를 하면 별도의 주소 값에 저장되는 것
# 원본을 남겨두고 새로 복사하고 싶다면 깊은 복사를 이용해야 함

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

이 데이터를 listdict 로 표현해보자

list 데이터 2개

players = ['손흥민','메시','호날두']
goals = [30, 20, 10]
players, goals

dict 데이터 1개

data = {'손흥민': 30, '메시': 20, '호날두': 10}
data

list 데이터 1개

data = [('손흥민', 30), ('메시', 20), ('호날두', 10)]
data
# list안에 tuple데이터가 들어간 것

문자열 데이터 표현

d1, d2 = "python1", 'python2' 
# 따옴표 둘 다 가능, 문자열 안에 쌍따옴표나 홑따옴표를 사용해야하는 경우가 있음
d3, d4 = "jupyter's notebook", 'jupyter "note" book'
d5 = 'jupyter\'s "note"book' 
# \ : 이스케이핑 문자 (의미를 갖는 것이 아니라 문자열로 기능한다는 의미)
d3, d4, d5

# Terminal
("jupyter's notebook", 'jupyter "note" book', 'jupyter's "note"book')

멀티라인 문자열 (함수 설명하는 북스트링에 주로 사용함)

d6 = '''
jupyter
notebook
'''
print(d6)

# Terminal
jupyter
notebook

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

# 1
data1, data2 = '3000', '2000' # 따옴표로 숫자가 아닌 문자열로 기능, 데이터 타입 신경 써야 함
string = '저는 ' + data1 + '원중에 ' + data2 + '원을 사용하였습니다.'
string

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

# 2
data1, data2 = 3000, 2000
string = '저는 {}원중에 {}원을 사용하였습니다.'.format(data1, data2) 
# 데이터 타입 신경 안써도 됨
string

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

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

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

오늘의 정리

파이썬 문법

컴퓨터의 CPU, RAM, SSD(HDD) 자원을 활용하기 위한 방법

1. 변수 선언

  • RAM에 저장 공간을 만들어 데이터를 저장하는 문법
  • 식별자 1개 - 데이터 1개, 식별자 n개 - 데이터 n개, 식별자 n개 - 데이터 1개
  • 식별자 규칙 : 대소문자, 숫자, _ : 숫자 가장 앞에 올 수 없음 : 예약어 사용 X : snake_case

2. 데이터 타입

  • 기본 : int float bool str
    동적 타이핑 : 자동으로 데이터 타입을 설정
  • 컬렉션 : list tuple dict set : 식별자 1개, 데이터 n개
    CRUD
    create : list([]) tuple(()) dict({}) set(set())
    read : masking data[] [index] [key] [start:end] [start:end:stride]
    update : 데이터 선택 = 수정할 데이터
    delete : del 데이터 선택
  • 변수의 속성값 출력 함수 : print() type() sys.getsizeof() id()
  • 얕은 복사 (주소값 복사), 깊은 복사 (데이터 복사)
profile
안녕

0개의 댓글