[Python] 의미 및 관련 예제 풀이
Python?
- 기본적으로 인터프리터(해석기) 위에서 실행되는 언어
- 인터프리터 언어는 프로그램의 코드가 한 라인씩 순서대로 해석되고 실행되기를 반복함
- 코드가 완전히 작성되지 않아도 작성된 부분까지 테스트를 위해 컴파일 없이 바로 실행이 가능함
- 들여 쓰기 조심해야 하고 세미클론이 없으며 확장자는 py
Python의 기본 형태
# hi 출력
print("hi")
# for문으로 0부터 9까지 출력
for i in range(10):
print(i) # 들여쓰기를 하지 않으면 오류 발생
# 변수 선언 : 뒤에 오는 자료형에 따라서 데이터 타입이 결정됨
a = 15
type(a) # <class 'int'>
Python의 자료형
01) 숫자 (Numeric)
- 정수(Integer), 실수(Float), 복소수(Complex)
# 정수
a = 3
b = -2
type(a) # <class 'int'>
type(b) # <class 'int'>
# 실수
a = 3.14
b = 8.9
type(a) # <class 'float'>
type(b) # <class 'float'>
# 복소수
a = 3 + 4j
type(a) # <class 'complex'>
02) 문자열 (Str)
- 단어나 문장이 작은따옴표('')나 큰 따옴표("")로 감싸져 있는 형태
- ':(클론)'을 사용하여 문자열을 자를 수 있음
- str [시작 문자:자를 문자:step]
- 자를 문자를 안 적어주면 문자의 끝까지 가고 step을 안 적어주면 기본값은 1임
# 문자열
a = "hi"
b = "Hello, World!"
type(a) # <class 'str'>
type(b) # <class 'str'>
s = "가나다라마바사"
print(s[0]) # 가
print(s[0:2]) # 가나
print(s[1:2]) # 나
print(s[5:6]) # 바
print(s[-1]) # 사
print(s[-1:-5]) # 공백
print(s[-3:]) # 마바사
print(s[-3:-2]) # 마
03) 논리 (Boolean)
- True, False의 값으로 조건을 판단할 때 사용하며 첫 글자는 대문자 형태
# 논리
a = True
type(a) # <class 'bool'>
print(5 > 100) # False
x, y = 100, 200
print(x != y) # True
04) 리스트 (List)
- 다수의 데이터를 저장하는데 사용되며 리스트에 포함된 데이터는 '요소(Element)'라고 부름
- 리스트는 각 요소의 고유한 위치(Index)를 가지고 이 위치를 통해 개별 요소에 접근함
- '[]'를 사용하여 정의함
# 리스트
a = [1, 2, 3]
type(a) # <class 'list'>
print(a[0]) # 1
print(a[1]) # 2
print(a[2]) # 3
arr = [10, 20, 30, 40, 50]
print(type(arr)) # <class 'list'>
print(arr) # [10, 20, 30, 40, 50]
print(arr[0]) # 10
print(arr[3:]) # [40, 50]
print(arr[3:-1]) # [40]
# append로 값 추가하기
arr.append(60)
print(arr) # [10, 20, 30, 40, 50, 60]
arr.insert(1, 11) # 인덱스[1] 위치에 11을 넣어줌
print(arr) # [10, 11, 20, 30, 40, 50, 60]
# 값 삭제하기
arr.remove(11)
print(arr) # [10, 20, 30, 40, 50, 60]
# 역순정렬
arr.reverse()
print(arr) # [60, 50, 40, 30, 20, 10]
# 순차정렬
arr.sort()
print(arr) # [10, 20, 30, 40, 50, 60]
# extend로 값 추가하기
temp = [10, 11, 12]
temp.extend('html')
print(temp) # [10, 11, 12, 'h', 't', 'm', 'l']
05) 튜플 (Tuple)
- 리스트와 비슷하지만, 한 번 생성되면 변경이 불가함
- 모든 자료형이 다 들어갈 수 있으며 통일되지 않아도 되고, 다른 튜플까지 포함할 수 있음
- 불변의 데이터 구조를 지니고 각 요소의 Index를 가지고 있음
- '()'를 사용하여 정의함
# 튜플
a = (1, 2, 3, 4)
type(a) # <class 'tuple'>
a = (10, False, 3.14, "Hi")
print(a[0]) # 10
print(a[1]) # False
print(a[2]) # 3.14
print(a[3]) # Hi
print(a[4]) # 없는 인덱스는 오류 발생
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
print(a[4])
IndexError: tuple index out of range
# a의 길이 출력
print(len(a)) # 4
# (a의 길이 - 1) = a[3] 출력
print(a[len(a)-1]) # Hi
# 중간에 값을 바꾸기 : 오류발생 (불변 객체라서 값 변경 불가)
a[0] = 100
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
a[0] = 100
TypeError: 'tuple' object does not support item assignment
# for문으로 출력
for i in a:
print(i)
# 10
# False
# 3.14
# Hi
# a 튜플에 b를 연결하기
a = (100, 200, 400, "hi", False)
b = a + (500, 600)
print(b) # (100, 200, 400, 'hi', False, 500, 600)
print(b[3:]) # ('hi', False, 500, 600)
06) 딕셔너리 (Dictionary)
- 키(key)-값(value)이 쌍으로 구성된 형태로 키는 값을 식별하는 역할을 하며 동일한 키를 가질 수 없음
- '{}'를 사용하여 정의함
# 딕셔너리
d = {"name": '한여름', 'age': 20, 'home': False}
print(d) # {'name': '한여름', 'age': 20, 'home': False}
# 데이터 타입
print(type(d)) # <class 'dict'>
# key가 name인 value 출력
print(d['name']) # 한여름
# key 출력
print(d.keys()) # dict_keys(['name', 'age', 'home'])
# value 출력
print(d.values()) #d ict_values(['한여름', 20, False])
print(type(d.keys())) # <class 'dict_keys'>
print(type(d.values())) # <class 'dict_values'>
# key에 해당하는 항목 포함 여부 (정확히 일치해야 True가 나옴)
print('addr' in d.keys()) # False
print('age' in d.keys()) # True
07) 집합 (Set)
- 순서와 중복이 없는 값들이 모인 데이터 구조로, 인덱스로 접근이 불가함
- 특정 값이 포함되어 있는지 확인할 수 있음
- '{}'를 사용하여 정의함
# set
s = {10, 20, 30, 40, 30}
print(s) # {40, 10, 20, 30} 중복값 허용하지 않음
# add로 값 추가하기 (순서는 랜덤으로 추가됨)
s.add(50)
print(s) # {40, 10, 50, 20, 30}
print(type(s)) # <class 'set'>
# update로 값 추가하기
s.update([60, 70, 80])
print(s) # {70, 40, 10, 80, 50, 20, 60, 30}
# add는 한 가지의 값, update는 여러가지의 값을 추가할 수 있음
# 70이라는 값 삭제
s.remove(70)
print(s) # {40, 10, 80, 50, 20, 60, 30}
# 뽑히는 순서가 없기 때문에 인덱스를 쓸 수가 없음
for i in s:
print(i)
# 40
# 10
# 80
# 50
# 20
# 60
# 30
# set에서 값이 있는지 확인
# 70이 s안에 있어?
print(70 in s) # False
print (30 in s) # True
print (11 not in s) # True
08) 함수
- 반복적으로 사용되는 부분을 효율적으로 관리하기 위해서 사용
- def라는 키워드를 사용하여 입력
# 함수
def 함수_이름(매개변수):
수행할_문장1
수행할_문장2
...
# 들여쓰기가 이어지면 함수를 계속 정의한다는 뜻
# 예제 1
def print():
abc
cd
efg
type(print) # <class 'function'>
# 예제 2
def add(a, b):
return a+b
a = 3
b = 4
c = add(a, b) # add(3, 4)의 리턴값을 c에 대입
print(c) # 7
# 예제 3
class MyPass:
def byPass(self): # 기본적으로 자기 자신이라는 뜻으로 self를 붙여줌
print("pass")
myPass = MyPass()
myPass.byPass() # pass
09) 얕은 복사 vs 깊은 복사
- 얕은 복사는 주소 값을 참조함
- 깊은 복사를 완전히 다른 객체로 만들어줌
# 얕은 복사
s = {10, 80, 50, 40, 20, 60, 30}
s1 = s
s.remove(40)
# 값이 같음
print(s) # {10, 80, 50, 20, 60, 30}
print(s1) # {10, 80, 50, 20, 60, 30}
# 깊은 복사
s2 = s.copy() # 다른 객체로 만들어줌
s.add(100)
print(s) # {100, 10, 80, 50, 20, 60, 30}
print(s2) # {80, 50, 20, 10, 60, 30} 100의 값이 추가가 안됨
Python 관련 예제
예제 1 : 데이터 타입 'list []'
a = "REMEMBER NOVEMBER"
b = a[:3] + a[12:15]
print(b) # REMEMB
c = "R AND %s" % "STR" # %s는 뒤에 내용을 그 자리에 넣음
print(c) # R AND STR
print(b+c) #REMEMBR AND STR
예제 2 : 데이터 타입 'set {}'
a = {'일본','중국','한국'}
a.add('베트남')
a.add('중국') # 중복값 허용 안함
a.remove('일본')
a.update(['홍콩','한국','태국'])
# 순서가 없음
print(a) # {'베트남', '홍콩', '한국', '태국', '중국'}
예제 3 : 데이터 타입 'list []'
# 파이썬의 print() 기본 출력은 엔터
# 엔터 안 치고 값이 옆에 붙이기
print('출력', end='')
print('출력', end='')
print('출력', end='')
#출력출력출력
lol = [[1,2,3],[4,5],[6,7,8,9]]
print(lol[0]) # [1, 2, 3]
print(lol[2]) # [6, 7, 8, 9]
print(lol[2][2]) # 8
print(lol[2][1]) # 7
for sub in lol:
for item in sub:
print(item, end=' ')
print()
# 1 2 3
# 4 5
# 6 7 8 9
예제 4 : 데이터 타입 'function'
def exam(num1, num2=2):
print('a=', num1, 'b=', num2)
# 문자열을 나열하여 출력하면 중간에 공백이 들어감
exam(20) # 값이 안 들어왔을 때 자동으로 num2는 2가 됨
# a= 20 b= 2
예제 5 : 데이터 타입 'list [], function'
class good:
li = ["seoul","kyeonggi","inchon","daejeon","daegu","pusan"]
g = good()
str01 = ''
for i in g.li:
str01 = str01 + i[0]
print(str01) # skiddp