AIFFEL - Python(1) basic-1

JoBoB·2023년 11월 12일
0

AIFFEL - Python

목록 보기
4/10
post-thumbnail

AIFFEL에서 공부한 Python data type에 대해 정리해보자


학습 목표


파이썬은 interpreter 언어?

역사

그전에 컴퓨터 언어의 역사를 보게 되면, 초창기에는 컴퓨터 언어를 assembly어로 구현했다. 그렇기에 컴퓨터 구조가 달라지면 (예를 들어, 신형 CPU 아키텍쳐의 변경 등) 기계어와 1대1로 매칭되기에, 프로그램을 실행하는데 CPU마다 구현되는 언어가 달라진다. 이걸 방지하기 위해 우리는 통일된 언어 체계를 개발했고 그것이 고급 언어이다. 그렇지만, 컴퓨터는 고급 언어를 이해하지 못 하기에 저급 언어로 해석해줄 필요가 있었고, 그래서 나온 것이 컴파일러이다.

  • assembly어 : 기계어와 1대1로 매칭되는 저급 언어

Interpreter VS Compiler

둘 다 고급 언어와 저급 언어 간에 해석을 담당, 그러나 그 방식에서 차이를 보인다.

Compiler

  • 소스 코드 전체를 스캔하여 한 번에 해석 ( compile 과정 )
  • 스캔을 통해 실행 파일을 생성, 스캔에 시간 소요
  • 실행은 실행 파일을 통해 하기 때문에 실행은 빠름
  • 고급어를 저급어로 바꾸는 과정에 생성된 object code를 모아 실행 파일을 만드는 Linking 과정 필요 -> 메모리 사용 ↑
  • 컴파일링 과정에서 모든 오류 검출 ( 실행 전에 오류 검출 )
  • C , C++ , JAVA

Interpreter

  • 한 번에 한 문장 씩 번역
  • 한 문장 씩 번역하기 때문에 실행 시간이 오래 걸린다.
  • object code 생성이나 Linking 과정이 없기 때문에 메모리 효율이 좋다.
  • 오류를 발견 할 때마다, 실행을 중지하고 오류문 반환
  • Python , JavaScript

기초 용어들

  • 표현식 : 값을 부여하거나 계산하는 형태의 식
123    # 숫자를 표현식으로
1 + 2 + 3    # 수식을 표현식으로
'Hello World!'    # 문자열을 표현식으로
  • 문장 : 표현식이 하나 이상 모인 형태
print('Hello World!')
a = 1 + 2 + 3
  • 프로그램 : 문장이 하나 이상 모인 형태
def add_9(x):
	return x + 9

print(add_9(10))
  • 식별자 : 프로그래밍 언어에서 변수, 함수, class 등에 붙이는 이름

규칙

  • 예약어를 사용할 수 없다. ( list, class )
  • 특수문자는 ' _ ' 만 사용이 가능하다. ( add? , test&return )
  • 숫자로 시작할 수 없다. ( 9add , 10nd_test )
  • 공백이 불가하다. ( test code , add 9 )

  • 예약어 : 이미 역할이 있는 단어들

표기법

여러 단어로 구성된 식별자를 읽기 쉽게 하기위해 사용

  • Snake case : ' _ ' 로 공백 부분을 표현 ( test_case )
  • Camel case : 첫 글자를 제외한 다른 글자의 앞부분을 대문자로 표현 ( testCase )
  • Pascal case : 모든 글자의 앞부분을 대문자로 표현 ( TestCase )

+) 작성자는 현재 실습하는 코드에서 함수와 변수는 Snake를 class에서는 Pascal 사용

class : MyModel ( Pascal )

변수(variable) : correct_cnt , total_cnt ( Snake )


주석과 출력

  • 주석 : 프로그램을 설명하기 위해 컴퓨터가 아닌 사용자를 위한 정보를 남기는 것
# 이것은 출력을 위한 코드입니다.
print('Hello World!')
  • 출력 : 파이썬이 내부에서 돌리던 부분을 사용자에게 보여줄 수 있게 해준다.
             기본적으로 print 문을 사용하고, 이 부분에 대해 조금 더 자세히 살펴보자.



