Hodustory/프로그래밍&DB

파이썬(Python) 입문: if, for, range, break, continue, else, pass

호두밥 2018. 3. 24. 00:09

More Control Flow Tools

1. if

가장 유명한 구문 타입이 if일겁니다.


>>> x = int(input("Please enter an integer: "))

Please enter an integer: 42

>>> if x < 0:

...     x = 0

...     print('Negative changed to zero')

... elif x == 0:

...     print('Zero')

... elif x == 1:

...     print('Single')

... else:

...     print('More')

...

More


 0개 이상의 elif 구문이 추가될 수 있고 else 구문은 선택사항입니다.  elif라는 말은 else if의 줄임말이고, 과도한 들여쓰기를 줄일 수 있어 유용합니다. if.... elif.... elif 연속문은 다른 언어에서 switch나 case와 같은 용도입니다.


2. for

파이썬에서의 for는 당신이 C나 Pascal에서 쓰던 것과 조금 다릅니다. (Pascal에서와 같이) 숫자의 산술 진행을 반복하거나 (C에서 처럼)사용자가 반복 단계와 조건을 정의 할 수 있도록하는 대신 Python에서 for 문은 모든 시퀀스의 항목을 반복합니다 (목록 또는 문자열)을 순서대로 표시합니다.


>>> words = ['cat', 'window', 'defenestrate']

>>> for w in words:

...     print(w, len(w))

...

cat 3

window 6

defenestrate 12


루프 안에서 반복하고 있는 시퀀스(선택한 항목을 반복하는 예시)를 바꿔야 한다면, 우선 복사하는 것이 좋습니다. 시퀀스를 반복하는 것은 반드시 복제를 만들지는 않습니다. 쪼개기 표기법을 사용하면  이것처럼 편리합니다.


>>> for w in words[:]:  # Loop over a slice copy of the entire list.

...     if len(w) > 6:

...         words.insert(0, w)

...

>>> words

['defenestrate', 'cat', 'window', 'defenestrate']


for w in words: 구문으로 예시는 defenestrate를 계속해서 추가해서 새로운 list를 만듭니다.


3.Range()

만약 연속된 숫자를 반복할 필요가 있다면, 내장 함수인 range()가 편리합니다.  이것은 산술 절차를 발생시킵니다.


>>> for i in range(5):

...     print(i)

...

0

1

2

3

4


주어진 끝 지점은 시퀀스에 포함되지 않습니다. range(10)은 10개의 값을 발생시키지만, 그건 시퀀스의 길이가 10인 것입니다. 범위의 시작을 다른 숫자로 하거나 증가값(음수도 가능, step이라고도 불림) 을 다르게 하는 것도 가능합니다.


>>> for i in range(10,-10, -1):

...     print(i, end=', ')

...

10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9,


시퀀스의 색인을 반복하려면, range()와 len()을 함께 써야 합니다.


>>> a = ['a','b','c','d']

>>> for i in range(len(a)):

...     print(i, a[i])

...

0 a

1 b

2 c

3 d


그러나 대부분의 경우에 enumerate() 함수를 쓰는 것이 편리합니다. 

만약 그냥 range를 그냥 print한다면 아래와 같은 이상현상이 발생합니다.


>>> print(range(10))

range(0, 10)


많은 경우에 range 형태로 반환되는 값은 list처럼 행동합니다. 그러나 사실 그렇지 않습니다. 반복할 때, 원하는 시퀀스의 연속적인 항목을 반환하는 것이 목적이지만 그것은 실제로 list를 만드는 것은 아니기 때문에 공간을 절약합니다. 우리는 그 개체가 반복가능하다고 말합니다. 즉,  공급이 그칠 때까지 연속적인 항목을 얻을 수 있다고 기대하는 함수나 구조의 인수로서 적합합니다. 우리는 for 구문을 이같은 반복자라고 봅니다. 함수 list()는 또 다른 것으로, 그것은  반복자로부터 리스트를 만드는 것입니다.  


>>> list(range(5))

[0, 1, 2, 3, 4]


이후에 우리는 반복자를 반환하고 인수로 반복자를 가지는 다양한 함수를 보게 될 것 입니다.


4. Break, continue, else

break는 C에서 처럼 for나 while 루프의 가장 안쪽에서 빠져나옵니다.
loop 구문은 보통 else로 끝납니다. 이것은 루프 문이 list의 고갈(for문)이나 상태가 false(while문)가 되었을 때 발생합니다. 그러나 break문에 의해 종료되었을 때는 발생하지 않습니다. 이는 소수를 검색하는 아래의 예문에서 확인할 수 있습니다.

or n in range(2, 10):

for x in range(2, n):

if n % x == 0:

print(n, 'equals', x, '*', n//x)

break

else:

print(n, 'is a prime number')


------------------------

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3


위의 예문에서 else는 for를 닫는 역할을 한다.

루프문을 쓸 때, else는  if에서 보다에서 실행구문에서 더 많이 쓰인다. 예외가 발생하지 않으면 실행문의 else가 실행되고 중단이 발행사지 않으면 루프문의 break가 발생한다. 

Continue문은 C에서 빌려온 것으로 루프문의 다음 반복을 이어준다.


for num in range (2,10):

if num % 2 ==0:

print("even number", num)

continue

print("number", num)


--------------------------

even number 2

number 3

even number 4

number 5

even number 6

number 7

even number 8

number 9


5. Pass

pass는 아무것도 하지 않는다. 구문적으로는 필요하지만 프로그램적으로는 아무것도 하지 않는다. 


>>> while True:

...     pass  # Busy-wait for keyboard interrupt (Ctrl+C)

...


보통 최소한의 클래스를 만들기 위해 사용된다.


>>> class MyEmptyClass:

...     pass

...


다른 pass는 더 추상적인 레벨로 생각하는 것을 허락하면서, 새로운 코드를 작업하기 위해 함수나 생태를 잡고 있는 역할을 한다.  pass는 조용이 무시된다.


>>> def initlog(*args):

...     pass   # Remember to implement this!

...


---------------------------------------

안녕하세요! 호두입니다. 이번엔 루프구문에 대해서 다루었네요.

루프 구문의 시작과, 연속, 멈춤 등 프로그래밍의 기본 개념에 대해 배운 듯합니다. 

다만 pass는 언제 쓰는지 확연히 보이지가 않네요. 예문도 너무 간단하고, '앞으로 쓰일 데가 있어'라는 식의 설명이라 좀 아쉽네요.

그럼 다음에 다시 찾아 뵙겠습니다.

반응형