<개인공부>/[Python]

[python] 파이썬 for문(반복문)에 대해서

BlockDMask 2019. 12. 9. 00:13
반응형

안녕하세요. BlockDMask 입니다.

지난시간에는 if문에 대해서 알아보았는데요, 이번시간에는 파이썬에서 반복문 중 for에 대해서 알아보려고 합니다.

for문을 사용할때 어떤식으로 사용하는지 실제로 사용할때는 어떤형식으로 사용하는지, 다양한 예제로 살펴보려합니다.

**파이썬 if문에 대해서 알고싶다면 [바로가기]

**파이썬 반복문 while에 대해서 알고 싶다면 [바로가기]


<목차>

1. 반복문이란?

2. for문의 구조와 기본 사용방법

3. for문의 추가사용법 (break, continue)

4. 파이썬 for 예제들


1. 반복문이란?


▶ 반복문이 왜 필요한거야?

애초에 반복문이라는게 왜 필요할까? 라는 의문에서부터 시작을 해보겠습니다.

보통 반복문을 예로들때 아파트를 들게 됩니다.

아파트가 3층인 아파트고 층마다 하나의 호 만 있다고 했을때

101호 201호 301호가 있겠죠?


이걸 파이썬으로 출력을 한다고 해보면

print('101호')

print('201호')

print('301호')

이렇게 사용할 수 있을겁니다.


지금이야 3층밖에 안되서 하나하나 수작업으로 print를 해주면 되지만, 만약 100층, 1000층 이라면 어떻게 하시겠습니까.

print('x01호')를 1~100 ~1000번 반복해서 수작업으로 해야할까요?

이렇게 반복적인 업무를 묶어서 사용할 수 있도록 반복문이 나오게 됩니다.


만약 반복문이 없었다면 우리는

print('101호')

print('201호')

print('301호')

...

...

print('1001호')    //이제 10층

....

.....

print('10001호')    //이제 100층...

이런식으로 100번 천번 써줘야합니다. 이럴거면 엑셀에서 했죠. 그렇죠?


하지만 반복문이 있다면 이건 한 두세줄로 끝나게 됩니다.

for i in range(0, 1000):
print(f'{i}01호')

이런식으로 하면 단 2줄의 코드만으로 1층부터 1000층 까지의 호 수를 표기할 수 있습니다


이렇게 반복되는 업무에 대해서 묶어서 표현할 수 있게 해주는 반복문, 유용하지 않나요?


2. for문의 구조와 기본 사용방법


▶ for문의 기본 구조


for [변수] in [문자열, 리스트, 튜플]:

[수행부분]


이런식으로 구성이 되어있습니다.

간단히 설명하자면,

1. for 반복문은 in 뒤에 존재하는 문자열, 리스트, 튜플을 순서대로 순회하면서 하나씩 하나씩 [변수]에 넣어줍니다.

예를들어 [1,2,3,4,5] 라는 리스트가 왔다고 했을때

순서대로 [변수]에 1이 들어간 상태로 [수행부분]들을 진행하고.

모든 [수행부분]이 끝나면 다시 for 반복문으로 돌아와서 [변수]에 2를 넣어주고, 아래 [수행부분]을 수행하고

...

이런식으로 진행을 3, 4, 5하다가 5번을 마지막으로 "아 이제 더이상 순회할게 없네. 리스트가 끝났네"하면

for 반복문을 빠져나오게 됩니다.

2. for문의 끝에는 꼭 콜론 ( : ) 을 붙여주어야 합니다.

3. for 반복문에 [수행부분]이 속해있다는것을 들여쓰기를 통해 나타내 줍니다.


4. for문을 중첩해서 사용 할수도 있습니다.


for [변수1] in [문자열1, 리스트1, 튜플1]:

[수행부분]

for [변수2] in [문자열2, 리스트2, 튜플3]:

[수행부분]


상황에 따라 변수1, 2가 같을수도 있으며 다를수도 있습니다.

또한, 문자열1을 사용하고, 내부 for문에 문자열2가 오지 않을수도 올수도 있습니다.


▶ for문의 사용방법

1부터 5까지 출력하는 프로그램을 만들어 보겠습니다.

arr라는 리스트가 아래와 같이 존재한다고 했을때.

arr = [1, 2 ,3 ,4, 5]

for i in arr:

print(i)

 

이런식으로 사용하면 아래와 같은 출력이 나오게 됩니다.

1

2

3

4


3. for문의 추가 사용법 (break, continue)


▶ for문의 break (버스도 중간에 벨눌러서 내리는데 for 반복문은 왜 못내리나.)

for 반복문을 돌다가 특정 조건을 만족하게 될때 반복문을 그만돌리고 싶을 때 사용하면 됩니다.

만약 정렬이 잘 된 리스트가 존재한다고 해보겠습니다.


아래와 같이 어떤 문자열 "BlockDMask"가 있다고 했을때, 첫번째 k의 위치를 가지고 오고싶다

이럴때 break를 사용하면 됩니다.


