인터프리터 : 코드를 한 줄 한줄 실행하여 결과를 얻는 방식.
자료 : 프로그램이 처리할 수 있는 모든것
자료형 : 문자열 , 숫자 , boolean (2진 자료 ).
자료형 확인 함수 type()
- 파이썬 숫자 자료형 분류
1. 정수 (int ) , 실수 (Float ) , 복소수 (complex )
연산자 ( +- * / ) 정수 나누기 연산자 ( // ) [나눗셈 후 소숫점 이하는 버림 ] , 나머지 연산자 ( % ) 제곱연산자( ** )
2. int( ) - cast 연산자
int( 숫자 ).int( 계산식 ). Int('문자열 ' )
몫과 나머지 구할때 스는 함수 divmod( , ) - 출력은 튜플( ) 형태로 출력나옴 .
3. float() - 실수 cast 연산자
float // 지수표현 E2 ^2
float(숫자), float(계산식 ) , float ( '문자열 ' )
1. sep로 값사이에 문자넣기
sep = separator
print(1,2,3, sep=', ' )
>>> 1, 2, 3
2. 지정 표현식으로 데이터 나누기
input_b, input_a = input().split(',')
in 1, 4
>>>1
>>>4
라고한다면 , 로 데이터를 나눌수있다
string
문자열 : "" , '' 로 문자열을 구성함 , ' "~" ' , " '~ ' " , "\' ~ \' " , "\" ~ \" " , \n(줄바꿈) , \t (탭) ,
문자열 연결 연산자 : + ex) "a"+"a"
문자열 반복 연산자 : * ex) "a"*2
문자 선택 연산자(indexing) : [ ] ,
- zero index ( 0부터 체크 ) - 파이썬
- one index ( 1부터 체크 )
ex) print("hello World"[0] ) -> h
ex) print("hello World"[-1]) -> d
문자 범위 선택 연산자(slicing) : [:].
//문자열 특정 범위를 선택시 사용함 [1:n] 문자열 index 1 부터 n-1까지 범위 지정 . n은 포함하지않음
// 생략하여 사용가능 [1: ] // 1부터 끝까지 . [:n] //0부터 n-1까지 .
** 문자열 슬라이싱을 하더라도 원시데이터는 변하지 않음 .
문자열 길이 리턴함수 len()
사용자 입력 함수 input()
ex ) input("string : hello world " )
block : 프로그램 실행중 잠시 멈추는것 : input() 실행하면 string: hello world 가 출력되고 프로그램은 종료되지 않는 상태
string : hello world > ( hi world )
-> hi world 출력으로 나옴
ex) string = input()
print(string)
자료형 확인할때
print(type(string))
** 근데 여기서!!! input() 실행하여 입력한 데이터는 무조건 문자열 자료형으로 받아들임.
*cast 연산자
-문자열 -> number -
int(), float()
ex)
string_a = input("enter ")
int_a=int(string_a)
string_b = input("enter ")
float_b = float(string_b)
print("string",string_a + stinrg_b)
print("number",int_a,float_b)
---------------------------------
ex2)
float_input_1 = float(input("enter float")
float_input_2= float(input("enter float")
print("+",float_input_1+float_input_2)
-------------------------------------
- cast - num->string -
1. str() , format(), f-string
1.1 str() , str( other type)
ex)
str1 = str(52)
str2 = str(52.12)
pritn(type(str1), type(str2))
1.2 format()
"{}".format(10)
"{} {}".format(10, 11)
"{} {} {} {}".format(10, 11, 12 ,13)
-중괄호를 포함한 문자열 뒤에 마침표 찍어서 숫자를 문자열로 표현함
* 포맷함수의 숫자갯수롸 괄호의 수가 맞아야함 .
ex)
string_a = "{}".format(10)
print(string_a, type(string_a))
1.2.1
1.3 f-string
num = 5
str_a = f'{num}'
print(type(str_a))
대소문자 변환 함수
upper() lower()
upper() - 대문자로 변환
lower() - 소문자로 변환
공백제거함수 strip(), rstrip() , lstrip() - trim 활용
strip() - 문자열 양옆의 공백을 제거 ,
lstrip() - 왼쪽 공백 제거
rstrip() - 오른쪽 공백제거
( 공백은 띄어쓰기 ,탭 , 줄바꿈 ).
문자열 구성파악함수 - is00()
- isalnum() , isalpha() , isdentifier(), isdecimal(), isdigit(), isspace(), islower(), isupper(),
- isalnum() - 문자열 내 알파벳 or 숫자로 구성되어 있는지 확인
- isalpha() - 알파벳으로만 구성되어 있는지 확인
- isdentifier()- 식별자로 사용가능한지 확인
- isdecimal() - 정수 인지 확인
- isdigit() - 숫자로 인식가능한지 확인
- isspace() - 공백으로만 구성되어 있는지 확인
- islower() - 소문자로만 구성되어있는지 확인
- isupper() - 대문자로 구성되어 있는지 확인
문자열 찾기 - find() , rfind()
find() - 왼쪽부터 오른쪽으로 처음 등장 위치 찾기
rfine() -오른쪽부터 왼쪽으로 처음등자우이치 찾기
- string & in operator - 문자열 내부의 문자열 확인 연산자 in. ( return True, False )
문자열 자르기 - split()
문자열 자르기 함수 . split()
return 자료형 - 리스트 자료형을 출력함 .
Boolean
boolean operator
== , > , < , != , <= , >= ,
객체 판별
is, is not
논리 연산
not
and
or
정수 실수 문자열을 bool로 반드는함수 bool()
조건문
구조
if 식 :
참일때 실행
참일때 실행
날짜 시간 활용
#날짜 /시간 관련 기능 호출
#날짜 시간 관련 기능 호출 (모듈 )
import datetime
#현재 날짜 시간 호출
now = datetime.datetime.now()
#출력
print(now.year, "년")
print(now.month,"월")
print(now.day, "일")
print(now.hour,"시")
print(now.minute,"분")
print(now.second,"초")
#format() num->str
print("{}년 {}월 {}일 {}시 {}분 {}초".format( now.year, now.month, now.day, now.hour, now.minute, now.second ))
오전 오후 구분하는 프로그램
import datetime
now = datetime.datetime.now()
if now.hour<12:
print("현재 시각은 {}시로 오전입니다!".format(now.hour))
if now.hour >= 12:
print("현재 시각은 {}시로 오후입니다!".format(now.hour))
계절 구하기
import datetime
now = datetime.datetime.now()
if 3 < now.month <= 5:
print("{}월로 봄입니다".format(now.month))
if 5 < now.month <= 8:
print("{}월로 여름입니다".format(now.month))
if 8< now.month <= 11:
print("{}월로 가을입니다".format(now.month))
if 11 < now.month <=3:
print("{}월로 겨울입니다".format(now.month))
끝짜리 짝수 홀수
num = input("integer> ")
last_char = num[-1]
last_num = int(last_char)
if last_num == 1\
or last_num ==3\
or last_num ==5\
or last_num ==7\
or last_num ==9:
print("홀수")
if lsat_num ==2\
or last_num ==4\
or last_num ==6\
or last_num ==8:
print("짝수")
if last_char in "02468":
print("짝")
if last_char in "13579":
print("홀")
if~else elil
if condition:
참일때 실행 문장
else:
거짓일때 실행문장
if 조건A:
조건A가 참일때 실행
elif 조건B:
조건B가 참일때 실행
else:
모든 조건이 거짓일때 실행
False로 변환되는 값
: if 조건문에 매개변수 bool이 아닌 다른 값이 올때는 자동으로 bool로 변환하여 처리한다.
False 로 변환되는값은 None, 숫자 0, 0.0, 빈 컨테이너 ( 빈 문자열 , 빈 바이트열 , 빈 리스트 , 빈 튜플 , 빈 딕셔너리 등 ).
그 외는 모두 True로 변환된다.
Pass 키워드
if zero == 0 :
빈줄 대신 pass 넣어줘
else :
pass
raise NotImplementedError 아직 구현하지 않은 부분으로 오류를 강제로 발생시킬수있으니
passe대신 raise NotImplementedError를 자주 쓰도록 해라 .
리스트 list
-여러가지 자료를 저장할 수 있는 자료형.
대괄호 [ ] 내에 여러 종류의 자료를 선언할 수 있다.
array = [273, 32, 103, "string", True, False ]
print(array)
array = [ element1, element2, element3, element4, .... ]
array[0] = element1
array[1:3] = [element2, element3 ]
-> list_a = [273, 13, 21, "string", True, False ]
list_a[0] = "change"
list_a = [ 'change', 13, 21 ,'string , True, False ]
1. 대괄호 안에 음수를 넣어 뒤에서부터 element 선택가능
array[-1] = Falese
2.이중으로 리스트를 접근할수 있음 .
list_a[3][0] = 's'
3.리스트 안의 리스트를 사용할수 있음 .
test_a = [ [1,2,3] , [4,5,6], [7,8,9] ] // 리스트 3개를 가지는 리스트
test_a[1] , [4,5,6]
test_a[1][1] , 5
리스트 연산자 : 연결(+), 반복(*), len()
list elemnt 추가 : append() insert()
list.append( element ) - 리스트 뒤에 요소를 추가
list.insert( location , elemnt )
한번에 여러 요소 추가
extend() - 원시 리스트 뒤에 새로운 리스트의 요소를 모두 추가
list_a = [1, 2, 3]
list_a.extend([4,5,6])
= [1, 2, 3, 4, 5,6 ]
리스트 연결 연산자 및 요소 추가의 차이 ,
list_a + list_b 의 실행결과는 리스트가 연결되지만 원시 리스트 a b는 변화가 없을거임
extend() 사용하여 요소를 추가한다면 원시 리스트 a b 는 차이가 생김
리스트에 element. 제거
1. 인덱스 제거 : del () , pop ()
del list[index] - 특정 인덱스의 요소를 제거함 / 범위를 지정하여 한번에 제거가능 del list[3:6]
list.pop(index) - 매개변수를 입력하지 않으면 마지막 요소를 제거함
2. 값으로 제거 : remove(),
list.remove(value) - 가장 먼저 발견되는 하나만 제거함
3. 모두제거 : clear()
list.clear()
리스트 내부에 특정 값 확인 하기
1. in/ not in
value in list
value not in list
for 문
for i in range(100) :
print("a")
for 반복자 in 반복할 수 있는것 :
코드
반복할 수 있는것 = 문자열 리스트, 딕셔너리 범위 등.
array = [212, 1, 2, 3 ,5 ,7]
for elemnt in array:
print(element)
array의 요소 하나하나가 element에 들어가서 출력나옴
list - 인덱스 기반의 값 저장 방식의 자료형
list = []
------
딕셔너리 {}
딕셔너리 - 키 벨류 형식의 해쉬형식을 따름 .
var = {
ket : value,
}
dict_a = {
"name" : "ho",
"type " : "kwnag"
}
dic element
dict_a["name"]
dict_a["type"]
dict_b = {
"dirc" : ["a", "b"],
"cast" : ["b", "c", "d", "t"]
}
ex ]
dic = {
"name " : "7D 건조 망고 ",
"type " : "solt",
"ingredient" : ["망고", "설탕", "메타중아산" , "나트륨", "치자황색소"],
"origin": "필리핀"
}
print("name", dic["name"])
print("type", dic["type"])
dic["name"] = "8D 건조 망고"
딕셔너리 값 추가 제거
딕셔너리 값 추가
dic[ key] = value
del dic[key] = value
----------
ex)
dictionary = {}
print("element adding", dictionary )
dictionary["name"] = "new name"
dictionary["head"] = "new head"
dictionary["body"] = "new body"
print("element", dictionary)
------------------
dic = {
" name" : "new mang"
" type" : "monday"
}
del dic["name"]
dle dic["type"]
-----
find key in dic
operatior in
dictionary = {
"name" : "a",
"type" : "b",
"ingredient" : "c",
"origin" : "d"
}
key = input()
if key in dictionary:
print(dictionary[key])
else:
print( no key )
-------
get() - 딕셔너리의 키로 값을 추출하는 기능 . 존재하지 않는 키에 접근시 None으로 출력
dictionary = {
"name " : "a"
}
value = dic.get("nono")
print("vale", value)
if value == None:
print("ok")
-----
for key in dic:
code
--------------
반복문
1. 범위 range
range(A) -> 0 , 1, 2, ....., A-1
range(A,B) -> A, A+1, A+2, ....., B-1
range(A,B,C) -> A, A+C, A+2C, A+3C, ....., B-1
print( list[range(A)] ) -[ 0 , 1, ,2, 3, ...., A-1 ]
print( list[range(A,B)] ) -> [ A, A+1, A+2 ,...., B-1]
print( list[range(A,B,C) ] ) -> [ A , A+C, A+2C, A+3C, ....., B-1 ]
-
for list and range maxing
for i in range(len())
for i in range( e1 , e2 , -e3 )
for i in reversed(range(5))
-
-----
while
while bool :
string
-
문자열 리스트 딕셔너리 관련 함수
list
min (리스트 내부 최솟값 ) max ( 리스트 내부 최댓값 ) sum (리스트 합 )
reversed(). 리스트 뒤집기.
확장 슬라이싱
list [::-1]
enumerate() - 인덱스 획득 함수
딕셔너리 - items ()
ex = {
"A" : "a",
"B" : "b",
"C" : "c",
"D" : "d"
}
print("dictionary")
print("items():", ex.items())
print()
print("조합")
for key, elemnt in ex.items():
print("{} , {}".format(key,elemnt))
리스트 내포
-
list = [ 표현식 for 반복자 in 반복할수 있는 것 ]
list = [ 표현식 for 반복자 in 반복할 수 있는것 if 조건문 ]
array = []
for i in range(0 ,20 , 2):
array.append(i*i)
print(array)
array = [i*i for i in range(0,20, 2)]
print(array)
함수 생성하기
def 함수 이름():
코드
----
def 함수이름( 매개변수, 매개변수, ....):
코드
----------
def 함수이름( 매개변수. , 매개변수 , ....., *가변 매개변수 )
코드
가변매개변수 -> 리스트처럼 사용해
1. 가변 뒤에는 일반 변수가 올수 없다.
2. 가변은 하나만 사용할 수 있다.
--------------
기본 매개변수
ex ) print( value , ...., sep= ' ' , emd = '\n', file= sys.stdout, flush= False )
value - 가변매개변수
근데 뒤에 일반 매개변수가 왔음
그치만 매개변수 = 'value' 의형태임 이건 기본 매개변수임 . defulte값을 의미함.
1. 기본 매개변수 뒤에 일반 매개변수가 올수 없다.
---------------
키워드 매개변수
매개변수 이름을 직접적으로 지정하여 값을 입력해야한다 .
재귀함수
def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)
문제 :
같은 함수를 너무 많이 불러와서 사용해서 문제가됨 .
해결범 - memoization 메모화 .
딕셔너리를 사용하여 , 한번 계산한 값을 저장 , memo
딕셔너리에 값이 메모되어 처리를 수행하지 않고 곧바로 메모리 값을 리턴하여 코드의 속도를 빠르게 만듬 .
트리구조
노드 , 마지막 노드 리프 ,
튜플 , 람다 .
튜플 : 함수와 함께 많이 사용되는 리스트와 비슷한 자료형 , 리스트와 다른점은 한번 결정된 요소는 바꿀 수 없음
리스트와 비슷한 자료형
(데이터 , 데이터 ,데이터 ,데이터 ,.....)
요소 1개의 튜플
(데이터 , )
함수의 리턴에 많이 사용됨. - > 여러 값을 리턴하고 할당할 수 있기 때문.
람다 : 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭고 코드 공간 낭비라는 생각이 들때 함수를 간단하거 쉽게 선언하는 방법 .
- 함수의 매개변수로 함수 전달
lambda 매개변수: 리턴값
lambda x, y: x*y
filter() map()
fliter(함수, 리스트) - 리스트의 요소를 함수에 넣고 리턴값이 참인것으로 리스트를 새롭게 구성
map(함수, 리스트) - 리스트의 요소를 함수에 넣고 리턴 값으로 새로운 리스트를 구성
파일처리
1. 텍스트 파일
- 파일처리 루틴
파일 열기 -> 파일 읽기 -> 파일 쓰기 ,
1.1 파일 열기 -> open() ,
파일 객채 = open(문자열: 파일 경로, 문자열: 읽기 모드)
모드 w write mode 쓰기 / a append mode 뒤에 이어서 쓰기 / r read mode 읽기
파일 닫기 close()
파일 객체.close()
with 키워드 코드가 길어질때 open close 안까먹게 하는 코드
with open( 문자열 : 파일경로, 문자열: 모드) as 파일 객체 :
문장
2. 바이너리 파일
-이터레이터 튜플 제너레이터
1. 이터레이터
for 반복자 in 반복할 수 있는것
반복할 수 있는것 - 이터러블 - 내부 요소를 하나씩 차례대로 꺼낼 수 있는 객체. ( 리스트 , 딕셔너리 , 튜플 , 문자열 등 )
next() 함수 적용해 하나하나 꺼낼수 있는 요소를 이터레이터라고함 .
-제너레이터
파이썬의 특수 문법 구조 , 이터레이터를 직접 만들때 사용함 ,
함수 내부에 yield 키워드를 사용하면 제너레이터 함수가됨 . 일반적으로 호출되지 않음 .
next() 함수를 사용하여 내부의 코드를 실행할수 있음 .
오류 -
종류
1. 프로그램 실행 전 구문오류
2. 프로그램 실행 중 예외 런타임오류
기본 예외처리 ,
1. 조건문을 사용
isdigit() - 숫자로만 구성된 글인지 확인 하는 함수 ,
2. Try 구문 사용 .
try except
try :
예외발생 코드
except:
예외시 실행코드
예외시 실행코드에 아무것도 없을때 pass 키워드 넣자
try except else
try :
예외발생 코드
except:
예외시 실행코드
else:
예외가 발생하지 않을때 실행 코드 ,
finally 예외 발생하던 안하던 무조건 실행하는 코드
try :
예외발생 코드
except:
예외시 실행코드
else:
예외가 발생하지 않을때 실행 코드 ,
finally:
무조건 실행할 코드
예외처리 - 예외객체
try:
예외 구문
except 예외 종류 as 객체 활용 변수 이름:
예외 발생 실행 구문 .
Exception = > 예외처리 클래스 ,
as 키워드 - >
raise - > 강제로 예외 발생시키는 함수 .
모듈
: 코드를 분리 하고 공유함 ,
모듈 -> 여러 변수와 함수를 가지고 있는 집합,
표준 모듈 / 외부 모듈 이존재함 /
1. math
from -
from module import 변수 , 함수
random module
-
모듈 만들기 ,
__name__ == "__main__"
__name__ . 프로그램의 진입점을 엔트리 포인트 또는 메인 이라고 한다 .
엔트리 포인트에서 메인 내부의 __name__은 __main__이라고한다 .
모듈의 __name__
모듈내부의 __name__은 모듈의 이름을 나타낸다 .
현재 파일이 모듈로 실행되는지 엔트리 포인트로 실행되는지 확인가능함 ,
__init__.py file
__all__ < 리스트로 생성후 리스트에 지정된 모듈들이 from pak import * 전부 읽어지도록 함
클래스
C를 제외한 모든 언어는 객체 지향 프로그래밍
객체 지향이란 - 객체를 우선으로 생각해서 프로그램이하는 언어
클래스를 기반으로 객체를 만듬
객체 : 1 데이터를 먼저 고려함 , 여러가지 속성을 가지는 대상 ,
클래스
객체를 효율적으로 생성하기 위해 만들어진 구문,
class classname:
클래스 내용
인스턴스 이름 = 클래스이름 () -> 생성자 함수 ,
클래스를 기반으로 만들어진 객체를 인스턴스라고함 .
생성자 : 클래스 이름과 같은 함수 ,
class classname:
def __init__(self , 매개변수 ):
pass
-클래스 내부의 함수는 첫 뻔째 매개션부로 반드시 self를 입력해야함 , " self" 자기자신을 나타내는 딕셔너리 ,
self의 속성 기능에 접근시 self.<식별자> 로 접근해야함 ,
메소드
- 클래스가 가지고있는 함수 ,
class classname:
def methodname(self, 추가 매개변수 ):
pass
A라는 클래스를 기반으로 그 속성과 기능을 물려받아 새로운 클래스를 만드는 상속,
객체가 어떤 클래스를 기반으로 만들었는지 확인하는 isinstance()함수
파이썬의 기본적 제공하는 str()함수 혹은 연산자를 사용해서 클래스의 특정 함수를 홏풀할 수 있게 해주는 기능이 대표적이다 .
isinstance(인스턴스 ,클래스 )
'Script > PYTHON' 카테고리의 다른 글
[python] web Scraping & crawling ) 사용 방법 (0) | 2022.02.09 |
---|---|
[Data - Python] CSV 파일 총정리 (2) | 2022.01.26 |