파이썬 요약
파이썬 기초
import math
import sys
class test:
def __init__(self, arr):
self.arr=arr
def logArr(self):
for i in self.arr:
print(i)
inp = list(map(int,sys.stdin.readline().split()))
cls=test(inp)
cls.logArr()
파이썬 입출력
#입력 방법1
inp=input("값을 입력하세요") #값을 입력하지 않으면 빈 문자열
#방법2 단일 정수를 받을 때
import sys
inp = int(sys.stdin.readline())
#방법 3 여러 정수를 받을 때
import sys
inp = list(map(int,sys.stdin.readline().split()))
#map클래스를 리스트 튜플 셋 딕셔너리 등 자동화 가능
#출력방법
print(inp)
파이썬 자료형
#변수 생성
x=30 # int형
y="30" # str형
z={"a": 1, "b": 2} # dict 형
type() # 출력값: <class 'dict'>
#자료형 변환 (파이썬은 자료형이 달라져도 변수에 대입 OK)
y=int(y) # int 형 30 이 출력,
- 대입 연산시(=) 값이 복사되는것
int | 약 절대값 약 21억의 자연수(32비트) |
---|---|
float | 유효자리 15의 약 절대값 10^308(64비트) |
str | 문자열 |
tuple | 튜블 |
bool | 참 거짓 |
그외 | long(무한 자연수), complex, decimal(유효자리 넓은 정수), None(null) |
- 대입 연산시(=) 주소가 복사되는것(복사시 같은 것을 가르키게 됨)
list | 리스트 [1,2,3] |
---|---|
set | 셋 {1,2,3} |
dict | 딕셔너리 {”a”:1,”b”:2,”c”:3} |
class | 클래스 class name(parent): |
numpy, pandas | 데이터 처리 라이브러리 |
파이썬 연산
a=10
b=4
result=0
#가감승제
result=a + b # 14
result=a - b # 6
result=a * b # 40
result=a / b # 2.5 (자료형 변환)
result=a // b # 2 (변환없이 버림)
#나머지 제곱
result=a%b # 2
result=a**b # 10^4
#문자열 연산
a="가"
b="나"
c=1
print(a+b) # 가나 (c는 자료형이 다르므로 안됨)
print(a,b,c)# 가나1
#비트 연산 (&,|,^,~) 왠만해선 사용하지 말것
result= a&b # 0b1010 0b100 0
#연산하고 대입
b+=a # b=b+a 와 동일
#변수 삭제
del b # 이후 새 b를 생성하기 전까지 사용하면 에러
- 숫자형 끼리는 자동 형변환을 해줌
- 숫자형을 문자열로 자동으로 바꿔주진 못함
파이썬 조건문
# 동등비교
"1"==1#False
[1]==1
1==1.0 #True
complex(real=1,imag=0)==1
1==1
#비교
1<1.1 #True
1>1.1 #False
1<=1 #True
1>=1 #True
#if문
a=10
b=11
if a>b:
print("a가 b보다 큽니다") #a가 클경우
elif a<b:
print("b가 a보다 큽니다") #b가 클경우
else:
print("같습니다") #같을 경우
- 자료형이 다르면 False,
- 숫자 자료형은 보통 형변환을 자동으로 해줌
파이썬 반복문
#0~9까지 출력하는 반복문
#while 문
count = 0
while count < 10:
print(count)
count += 1
#for 문
for count in range(0, 10):
print(count)
# 리스트,튜플 등의 반복
for i in [0,1,2,3,4,5,6,7,8,9]:
print(i)
#리스트 튜플 등의 전체 반복
tuple(map(int,[0,1,2,3,4,5,6,7,8,9]))
#딕셔너리 반복
dic={'0': 0,
'1': 1,
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9}
for key, value in dic.items():
print("{}:{}".format(key,value))
- break 구문을 사용해서 언제든지 반복문을 종료
- continue 를 사용해서 반복문을 다음단계로 강제 진행
파이썬 문자열
#문자열 생성
mystr=" abcd efgh "
mystr=' abcd efgh '
mystr="""Hello, world!
안녕하세요.
Python입니다.""" # 여러줄인 경우
mystr=str(10)# '10' #형변환
#문자열 다루기 (기본적으로 원본에는 영향 없다)
mystr=" 012345 가나다라 "
mystr+"결합된 문자" # " 012345 가나다라 결합된 문자"
mystr.strip() # "012345 가나다라" #좌우 공백 제거
#(입력값을 넣으면 넣은 값들 제거)
"ABCD".lower() # "abcd" (소문자화, 반대는 upper())
mystr.replace("012345","abcd") # " abcd 가나다라 "
str.join(" ",["안녕","하세요","1234"]) # **'안녕 하세요 1234'**
mystr.find("5") # 7 #문자열을 찾아서 인덱스 반환(없으면 -1 반환)
#포맷팅
formating="문자열: {}".format("문자열 입니다")
formating="문자열: {1}, {0}".format("문자열 입니다", 100)
#숫자도 형변환 해줌
파이썬 배열
[이 단원 요약] 이것만 외우면 된다!!
mylist=[1]
mylist.append(2)
mylist.pop()
print(mylist,len(mylist))
mytuple=(1)
print(mytuple)
mydic={"1":1}
mydic["2"]=2
mydic.pop("2")
print(mydic.items(),len(mydic))
myset={1}
myset.add(2)
myset.discard(2)
print(myset,len(myset))
파이썬 리스트
#리스트 생성
lis=[] # 빈 리스
lis=list() # 빈 리스트
lis=list(range(10)) # [0~9] 까지의 리스트
#레인지 생성
range(10)# [0,9) 레인지
range(0,10,2)# [0,9)의 2의 배수 레인지
list(range(10)) # [0,9) 리스트
tup(range(10)) # [0,9) 튜플
#리스트 비교(자료형이 같아야 한다)
lisa=[0]
lisb=[0]
lisa==lisb # True
lisa==0 # False
#리스트
lisa+lisb #[0,0]
lisa*3 #[0,0,0]
#리스트 다루기
lis[0] #0 0 번째 요소
lis[-1] #9 뒤에서 1번째 요소
lis[0:5:2]# [0,2,4] [0,5)까지 1칸씩 뛰어서(슬라이스)
len(lis) #리스트의 길이 10 !!!!
lis.count(0) #0이 몇개 있는지 반환
lis.index(10) #입력값에 해당하는 값의 인덱스(없음 에러)
100 in lis #False 리스트에 값이 있는지 확인
#아래 메서드들은 모두 원본 리스트에 영향을 줌\
#중요한 메서드 append,pop, sort
lis[len(lis):]=[0]#맨 뒤에 0 추가
lis[len(lis):]=[1,2]#맨 뒤에 1,2 추가
lis.append(10)# 맨 뒤에 10 추가(중요) !!!!
lis.extend([11,12]) # 맨 뒤에 11,12 추가
lis.insert(0,100) # 0번째 인덱스에 100 추가(한칸씩 밀린다)
lis.remove(100) #입력값을 하나 제거(맨 앞부터, 한칸씩 밀림)
lis.pop() # 맨 뒤의 값 제거, 반환(중요) !!!!
lis.sort() # 정렬
lis.reverse() #역순
lis[0]=-1 # 0 인덱스에 -1 대입
lis.copy()#리스트를 카피함
#(단, 다차원 형태면 주소가 복사됨(주의))
lis.clear()#리스트를 비움
#리스트 컴프리헨션
mylis=[[0,1],[2,3],[4,5]]
newlis=[i+i for i in mylis if i[0]<4]
# [[0, 1, 0, 1], [2, 3, 2, 3]]
#다차원 리스트
lis=[[0,1],[2,3]]#[
[0,1],
[2,3]
]
lis[0][0] # 0
lis[0][0:1] # [0]
lis[0:1] # [[0,1]]
- 리스트, 튜플, 맵 모두 인덱스에 해당하는 원소가 없으면 에러발생
파이썬 튜플
#튜플 생성(리스트와 비슷함)
tup=() # 빈 리스
tup=tuple() # 빈 리스트
tup=(0, 1, 2)# [0~9] 까지의 리스트
tup=tuple(list())
tup=((0,1),(2,3))
#튜플 다루기
len(tup) #튜플의 길이
tup[0] #0 번째 요소
tup[0:1:1]#[0,1) 1간격으로 뽑은 튜플
#튜플 비교(자료형이 같다면 같은것은 같게 취급)
tupa=(0,1)
tupb=(0,1)
lisa=[0,1]
tupa==tupb # True
tupa==lisa # False
#그외 메서드
#count(찾을값), index(찾을값) 찾을값 in (튜플)
파이썬 딕셔너리
#딕셔너리 생성
dic = {}
dic = dict()
dic = {"0": 1, "1": 2,"2":3} #문자열을 인덱스로 줄수 있다.
#딕셔너리 다루기
dic["0"] # "0" 인덱스의 값 1
dic.get("0", 0) # 위와 동일, 디폴트 값을 줄 수 있다
dic["0"]= 0 # "0" 인덱스에 0 대입(없으면 추가)
dic.pop("0", 0) # 키 값을 반환하고 딕셔너리에서 없앤다.
#(두번째 인자는 디폴트값)
del dic["1"] #"1" 인덱스 값을 제거
dic.items() #딕셔너리의 키 값 쌍을 모두 가져옴 [(키,값)]
dic.copy()#리스트를 카피함
#(단, 다차원 형태면 주소가 복사됨(주의))
dic.clear()#딕셔너리를 비움
#딕셔너리 반복
for key, value in dic.items():
print("{}:{}".format(key,value))
파이썬 셋
#셋 생성
myset={1,2,3,1} #{1,2,3}
#셋 다루기
len(myset)
1 in myset # True
#셋 집합 연산(&,|,^}
{1,2,3} & {2,3,4} #{2,3}
파이썬 심화
파이썬 메서드
#기본적인 사용
def func(input1=1, input2=2):
result= input1+input2 #result는 밖의 값
return result #값을 반환
func(input1=10)
#위치인수
def func(*inputList):
print(inputList)
func(1,2,3,4,5)
#키워드인수
def func(**inputDic):
print(list(inputDic.items()))
func(a=1,b=2)
#클로저(범위)
x = 10 # 전역 변수
def foo():
x=11
print(x) # 11
foo()
print(x) # 10 (내부에서 대입하면 내부에 지역변수가 생긴다)
(외부에는 영향을 못끼친다)
- 입력값에 디폴트 값을 줄 수 있다(예: input1 = 1 )
- 값 입력시 넣을 곳 이름을 지정 가능
- 위치인수(), 키워드(*) 매개변수는 디폴트 불가
- 재귀호출 역시 가능하다(다만 코테 이외에는 추천하지 않는다)
- 클로저 밖의 값을 쓸려면,
nonlocal
,global
을 써야한다.
파이썬 람다
def func(x):
if x%2==0:
return str(x)
else:
return x
#위 코드와 같은 기능을 하는 함다
func=(lambda x: str(x) if x % 2 == 0 else x)
func(2)
파이썬 클래스
#파이썬 클래스
class Lineage:
def __init__(self):
print("안녕하세요")
#상속 오버라이드
class MidClass(Lineage): #다중 상속 가능
__rank="[브론즈]" #클래스 변수 (__를 붙이면 private)
def __init__(self, user): #클래스 초기화 함수를 오버라이드
super().__init__() #부모를 명시적으로 불러야 함
self.user=user # 인스턴스 속성
print("활용을 시작해 볼까요", MidClass.rank, self.user)
def func(self): #self를 붙여야 인스턴스 함수가 됨
MidClass.rank,
print()
@classmethod #클래스 메서드 생성
def classFunc(cls): #self가 없음. cls가 있음
print(cls.rank)
MidClass("가나다")
MidClass.classFunc()
파이썬 예외
try: #실행할 코드
print("실행중")
#raise Exception(에러메시지) #에러 발생사카
except Exception as e: #예외 발생시 코드
print("에러 발생")
else: # 예외 발생 안할때 코드
print("에러 비발생")
finally:
print("반드시 실행")
파이썬 임포트
#방법 1
import sys # sys 패키지를 불러옴
inp = list(map(int,sys.stdin.readline().split()))
#방법 2
from sys import stdin # stdin 만 불러옴
inp = list(map(int,stdin.readline().split())) #sys를 안써도 됨
파이썬 익스포트
#파일 a.py
vari = 10
def func():
print("파일 a의 함")
class cl:
def __init__(self):
print("파일 a의 클래스")
if __name__ == '__main__':
func()
cl()
print(vari)
#파일 main
import 파일a
Ghost