기본 형태

print('Hello World!')
print('Hello \n world')    # 줄바꿈 실행
print(1,2)    # 두 값에 공백을 두고 출력
print(1,2, sep='/')    # 구분자를 공백 대신 /로 둔다는 의미

print()   # \n가 동일한 역할 가능, 오류가 터지지 않는다는 것을 알자

print(1)      # 원래는 end라는 값이 default로 '\n'이 들어가 있어서 줄바꿔서 출력
print(2)

print()

print(1, end='  ')    # end 값을 공백 2개로 지정해준다는 의미
print(2)

문자열 포맷팅
1. 기본 출력과 포멧 코드

a = 1      # 변수 할당
b,c = 2,3    # 변수 여러개 한번에 할당
d = b + c

print('a =',a)    # 변수를 print에서 출력하는 방법
print('d =',d)


# 포맷 코드 사용 방식
x = 10
y = 'Python'

print('5 + 5 = %d' %x)    # 포맷 코드를 사용해서 정수 출력
print('I love %s' %y)     # 포맷 코드를 사용해서 문자열 출력
print('I learn %s %d days!' %(y,x))    # 여러 개에 포맷 코드를 사용하는 방법
  • 포맷 코드 : 변수를 출력문에 넣는 방법, 자료형을 지정해야한다.

2. format 함수 사용 방식

#     자료형을 지정해주지 않아서 좋음
x = 10
y = 'Python'

print('x is {0}'.format(x))      # index를 부여해서 순서대로 집어넣음
print('I learn {0} {1} days!'.format(y,x))     # y와 x 순서대로 대입

print()

# 인덱스가 아닌 변수명 자체로 대입 가능 / 대신 무조건 format 내부에서 할당 필수
print('x is {x}'.format(x=5))
print('I learn {y} {x} days!'.format(y='C++',x=5))
# print('x is {x}'.format(x)) / format 내부에서 할당이 없기 때문에 오류이다.

3. f 문자열 포멧 이용 (추천)

#    변수명만을 사용해서 대입 가능
x = 10
y= 'Python'

print(f'5 + 5 = {x}')
print(f'I love {y}')

# 정렬 또한 가능하다.
print(f'{x:>10}')    # 10개의 빈 문자열에서 오른쪽 정렬
print(f'{x:<10}')    # 10개의 빈 문자열에서 왼쪽 정렬
print(f'{x:^10}')    # 10개의 빈 문자열에서 가운데 정렬

# 채우기도 가능
print(f'{y:0>10}')   # 10개의 빈 문자열에서 오른쪽 정렬 후 나머지는 0으로 채움

자료형

1. 숫자형

정수형( int ) : 정수를 뜻하는 자료형
실수형( float ) : 소수점이 있는 자료형

2. 문자형

' , " , ''' , """ 총 4개에 표현식 ( str )


따옴표를 반대되는 것을 사용하면, 안에 반대 따옴표 사용 가능

print("Let's do Python!")

여러 줄을 한번에 출력하기 위해서는 ''', """을 사용해야함


이스케이프 코드 ( Escape Sequence )

\n , \\ , \t , \   정도는 기억하자


  • len() : 문자열 길이 출력
a = 'I learn Python 30 days!, but I am good at Python.. ㅜㅜ'
print(len(a))

  • 문자열 인덱싱 ( indexing )
# 문자열에 첫 시작은 1이 아니라 0임
a = 'Hello World!'
print(a[2])
print(a[5])     # 공백 출력

  • 문자열 슬라이싱 ( slicing )

문자열을 범위 단위로 반환

slicing = 'hello aiffel'  
# 출력값:  'hello aiffel' 

print('전체 출력', slicing[:])	 # 모두 공백

# 뒤에 범위는 그 전까지만 포함
print('처음부터 5번째까지 출력 :', slicing[:6])    # 앞에 입력 X
print('6번째부터 마지막까지 출력 :', slicing[6:])    # 뒤에 입력 X
print('6번째부터 8번째까지 출력 :', slicing[6:9])  

print('간격이 2로 모두 출력 : ', slicing[::2])    # 뒤에 하나의 argument 추가

