파이썬 문법 간단 정리
Computer Science/python

파이썬 문법 간단 정리

#문자열 곱하기

a="python"
a*2

'pythonpython'

 

#문자열 길이

a="life is too short"
len(a)

 

파이썬 문자열 - index 0부터 붙음

뒤에서 부터 셀때 - -붙이고 뒤에서부터 센 숫자로 계산한다.

+) -0은 -를 붙여도 0이기 때문에 a[0]하고 같은 값이 된다.

 

 

#문자열 슬라이싱 [a:b]=a<=x<b (b 이전까지만 슬라이싱한다)

a="life is too short"
a[0:4]
#문자열을 0~3 인덱스 까지 슬라이싱한다

a[19:-7]
#문자열을 19~-8 까지 출력한다 -7은 포함하지 않음

- 슬라이싱 할때 끝을 생략하면 끝까지, 처음을 생략하면 처음부터 출력한다.

- 파이썬 문자열의 요소값은 변경할수 있는 값이 아니다. 따라서 immutable한 자료형이라고 부른다.

 

#문자열 포매팅

-> 문자열 안에 정수, 실수 등을 삽입하고 싶을 때 사용한다.

number =3
"I eat %d number" % number

number=10
day="three"
"I ate %d apple, I was sick for %s days" %(number,day)

%s 값은 어떤 형태의 값이든 변환해 넣을 수 있다.

 

#format 함수를 이용한 formatting

"I eat {0} apples".format(3)

"I eat {0} apples".format("five")

"I ate {0} apples. so I was sick for {1} days".format(number,day)

#인덱스 말고 변수 이름으로 넣는 방법도 있다.
"I ate {number} apples. so I was sick for {day} days".format(number=3,day=3)
"I ate {0} apples. so I was sick for {day} days".format(3,day=3)

 

#문자열 관련 함수들

a="hobby"
a.count('b') #b의 개수를 세어준다

a="Python is the best choice"
a.find('b') #b의 index를 찾아서 리턴한다, 존재하지 않으면 -1
a.index('b') #같은 역할을 한다. 대신 존재하지 않으면 오류 트리거

a="hi"
a.upper()
a.lower()
#a를 대문자/소문자로 바꿔준다

a="  hi"
a.lstrip() #a의 왼쪽 공백 삭제해줌

a="hi  "
a.rstrip() #a의 오른쪽 공백 삭제

a="life is too short"
a.replace("Life","Your leg")
'your leg is too short'

a="Life is to short"
a.split()
['life' 'is' 'too' 'short'] #default로 공백 기준으로 나눈다

a="a:b:c:d"
a.split(':') #특정값이 있으면 괄호 안의 값을 구분자로 해서 문자열을 나눠준다.
['a','b','c','d']

 

#파이썬 List

: 어떠한 데이터 타입도 호환 가능하며, single variable에 multiple item을 저장하기 위해 고안되었다. [ ] 으로 둘러싸여있다.

또, list는 아이템 삽입, 삭제등 변화가 가능하다.

