학습 리스트
- 반복문 (while, for)
- 진행형 리스트
- 다중 인자 순회 리스트
- enumberate()
- pass
- continue
- 조건문 (if, elif, else)
- 클래스
- class / instance
- object
- 매직 메소드
- built in function
반복문
(1) while
- while True or False
<예시>
a = 10
while a < 15:
print('hello world')
a += 1
#hello world
#hello world
#hello world
#hello world
#hello world
<예시2 : 무한반복>
a = 10일때 break(탈출)하므로 10까지 출력한다.
a = 1
while True:
print('hello world', a)
if a > 9:
break
a += 1
# hello world 1
# hello world 2
# hello world 3
# hello world 4
# hello world 5
# hello world 6
# hello world 7
# hello world 8
# hello world 9
# hello world 10
else 코드를 추가해도 'good job'이 출력이 안되고 예시2와 똑같이 출력이 된다.
a = 1
while True:
print('hello world', a)
if a > 9:
break
a += 1
else:
print('good job')
else는 while문이 정상적으로 종료되었을 때에만 실행이 되는 아이이다. 그래서 else가 아닌 then이 되어야 한다는 말도 있다.
a = 1
while a < 5:
print('hello world', a)
if a > 9:
break
a += 1
else:
print('good job')
#hello world 1
#hello world 2
#hello world 3
#hello world 4
#good job
while False: 도 정상 종료로 본다. 따라서 위의 두 경우 모두 정상 종료이므로 while문 후 else문을 실행한다.
while False:
print('hello world')
else:
print('good job')
#good job
(2) for
- for i in (순회 가능한 오브젝트)
- <예시 : list> 리스트는 순회가 가능하고 순서도 있다.
l = [10, 20, 30, 40]
for i in l:
print(i)
#10
#20
#30
#40
- <예시: set> set은 순회는 가능하지만 순서가 없으므로 무작위로 값이 나온다.
s = {10, 20, 30, 40, 10, 10, 10}
for i in s:
print(i)
#40
#10
#20
#30
- <예시: dictionary> key값만 순서대로 순회를 한다.
d = {'one' : 1, 'two':2}
for i in d:
print(i)
#one
#two
- <예시2> 하지만 위의 예시들과 달리, for문은 주로 아래와 같은 형태로 사용한다.
for i in range(10):
print(i)
#0
#1
#2
#3
#4
#5
#6
#7
#8
#9
range는 print와 같이 built in function, 즉 파이썬에서 이미 정의해준 함수이다. 그러니까 range(10)은 0~9까지 만들어주는 함수이다.
(+) range(start, stop, step) : 슬라이싱과 같은 구조
print(type(range(10)))
#<class 'range'>
파이썬 2.0에서는 range()가 list였으나, 파이썬 3.0이후로는 range라는 타입으로 새로 만들어졌다.
print(type(range(10)))
print(1, list(range(10)))
print(2, list(range(5, 10)))
print(3, list(range(2, 10, 2)))
print(4, list(range(10, 5, -1)))
print(5, list(range(-10)))
# 1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 2 [5, 6, 7, 8, 9]
# 3 [2, 4, 6, 8]
# 4 [10, 9, 8, 7, 6]
# 5 []
- <예시3 : for문의 문자열 출력> 많이 쓰는 형태이므로 잘 알아두자.
for i in 'hello world':
print(i)
# h
# e
# l
# l
# o
# w
# o
# r
# l
# d
- <예시4: for문에서 사용하는 else (정상종료)>
for i in range(10):
print(i)
else:
print('good job')
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# good job
for i in range(10):
print(i)
if i == 5:
break
else:
print('good job')
# 0
# 1
# 2
# 3
# 4
# 5
진행형 리스트
- [(출력할 내용) (반복할 i범위) (반복할 j범위) ... ]
- ex) ['hello' for i in range(2,5) for j in range(2, 5)]
- 위의 예시의 for문이 아닌 for, if 문도 중첩할 수도 있다.
<예시5: 0~100 리스트 한 번에 만들기>
l = list(range(101))
print(l)
"""[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100]"""
좀더 복잡한 계산식을 넣고 싶지만 옵션이 그만큼 없다. 그래서 "진행형 리스트"라는 것이 있다. 리스트만 있는 게 아니라, 튜플, 딕셔너리, .. 전부 다 있다. 하지만 리스트에서 가장 많이 사용된다.
진행형이 intelligent가 아니라, complation이다. 따라서 압축된 리스트라고 생각하면 된다.
ll = []
for i in range(10):
ll.append(i)
print(ll) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ll = [i for i in range(10)]
print(ll) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
두 코드의 결과는 동일하다. 아래 코드가 진행형 리스트를 사용한 코드이다.
<진행형 리스트를 이용한 구구단>
for i in range(2, 10):
for j in range(1, 9):
print('{} X {} = {}'.format(i, j, i*j))
lll = ['{} X {} = {}'.format(i, j, i*j) for i in range(2, 10) for j in range(1, 10)]
print(lll)
"""['2 X 1 = 2', '2 X 2 = 4', '2 X 3 = 6', '2 X 4 = 8', '2 X 5 = 10', '2 X 6 = 12', '2 X 7 = 14',
'2 X 8 = 16', '2 X 9 = 18', '3 X 1 = 3', '3 X 2 = 6', '3 X 3 = 9', '3 X 4 = 12', '3 X 5 = 15',
'3 X 6 = 18', '3 X 7 = 21', '3 X 8 = 24', '3 X 9 = 27', '4 X 1 = 4', '4 X 2 = 8', '4 X 3 = 12',
'4 X 4 = 16', '4 X 5 = 20', '4 X 6 = 24', '4 X 7 = 28', '4 X 8 = 32', '4 X 9 = 36', '5 X 1 = 5',
'5 X 2 = 10', '5 X 3 = 15', '5 X 4 = 20', '5 X 5 = 25', '5 X 6 = 30', '5 X 7 = 35', '5 X 8 = 40',
'5 X 9 = 45', '6 X 1 = 6', '6 X 2 = 12', '6 X 3 = 18', '6 X 4 = 24', '6 X 5 = 30', '6 X 6 = 36',
'6 X 7 = 42', '6 X 8 = 48', '6 X 9 = 54', '7 X 1 = 7', '7 X 2 = 14', '7 X 3 = 21', '7 X 4 = 28',
'7 X 5 = 35', '7 X 6 = 42', '7 X 7 = 49', '7 X 8 = 56', '7 X 9 = 63', '8 X 1 = 8', '8 X 2 = 16',
'8 X 3 = 24', '8 X 4 = 32', '8 X 5 = 40', '8 X 6 = 48', '8 X 7 = 56', '8 X 8 = 64', '8 X 9 = 72',
'9 X 1 = 9', '9 X 2 = 18', '9 X 3 = 27', '9 X 4 = 36', '9 X 5 = 45', '9 X 6 = 54', '9 X 7 = 63',
'9 X 8 = 72', '9 X 9 = 81']"""
다중 인자 리스트 순회
l = [(1, 10), (2, 20), (3, 30), (4, 40)]
for i in l:
print(i)
#(1, 10)
#(2, 20)
#(3, 30)
#(4, 40)
여기서 for i,j in l으로 작성하면 언패킹(unpacking)할 수 있다. 즉, 한꺼풀 더 벗길 수 있다.
l = [(1, 10), (2, 20), (3, 30), (4, 40)]
for i,j in l:
print(i,j)
# 1 10
# 2 20
# 3 30
# 4 40
위의 형태를 보아 아까와 같이 튜플형태가 아니므로, 변수값으로 값을 사용할 수 있다.
enumerate()
: 두 개의 인자값을 만들어준다. 파이썬에 미리 정의된 built in 함수이다.
enumerate(a, b): b부터 시작하는 하나의 순서가 있는 값을 만들어주고, b로 순회가 가능한 객체를 만들어준다.
어떤 데이터를 가져와서 번호를 매길 때 많이 사용하는 함수이다.
for i,j in enumerate(range(100, 1000, 100), 1):
print(i,j)
# 1 100
# 2 200
# 3 300
# 4 400
# 5 500
# 6 600
# 7 700
# 8 800
# 9 900
pass
- 아무것도 진행하지 않음
- 단지 나중에 위의 코드를 작성한다고 표시하거나, 혹은 에러가 나지 않도록 대처하는 용도로 주로 사용한다.
for i in range(10):
pass
위의 코드에 아무 값도 출력되지 않으나, pass를 지우게 되면 에러가 발생하게 된다.
continue
- 다음 순회로 넘어감
- pass와 헷갈릴 수 있으나 전혀 다른 개념이므로 주의하자.
for i in range(10):
continue
print('hello world')
위 코드는 계속해서 다음 순회(0->1->2->...)로 넘어가므로 아무 값도 출력되지 않는다. 그러나 continue를 pass로 바꾸게 되면 아래와 같은 값이 출력된다.
for i in range(10):
pass
print('hello world')
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
<예시>
i=6일 때 아래 코드를 진행하지 않고 다음 순회로 그냥 넘어가게 되므로 i=0~5동안만 아래 코드인 'hello world'를 출력한다.
for i in range(10):
if i > 5:
continue #i=6부터 다음 순회로 계속 그냥 넘어간다
print('hello world')
# hello world
# hello world
# hello world
# hello world
# hello world
# hello world
조건문
(1) if
- if a : a가 True라면 아래 코드를 실행시킨다.
- if문 단독으로 사용할 수 있다.
- elif, else문은 단독으로 사용할 수 없다. 따라서 if없이 elif, else의 조합은 사용이 불가능하다.
<예시>
if True:
print('hello world')
<예시2>
a = 25
if a == 10:
print('hello world')
elif a < 20:
print('good job 1')
elif a < 30:
print('good job 2')
elif a < 40:
print('good job 3')
elif a < 50:
print('good job 4')
else:
print('else')
# good job 2
위의 조건이 False인 경우, 아래 조건을 탐색한다.
클래스 (class)
- class name 첫 문자는 대문자여야 한다.
- class는 대부분 직접 만지지 않는다. (3.instance를 만져야 한다)
- class를 붕어빵 찍는 틀로 생각한다면 instance는 붕어빵이다.
class Car():
maxSpeed = 300
maxPeople = 5
def start(self):
print('출발')
def stop(self):
print('정지')
k9 = Car()
print(k9.maxPeople) # 5
dir을 확인한 결과, 'maxPeople', 'maxSpeed', 'start', 'stop'와 같이 우리가 정의한 것이 나온다.
class Car():
maxSpeed = 300
maxPeople = 5
def start(self):
print('출발')
def stop(self):
print('정지')
print(type(k9))
print(dir(k9))
# <class '__main__.Car'>
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'maxPeople', 'maxSpeed', 'start', 'stop']
object(상속)
class Car(object): #생략이 안된 경우, object(상속)이 들어간다.
maxSpeed = 300
maxPeople = 5
def start(self):
print('출발')
def stop(self):
print('정지')
class Hybrid(Car):
battery = 1000
batteryKM = 300
k3 = Hybrid()
print(k3.maxPeople) #Hybrid는 Car로 부터 상속받았기 때문에 Car속의 값들을 모두 사용할 수 있다.
__매직 메소드__
<예시1 : __str__>
class Car(object): #생략이 안된 경우, object(상속)이 들어간다.
maxSpeed = 300
maxPeople = 5
def start(self):
print('출발')
def stop(self):
print('정지')
def __str__(self): #매직 메소드
return 'hello world'
class Hybrid(Car):
battery = 1000
batteryKM = 300
k9 = Car()
print(k9) # hello world
<예시 2 : __init__> - 인스턴스가 만들어질 때마다 무조건 실행된다
class Car(object): #생략이 안된 경우, object(상속)이 들어간다.
maxSpeed = 300
maxPeople = 5
def start(self):
print('출발')
def stop(self):
print('정지')
def __str__(self): #메직 메소드
return 'hello world'
def __init__(self):
print("인스턴스가 만들어 졌습니다!!!")
class Hybrid(Car):
battery = 1000
batteryKM = 300
k9 = Car()
k5 = Car()
k3 = Hybrid()
#인스턴스가 만들어 졌습니다!!!
#인스턴스가 만들어 졌습니다!!!
#인스턴스가 만들어 졌습니다!!!
built in function
'Education' 카테고리의 다른 글
[부스트 코딩 뉴비 챌린지 2020] C언어: 포인터에 자료형은 왜 붙일까? (0) | 2020.08.18 |
---|---|
[제주코딩베이스캠프] 웹개발 30분 요약 - 5. 30분 요약시리즈 - HTML (0) | 2020.08.18 |
[제주코딩베이스캠프] 웹개발 30분 요약 - 3. 30분 요약시리즈 - Python 1부 (0) | 2020.08.18 |
[부스트 코딩 뉴비 챌린지 2020] week5_Q&A : 메모리 해제와 메모리 할당 (0) | 2020.08.17 |
[부스트 코딩 뉴비 챌린지 2020] week5_샘플미션 (0) | 2020.08.17 |