컬렉션들

collection : 여러 개의 element를 가지는 데이터 타입 ( list, tuple, set 등 )
+) sequence : 순서가 있는 데이터 타입 ( list, str, range, tuple 등 )

1. 리스트 (list)

# 요소는 영어로 element라고 함
리스트명 = [요소1, 요소2, 요소3 ...]

리스트는 여러 자료형이 혼합해서 요소로 사용 가능하며, 리스트도 가능

list_test = [1,'2',[3,4],(5,6)]

비어있는 리스트 또한 생성 가능

list_empty = []

리스트 연산

1. 문자열 더하기

2. 리스트 반복

3. 리스트 길이 구하기

4. 리스트 수정과 삭제


리스트 관련 함수

1. append
맨 마지막에 리스트 요소 추가


2. sort
요소의 크기에 맞게 정렬
문자열에 경우, 알파벳 순으로 정렬


3. reverse
요소들을 그대로 뒤집는다.


4. index
입력값의 index 반환


5. insert
리스트에 요소 삽입

# insert(a,b) : a 위치에 b 값을 삽입한다는 의미
a.insert(1,10)

6. remove
해당되는 첫번째 element 삭제


7. pop

리스트에 맨 마지막 element를 반환하고 리스트에서 삭제


8. count

리스트에 포함된 element 개수 세기

# count(x) : x 인 element의 개수를 반환
a.count(1)


2. 튜플 (tuple)

# 리스트와 다르게 소괄호로 감싼다.
튜플명 = (요소1, 요소2, 요소3 ...)

리스트와 다르게 생성하고 난 다음에 수정이 불가능하다.


튜플에 element가 하나만 들어가는 경우,

#이 형태로 생성해야 한다.
tuple_1 = (1,)

튜플 다루기

튜플의 값이 변경되지 않기 때문에, 연산 관련 부분도 값이 변경되지 않는 선에서 가능

1. 인덱싱

2. 슬라이싱

3. 튜플 더하기

4. 튜플 곱하기

5. 튜플 길이 구하기


3. 집합 (set)

# 순서가 없고 중괄호로 감싼다.
집합명 = {1,2,3 ... }

집합은 요소의 중복을 허용하지 않고, 순서가 존재하지 않는다.

순서가 없기 때문에, index로 접근할 수 없다. index 접근을 위해서는 list 등으로 변경


집합 활용

수학적으로 사용하는 교집합, 합집합, 차집합 등 구현가능

1. 교집합 ( intersection )


2. 합집합 ( union )


3. 차집합 ( difference )


4. 베타적 차집합 ( symmetric difference )

합집합 - 교집합


집합 관련 함수

1. add

값을 맨 뒤 index에 추가


2. update

값을 여러 개 추가하기


3. remove

처음 일치하는 값 제거하기


4. 딕셔너리 (dictionary)

key와 value로 구성

# value는 list나 tuple도 가능
딕셔너리명 = { key1 : value1, key2 : value2, key3 : value3 }

# value에 접근하기 위해서는 무조건 key로 접근해야한다.
# 접근 형태
a[key1]

딕셔너리에 set 추가

딕셔너리에서 set 제거

key는 중복이 불가, value는 가능
key가 중복되는 경우 제일 뒤에 (최신식의) 있는 key만 인식


딕셔너리 관련 함수

1. keys

key list를 반환해주는 함수


2. values

value list를 반환해주는 함수


3. items

key와 value 쌍들을 튜플의 형태로 반환


4. clear

key와 value들 모두 지우기


5. get

key로 value 값 얻기

dict['name']

과 동일한 역할을 하지만 존재하지 않는 key값 입력시,

  • get은 'None' 을 반환
  • 중괄호는 오류를 반환

6. in

해당 key가 딕셔너리 안에 있는지 조사 후, bool로 출력


5. 불 (bool)

True와 False

bool을 표현하는 다른 방식

  • False : 문자열, 튜플, 리스트, 딕셔너리, 집합 비어 있는 경우, 0, None
  • True : 그 외에 모든 값
profile
딥러닝을 메인으로 나아가고자 하는 뉴비입니다

0개의 댓글