a=[]
a=list()
c=['life','is','too','short']
d=[1,2,'life,'is']
e=[1,2,['life','is']] #리스트 안에 리스트를 집어넣을 수도 있다.

->모든 list값은 indexing된다.
e[2][0] #'life'를 리턴한다.
e[2] #life,is를 포함한 리스트를 포함한다.

 

#List slicing&operation

#List Slicing은 string과 동일한 방식이다.
a=[1,2,3,4,5]
a[0:2] #[1,2]
a[2:] #[3,4,5]

#Add list
a=[1,2,3]
b=[4,5,6]
a+b

#repeat list
a=[1,2,3]
a*3=[1,2,3,1,2,3,1,2,3]

#lenght of list
len(a)=3

#change item
a=[1,2,3]
a[2]=4
a==[1,2,4]

#delete list item
a=[1,2,3]
del a[1]
a==[1,3]

#item append
a=[1,2,3]
a.append(4)
a==[1,2,3,4]

a.append([5,6]) #item 째로 append한다.
a==[1,2,3,4,[5,6]]

a.sort()
a.sort(reverse=True) #내림차순

#리스트 뒤집기
a.reverse()

#index 찾기
a.index(3) #-> 3의 index리턴


#insert item
a=[1,2,3]
a.insert(0,4) #0번째 index에 4 삽입
a==[4,1,2,3]

#remove specific item
a=[1,2,3,1,2,3]
a.remove(3)
a=[1,2,1,2]

#pop()
a=[1,2,3]
a.pop() #가장 마지막 element return후에 delete
a.pop(1) #x index를 리턴하고 삭제한다.

#count()
a=[1,2,3,1]
a.count(1)

 

#Tuple

list와 거의 비슷하지만, 두가지가 다르다. ( )으로 둘러싸여있다는 것과. 아이템 변경,추가,삭제등이 불가능하다.

t1=()
t2=(1,)
t3=(1,2,3)
t4=(1,2,3,(4,5)

#indexing, slicing, addition, multiplication, length등 함수는 가능
#추가, 삭제, 변경등은 불가능

 

#Dictionary

- {Key1:value1},{Key2:value2},{key3:value3}....등등 각 요소가 key-value쌍으로 이루어져 있다. Key에는 불변하는 값을 사용하고 Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.

- value에는 List값도 넣을 수 있다.

a={1:'a'}
a[2]='b' #이런 식으로 선언해주면 자동으로 insert됨
a['name']='ashie'
a[3]=[1,2,3]
a=={1:'a',2:'b','name':'ashie',3:[1,2,3]}

del a[key] #key를 입력하면 지정한 key-value쌍을 지워준다.

#key를 통해 value 얻기
grade={'pey':10,'julliet':99}
grade['pey']==10

 

- key는 고유값이므로 중복되는 값이 존재할 경우 나머지 key-value값이 모두 무시된다. 

- key에 리스트는 쓸수 없으나 튜플은 쓸 수 있다. -> key는 무조건 불변한 값만 가능. 같은 원리로 key에 딕셔너리도 불가능하다. 

 

# Dictionary 함수

#key list 만들기
a={'name':'pey', 'phone':'01012345555','birth':'1118'}
a.keys()

#key만 모은 dict_keys 객체를 리턴한다.

for k in a.keys():
  print(k)
  #a.keys()값을 전부 프린트하게 된다.
  
#value list도 동일한 방법
a.values()

#key,value 쌍 얻기
a.items()
#key-value 쌍을 튜플로 묶은 dic_items 객체를 리턴한다\

#key-value쌍 모두 삭제
a.clear()

#key로 value 얻기
a.get('name') #a['name']과 동일한 값이지만 오류 발생한다는게 다름

#해당 key가 딕셔너리 안에 있는지 조사 'in'
'name' in a

 

#set

- 집합 자료형 -> set 키워드를 통해서 만들 수 있다.

- 중복을 허용하지 않으며(중복을 제거하는 filter역할), 순서가 없다

- set의 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환 후에 해야 한다.

s1=set([1,2,3])
s1={1,2,3}

s2=set('Hello')
s2={'H','l','o','e'} #중복 제거&순서 없음

#순서 없어 인덱싱 못하므로 리스트나 튜플로 변환후 인덱스로 접근해야함
l2=list(s2)
l2[0]=='H'
lt2=tuple(s2)
lt2[1]='l'

 

-교집합 : s1&s2 or s1.intersection(s2)

-합집합 : s1 } s2 or s1.union(s2)  -> 중복된 값은 한개씩만 출력됨

-차집합 : s1-s2 or s1.difference(s2) -> s1에는 있고 s2는 없는 값 출력

 

#값 1개 추가
s1=set([1,2,3])
s1.add(4)
s1=={1,2,3,4}

#값 여러개 추가
s1.update([4,5,6])
s1=={1,2,3,4,5,6}

#특정값 제거
s1.remove(2)
s1=={1,3,4,5,6}

 

#Boolean

: True & False 값 두가지만 갖는다.

: 문자열, 넘버, list, tuple, set, dictionary등 거의 모든 자료형은 null일 때나 empty 상태를 제외하고 모두 true이다. 

: [],{},(),0,None 등은 모두 false

 

 

#변수 선언 방식 

 - Camel CAse : 단어마다 첫번째 단어를 제외하고 첫글자는 대문자 : myVariableName

 - pascalcase : 모든 단어 첫글자를 대문자 : MyVariableName

 - snakecase : 문자 구분자를 _ 로 한다 : my_variable_name

 

# 변수 생성 방식

a,b=('python','life')
(a,b)='python','life'
[a,b]=['python','life'] #튜플이나 리스트로 변수 여러개 한번에 선언 가능

a=3
b=5
a,b=b,a  #swap이 한줄로 가능

 

 

#for문의 기본 구조

for 변수 in 리스트(or 튜플,문자열):
 수행문장~
 
test_list=['one','two','three']
for i in test_list:
   print(i)
   
   
a=[(1,2),(3,4),(5,6)]
for (first,last) in a:
  print(first+last)
  
  
 marks=[90,25,67,45,80]
 for mark in marks:
   number=number+1
   if mark<60:
     print("%d 번 학생은 불합격입니다" % number)
   else:
     print("%d번 학생은 합격입니다" % number)
     
 #for문은 숫자 리스트를 자동으로 만들어주는 range 함수와 함께 사용하는 경우가 많다.
 for i in range(0,10):  
   print(i)
   
 for number in range(len(marks)):
 
 #처음 범위를 안지정하면 자동으로 0~부터 끝 인덱스까지 진행된다.
 
 #list 내포를 사용하면 좀더 효율적으로 문제를 풀 수 있다.
 a=[1,2,3,4]
 result=[num*3 for num in a]
 
 [표현식 for 항목1 in 반복가능객체1 if 조건문 1
        for 항목2 in 반복가능객체1 if 조건문 2
        for 항목3 in 반복가능객체1 if 조건문 3...]

 

 

#함수

parameter : 매개변수, 함수와 메서드 입력 변수 명 (실체가 변수)

argument: 전달인자, 함수와 메서드의 입력 값 (실체가 value)

 

 

#key-value syntax 로 argument 전달
def add(a,b)
 return a+b

result=add(a=3,b=7)

#몇개의 argument가 전달될지를 모를때
def add_many(*args):
   result=0
   for i in args:
       result=result+i
   return result
   
result=add_many(1,2,3)
result=add_many(1,2,3,45)

#둘을 혼합해서 사용 가능
def add_mul(choice, *args)

#keyword parameter는 함수를 호출할때 인자 값뿐만 아니라 그 이름까지 명시적으로 지정해서 전달하는ㄴ 방법
def add(a=0,b=0,c=0)
    return a+b+c
    
 add()
 #명시적으로 0이 대입되어있는 상태
 # 키워드 파라미터가 몇개 올지 모를때
 def add (**kwargs)

 

-lambda expression

  -> lambda parameter1,parameter2,.... : expression

add=lambda a,b:a+b (def add와 같은 역할..)

 

-한줄에 결과값 출력

print(i,end='  ')

 

-파일 읽는 여러가지 방법

 1) readline 사용 : 파일을 한줄한줄 읽어옴