1
2
3
4
5
6
7
8
9
10
index = 0
s = "BlockDMask" 
for a in s:
    if a == 'k':            
        break    # 'k'를 찾았으니 for문에서 나와랏!
index = index + 1


print(index)    # 'k'가 첫번째로 존재하는 위치 출력
cs


이런식으로 사용하게 되면 첫번째 'k'가 나온 후에는 for 반복문을 바로 빠져나오게 됩니다.



▶ for문의 continue (꼭 끝까지 가야만해?)

for 반복문을 돌다가 특정 조건을 만족하게 될 때 for문의 처음으로 바로 올라가고 싶을때 사용하면 됩니다.


만약에

for [변수1] in [문자열1, 리스트1, 튜플1]:

[수행부분1]

특정조건:

continue


[수행부분2]

[수행부분3]


이렇게 특정조건을 만족해서 continue로 들어가게 되면 수행부분2, 수행부분3을 거치지 않고 바로 for 문으로 올라가서

다음 문자열을 변수에 할당받아서 for 반복문을 수행하게 됩니다.


예를 들면

"키가 170이하인 친구들만 출력해라"라는 요청이 왔을때 키가 170 초과인 경우에는 print(a)까지 내려가지 않고

다시 for 반복문으로 올라가서 다음친구의 키를 가지고 와라. 할 수 있습니다.


1
2
3
4
5
6
student = [180170164199182172177]
for a in student:
    if a > 170:
        continue  # 키가 170보다 크면 continue
 
    print(a)
cs


이렇게 되었을때 결과값은 아래와 같습니다.

170

164


for 반복문의 break, continue 이해가 가시나요? 


3. 파이썬 for 예제들


▶ 사전지식 range(a, b)

**1부터 100까지 리스트를 따로 만들지 않고 range이라는 함수를 통해서 for문에서 1~100을 나타낼 수 있습니다.

for x in range(0,10):
    print(x)
cs


for 반복문에서 range(a, b)는 a에서부터 b-1까지의 숫자들을 하나하나 for문의 [변수]에 집어 넣어 줍니다.

위 예제를 보면 range(0,10)이라고 하면 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 까지의 숫자를 x에 넣어줍니다.

우린 이걸 이용해서 1~100까지의 숫자를 for문에 이용하는 예제를 볼 것 입니다.

▶ 예제1) 반복문 for를 통해서 1부터 100까지 더해보자.

1
2
3
4
5
result = 0
for a in range(1,101):  #1 ~ 100
    result = result + a

print(result)
cs


이런식으로 ragne를 이용해서 1~100까지 숫자를 a로 돌리고

result에 계속 더해주는 방식으로 구현할 수 있습니다.

출력 결과는 5050이 나옵니다.


▶ 예제2) 반복문 for와 continue를 통해서 1부터 100까지 리스트가 있을때 홀수만 더해보자.

일단 홀수인지 짝수인지는 2로 나누었을때 나머지를 통해서 알 수 있습니다.

어떤 수를 2로 나누었을때 나머지가 1이라면 그 어떤수는 홀 수 입니다.

파이썬에서 어떤수 x를 나누어서 나머지를 구하는 기호는 "%" 입니다.


일단 우리는 이런식으로 if를 이용해서 구할 수 있습니다.

1
2
3
4
5
6
result = 0
for a in range(1,101):  #1 ~ 100
    if a % 2 == 1:      #2로 나누었을때 나머지가 1
        result = result + a
 
print(result)
cs


하지만 continue를 이용해서 이런 방식으로도 사용할 수 있죠.

1
2
3
4
5
6
7
8
result = 0
for a in range(1,101):  # 1 ~ 100
    if a % 2 == 0:      # 짝수일때 continue
        continue
    
    result = result + a
 
print(result)
cs


▶ 예제3) 반복문 for와 break를 통해서 1부터 100까지 리스트가 있을때 더하다가 결과값이 100이 넘었을때 멈추기!

1
2
3
4
5
6
7
8
9
result = 0
for a in range(1,101):  # 1 ~ 100
    result = result + a    # a를 더해주고
 
    if result > 100:    # result가 100이 넘었을때
        print(a)        # 그때의 a값을 출력
        break
 
print(result)
cs


결과값

14

105

이런식으로 나오게 됩니다.


1부터 100까지 쭉 더하다가 최초로 덧셈의 결과가 100이 넘을때의 a는 14이고 결과값이 105가 딱 나오게 됩니다.

break를 이용해서 그 이후에는 반복문이 돌지 않도록 합니다.


만약 break를 쓰지 않으면?

1
2
3
4
5
6
result = 0
for a in range(1,101):  # 1 ~ 100    
    if result <= 100:
        result = result + a
 
print(result)
cs

이런식으로 할 수 있겠죠?

이렇게 하게 되면 결과값이 100이 넘었는데도 의미없이 반복문은 계속 계속 돌겠죠? 그만큼 비용을 낭비하게 됩니다.


이렇게 오늘 python의 for문의 사용법과 for문 내부에서 break, continue 를 사용하는 방법 까지 알아보았습니다. 감사합니다. 

반복문 while에 대한 포스팅은 [여기] 있습니다.


반응형