/ LECTURE

Pyhon - Intro

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

72일차 수업

Python 시작

Anaconda, Python 3.9.*, Pycharm 설치

주석

# 한줄 주석
“”” 다중 주석 “””

들여쓰기

중괄호 대신 문단들을 구분

한 줄에 보통 80 자 이내로 작성 권장

불필요한 공백을 피하면서 코딩

PEP8

연산자는 1칸이상 띄우지 말기

변수명에는 소문자l, 대문자O, 대문자I를 금지한다

주석은 항상 업데이트를 통해 관리, 불필요한 주석은 제거

함수명은 소문자로, 구분이 필요할 때는 언더바를 사용

변수

모든 자료형을 객체로 취급한다

a=7

7 개체를 가리키는 변수 a이다, 저장한다는 표현보다는 가리키다, 참조

영문+숫자+언더바 조합

첫글자는 숫자 안됨

대소문자 구별

길이 제한 없음

예약어 사용 안됨

# 예약어 확인 가능
import keyword
print(keyword.kwlist)

# 한번에 여러개  할당 가능
a,b = 5,10

# 매개체 없이 치환 가능
a=b,b=a

숫자형

정수형(1,2,3,…), 실수형(1.2,2.43,…), 복소수형(1+2j, 3i,…), 8진수형(0o숫자), 16진수형(0x숫자)

기초 연산자

+,-,*,/,%

/ : 나눗셈 실수 반환

// : 나눗셈 정수 반환

** : 제곱

관계 연산자

<, >, <=, >=, ==, !=

문자 + 숫자

파이썬의 경우 문자 더하기 숫자는 오류

# 쉼표를 이용하기
print(str1, 12)		# output str112
# 형변환 하기
print(str1+str1(12))	# output str112

논리 연산자

not, or, and

이진 연산자

~ : not

: or

& : and

^ : xor

<<, >> : shift

대입 연산자

=, +=, -=, *=, /=, //=, %=

기타 연산자

is : 비교하는 객체의 주소가 같으면 true / false

is not : 비교하는 객체의 주소가 다르면 true / false

in : 요소 안에 포함이 되어있으면 true / false

not in : 요소 안에 포함이 되지 않으면 true / false

증감 연산자

파이썬은 증감연산자가 없음

String

‘싱글쿼터’, “더블쿼터”로 표현

# 주석을 응용해 개행문자 구현
msg = “””
블로그에
오신것을
환영합니다
“””
print(msg)

# 문자열 연산
a = sponge
b = bob
print(a+b)		# output spongebob
print((a+b)*2)		# output spongebobspongebob

문자열 자르기

인덱스는 0부터 시작

str1[i] : str1에서 i번째 문자를 추출

str1[i:j] : str1에서 i번째부터 j-1까지 추출

str1[i:j:k] : str1에서 i부터 j-1까지 k개씩 건너뛰어 추출

str1[-i] : str1에서 뒤에서부터 i번째 문자까지 추출

str1[:] : str1전체 추출, 숫자 생략시 처음 or 끝

문자열 함수

str1.count(“a”) : str1에서 a 개수 반환

str1.index(“a”) : str1에서 a의 index 반환, 반환 값이 없으면 오류

str1.rindex(“a”) : str1에서 a의 오른쪽에서 부터 index를 반환

str1.find(“a”) : str1에서 a의 index 반환, 반환 값이 없으면 -1을 반환

str1.rfind(“a”) : str1에서 a의 오른쪽에서부터index를 반환

str1.upper() : str1 대문자 변환

str1.lower() : str1 소문자 변환

str1.lstr1ip() : str1 left str1ip

str1.rstr1ip() : str1 right str1ip

str1.str1ip() : str1 str1ip

str1.replace(“a”, “b”) : str1 에서 a를 b로 바꾸기

str1.split() : str1을 공백으로 나누기

str1.split(“a”) : str1을 기준 a로 나누기

a.join(str1) : a를 str1에 삽입

문자열 포맷

문자열 안에 문자를 넣는 방법

# output 내가 좋아하는 숫자는 100

# 쉼표를 이용해서 숫자와 문자를 연결
print(내가 좋아하는 숫자는, 100)
# format() 이용
print(내가 좋아하는 숫자는{}.format(100))
# % 이용
print(내가 좋아하는 숫자는 %d, %100)

% 이용방식

%s : 문자열

%c : 문자 1

%d : 정수형

%f : 실수형

%o : 8진수

%x : 16진수

%% : % 라는 의미

format()

“문자열 {넣을 공간} 문자열”.format(넣을 값)

# 내가 좋아하는 숫자는 100, 200 입니다
print(내가 좋아하는 숫자는 {},{} 입니다.format(100, 200))
print(내가 좋아하는 숫자는 {1},{0} 입니다.format(200, 100))
print(내가 좋아하는 숫자는 {a},{b} 입니다.format(b=200, a=100))