f=open('file.txt','r')
while True:
    line=f.readline()
    if not line:break
    print(line)
f.close()

#readline()은 더이상 읽을 줄이 없을 경우 빈 문자열' '을 리턴한다

 

 2) readlines: 모든 내용을 한꺼번에 읽어옴.  각각의 줄을 요소로 갖는 리스트로 돌려줌

f=open('file.txt','r')
lines=f.readlines()
for line in lines:
	line=line.strip() #줄 끝의 줄 바꿈문자를 제거한다.
	print(line)
f.close()

 3)read: 파일의 내용 전체를 문자열로 돌려줌.

data=f.read()
print(data)
f.close()

 

-파일에 새로운 내용 추가

: 이미 존재하는 파일을 w 모드로 열면 기존 내용이 전부 사라지게 된다. 'a' 모드로 열어서 write해야 기존 파일 뒤에 이어서 작성이 가능하다.

f=open("c:/doit/새파일.txt",'a')
for i in range(11,20)
  data="%d번째 줄입니다"%i
  f.write(data)
 f.close()

 

#Object VS Instance

클래스로 만든 객체를 해당 클래스의 instance라고도 한다.

-> 즉 인스턴스라는 말은 특정 객체가 어떤 클래스의 object인지 관계 위주로 설명할 때 사용된다.

a = Cookie()

일때, a는 객체, a는 Cookie클래스의 인스턴스라는 표현이 자연스러운 것.

 

# Self parameter

: c++에서 this랑 같은 역할 한다고 보면 됨

=> class의 current instance를 의미한다. class에 딸려있는 변수들을 사용하기 위함.

- 어떤 method이든 가장 첫번째에 와야 한다.

 

#Constructor

__init__(self) : 메소드를 통해서 객체가 만들어질때 실행된다.

 

#상속

parent class: base class

child class: 다른 클래스로부터 상속받은 클래스 class child(parent): 식으로 안에 넣어서 상속

-> 현존하는 클래스의 특징을 제거하지 않고 사용하기 위함이다

-> child class는 부모 클래스의 함수를 오버라이딩 할 수 있다.

 

#클래스 변수

: 모든 클래스로 만들어진 객체내에서 변경 없이 통용되는 변수를 의미한다

class 이름 선언부 다음에 바로 온다

 

#인스턴스 변수

method 변수 내에서 선언되며, 오직 그 인스턴스 내에서만 같은 값으로 사용된다.

'Computer Science > python' 카테고리의 다른 글

파이썬으로 순열 경우의 수 구하기  (0) 2021.10.30
Python에서의 Testing/Debugging  (0) 2021.10.24