본문 바로가기

Programing/Python

[Python 입문] 9. 파이썬 제어문 - for

목차

  •  for문의 기본구조
  • for문 이해하기
  • for문과 continue
  • for문과 자주 사용되는 range함수

for문

1. for문의 기본구조

아래의 for문 기본구조를 보면 리스트, 튜플 그리고 문자열의 첫 번째 부터 마지막 요소까지 차례로 변수에 대입되서 '수행할 문장1', '수행할 문장2' 들이 수행된다.

for 변수 in 리스트, 튜플 또는 문자열
    수행할 문장1
    수행할 문장2
    ...

 위 그림을 보면 이해하기 더 쉬울 것 같다... 그림과 같이 변수 i가 리스트에 차례대로 대입되는 것을 알 수 있다.

 

 

2. for문 이해하기

다음 예제들을 통해 for문을 살펴보자.

# 기본 for문 사용
>>> test_list = ['one', 'two', 'three']
>>> for i in test_list:   <---- test_list의 리스트 one, two, three를 순서대로 i에 대입
...     print(i)
... 
one
two
three

# 튜플에 for문 사용
>>> a = [(1, 2), (3, 4), (5, 6)]
>>> for (first, last) in a:
...     print(first + last)
... 
3   <---- first 1 + last 2
7   <---- first 3 + last 4
11   <---- first 5 + first 6

# for문 응용
marks = [90, 25, 67, 45, 80]   <---- 시험점수 리스트
number = 0   <---- 학생들에게 붙여 줄 번호

for mark in marks:   <---- 시험점수 리스트를 makr에 순서대로 대입
    number = number + 1   <---- 학생들의 번호 +1씩 증가
    if mark >= 60:   <---- if문 을 통해 mark가 60보다 크거나 같을 때를 설정
        print("{0} Student is Pass." .format(number))
    else:
        print("{0} Student is Fail." .format(number))

 첫 번째의 for문 사용 예제는 기본적인 사용 방법이기 때문에 소스코드를 보기만 해도 이해하기 쉽다. 두 번째 for문의 경우 앞의 튜플관련 내용에서 사용한 변수값 대입 방법과 비슷한 것을 알 수 있다.

 세 번째 for문의 응용과 같은 방법은 "5명의 학생의 시험 점수가 60점을 넘으면 합격이고, 넘지 못하면 불합격이다."는 문장을 for문을 사용해서 풀어봤다. (대화형 인터프리터가 아닌 에디터를 사용했기 때문에 위 두 가지 소스코드와 다르게 >>>가 앞에 없다.)

 이 세 번째 소스코드를 실행하면 아래와 같은 결과가 출력된다.

1 Student is Pass.
2 Student is Fail.
3 Student is Pass.
4 Student is Fail.
5 Student is Pass.

 

 

3. for문과 continue

 위의 예제 중 시험 점수의 합격, 불합격 예제에 while문에서 사용했던 continue를 아래의 소스코드와 같이 사용할 수 있다. 

marks = [90, 25, 67, 45, 80]
number = 0

for mark in marks:
    number = number + 1
    if mark < 60: continue
    print("{0} Student is Pass." .format(number))

 점수가 60점 이하인 경우 mark < 60가 참이 되기 때문에 continue가 실행된다. 그래서 print가 실행되지 않고, for문의 처음으로 돌아간다. 이를 이용하면 60점 이상인 사람에게는 메시지를 보내고, 나머지 사람에게는 아무런 메시지도 전하지 않는 프로그램을 만들 수 있게 된다. 이 소스코드를 실행하면 아래와 같은 결과가 출력된다.

1 Student is Pass.
3 Student is Pass.
5 Student is Pass.

 

 

4. for문과 자주 사용되는 range함수

4.1. range함수?

 for문과 사용되는 range함수를 아래와 같이 사용할 수 있는데 이를 통해 간단한 사용법을 알 수 있다.

>>> a = range(10)
>>> a
range(0, 10)   <---- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

 range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다는 뜻이다. 앞서 알아봤던 리스트 등의 슬라이싱과 같이 끝 숫자는 포함되지 않는다. 이 range함수를 for문에 사용하면 1부터 10까지 더하는 것을 아래와 같이 쉽게 구현할 수 있다.

>>> sum = 0
>>> for i in range(1, 11):
...     sum = sum + i
... 
>>> print(sum)
55

 위 소스코드를 설명하면 range(1, 11)은 1부터 10까지의 숫자 데이터를 갖는 객체가 된다. 따라서 이 객체가 변수 i에 하나씩 차례대로 대입되서 sum = sum + i라는 문장을 반복 수행하기 떄문에 sum은 55가 된다.

 

4.2. for문과 range함수를 사용한 구구단 출력

 앞에서 알아본 for문과 range함수를 사용하면 몇줄의 소스코드로 구구단을 출력할 수 있다.

>>> for i in range(2, 10):   <---- 2단 부터 9단 까지 (1번 for문)
...     for j in range(1, 10):   <---- 숫자 1부터 9까지 (2번 for문)
...             print(i * j, end=" ")
...     print('')
... 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

 위 소스코드를 보면 for문을 두 번 사용했다. 첫 번째 for문으로 구구단의 단(2단, 3단...9단)을 설정하고, 두 번째 for문으로 곱해질 숫자를 설정했다. 그리고 print(i * j)로 수행하게 되는데 i가 2인 동안 j를 차례대로 대입하고 그 값이 출력된다. 그 다음 i가 3인 동안 j를 다시 차례대로 대입하고 그 값이 출력되는 방식으로 i가 9일 때 까지 반복된다. 이것이 가능한 이유는 두 번째 for문이 첫 번째 for문에 속해있기 때문이다. 만약 두 개의 for문이 같은 위치에 있다면 아래와 같은 오류가 방생한다.

>>> for i in range(2, 10):
... for j in range(1, 10):
  File "<stdin>", line 2
    for j in range(1, 10):
      ^
IndentationError: expected an indented block

 들여쓰기를 항상 주의하고, 이를 잘 활용해보자.

 

그리고 입력인수 end가 들어간 이유는 해당 결과값을 출력할 때 한 줄에 계속 출력하기 위함이다. 그 다음에 위치한 print(' ')는 2단, 3단 등을 구분하기 위해 두 번째 for문이 끝날 때 마다 다음 줄부터 출력하게 해주는 문장이다. 이 두 가지 문장을 빼고 실행하면 아래와 같이 결과값이 출력된다. (결과 값에는 영향이 없지만....)

>>> for i in range(2, 10):
...     for j in range(1, 10):
...             print(i * j)
... 
2
4
6
8
10
12
14
16
18
3
6
9
12
15
18
21
24
27
4
8
12
16
20
24
28
32
36
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81

 

 

내용 출처: 책 '점프 투 파이썬'의 내용