# 공백채우기
print({a:@<10}.format(a=hello)) # 10칸을 유지하면서 글자는 왼쪽, 남은 공간은 @으로 채운다
print({:@^5}.format(hello)) # 가운데 정렬
print({:@>5}.format(hello)) # 글자 오른쪽

# 소수점 표현, 반올림
print({0:0.4f}.format(1.234567))	# output 1.2346
print({0:10.5f}.format(1.234567))	# output    1.23457

Boolean

True, False, None

값이 있냐 없냐를 불리언으로 구분 짓기 가능

List

임의의 객체를 순차적으로 저장하는 집합 자료형

각 값에 대한 인덱스 부여

변경 가능

[대괄호]

크기를 미리 설정하지 않고 입력하는 대로 추가

list = []
list = [1,2,3,4,5, sponge]

list 함수

append(a) : a 요소 추가

sort() : 리스트 정렬

reverse() : 역순으로 뒤집기

index(a) : a 위치 반환

insert(a) : 리스트에 a 요소 삽입

remove(a) : a 요소 제거

pop() : 맨 마지막 요소를 꺼내기

count() : 요소 개수 세기

extend(a) : 리스트에 a리스트 더하기

clear() : 모든 요소를 제거

얕은 복사

메모리상에 같은 위치를 가리키는 복사 방법, 주소가 같음

a = [1,2,3]
b = a
print(a is b)	# output True
b[2] = Hello
print(a)	# output [1,2, “Hello”]
print(b)	# output [1,2, “Hello”]

깊은 복사

메모리 상에 새로운 위치를 가리키는 복사 방법, 주소가 다름

a = [1,2,3]
# b = a[:]
from copy import copy
b = copy(a)
print(a is b)	# output False
b[2] = Hello
print(a)	# output [1,2,3]
print(b)	# output [1,2, “Hello”]

tuple

리스트와 유사한 자료형

각 값에 대한 인덱스 부여

변경 불가능

(소괄호 사용)

그 외 인덱싱, 슬라이싱, 함수 비슷

# 비어있는 튜플
t1 = ()
# 만약 튜플의 값이 하나라면 무조건 쉼표를 붙여야 함, 연산의 괄호로 인식해서 타입이 int로 바뀌기 때문에
t2 = (1,)
t3 = (1,2,3)
# 쉼표로 여러 요소를 입력한다면 튜플로 자동 생성
t4 = 1,2,3
# 다중 튜플
t5 = (1,2,(3,4))

튜플과 리스트의 차이

값을 변경할 수 있냐 없냐

값을 변경할 수 있는 리스트를 더 많이 사용

값을 변경하지 않아야할 기준이 있다면 튜플을 사용

set

집합에 관련된 자료형

순서가 없고, 중복을 허용하지 않음

{중괄호 사용}

중복제거를 위한 필터역할로 주로 사용

그외 add, update 등 사용 가능

s1 = {1,2,3,3}
print(s1)	# output {1,2,3}
li = [1,2,3,3]
s2 = set(li)
print(s2)	# output {1,2,3}

집합의 성질을 이용하여 중복제거

& : 교집합, 중복되는 값만 출력

: 합집합, 중복제거를 한 모든 값

-: 차집합, 기준 집합에서 중복된 값만 제거하고 출력

s1 = {1,2,3,4,5,6}
s2 = {4,5,6,7,8,9}

print(s1&s2)	# output {4,5,6}
print(s1|s2)	# output {1,2,3,4,5,6,7,8,9,}
print(s1-s2)	# output {1,2,3}

Dictionary

자바의 map과 비슷함

키와 값으로 구성

저장된 자료의 순서는 무의미

{중괄호 사용}

변경 가능

dt = {1: one, 2: two, 3: three}
print(dt.keys())	# 모든 키를 추출, 임의의 순서
print(dt.values())	# 모든 값을 추출, 임의의 순서
print(dt.items())	# 키와 값을 모두 추출, 임의의 순서

# 튜플도 키로 사용할 수 있음
dt2 = {1: one, 2: two, 3: three, (4,5): fourFive}

# dictName[키] : 사전의 키로 검색
print(dt2[4,5])		# output “fourFive”
# get 을 이용해서 찾을 수 있음. 해당하는 키가 없을 때 오류발생이 아닌 default로 none을 반환해주고, 반환값을 2번째 인자로 지정할 수도 있음
print(dt2.get(ddd, 없음))

# 같은 키에 다른 값을 저장한다면 마지막에 입력한 값으로 덮어쓰기 됨
# dict를 생성하는 다른 방법
dt3 = dict(one= 하나, two= )
# dict함수를 사용하면 키의 타입이 무조건 ‘’ 자동부여, ‘’를 입력한 값이나, 숫자는 오류를 일으킴
# 여러개의 값을 넣고 싶을 때dt3.update({키:값,….})