본문 바로가기

Education

[제주코딩베이스캠프] 웹개발 30분 요약 - 4. 30분 요약시리즈 - Python 2부

반응형

학습 리스트

  • 반복문 (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')

 

elsewhile문이 정상적으로 종료되었을 때에만 실행이 되는 아이이다. 그래서 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)

  1. class name 첫 문자는 대문자여야 한다.
  2. class는 대부분 직접 만지지 않는다. (3.instance를 만져야 한다)
  3. 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

 

Built-in Functions — Python 3.8.5 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer or a floating po

docs.python.org

반응형