[Python] 기초5. 조건 반복문(for)

파이썬의 직관적인 특징을 가장 잘 보여 주는 것이 바로 for 문입니다.

while 문과 비슷한 반복문인 for 문은 문장 구조가

한눈에 들어온다는 장점이 있습니다.

for 문의 기본 구조

for 문의 기본 구조는 다음과 같습니다.

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

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지

차례로 변수에 대입되어 ‘수행할_문장1’, ‘수행할_문장2’ 등이 수행됩니다.

 

1. 전형적인 for 문

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

range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)

숫자를 데이터로 가지는 객체입니다.

따라서 위 예에서 i 변수에 숫자가 1부터 10까지 하나씩 차례로 대입되면서

add = add + i 문장을 반복적으로 수행하고

add는 최종적으로 55가 됩니다.

 

2. for 문의 응용

for 문의 쓰임새를 알기 위해 다음과 같은 문제를 생각해 보겠습니다.

총 5명의 학생이 시험을 보았는데
시험 점수가 60점 이상이면 합격이고
그렇지 않으면 불합격이다.
합격인지, 불합격인지 결과를 보여 주시오.

먼저 학생 5명의 시험 점수를 리스트로 표현해 보면,

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

1번 학생은 90점이고 5번 학생은 80점입니다.

이런 점수를 차례로 검사해서 합격했는지,

불합격했는지 통보해 주는 프로그램을 만들어 보겠습니다.

# marks1.py
marks = [90, 25, 67, 45, 80]   # 학생들의 시험 점수 리스트

number = 0   # 학생에게 붙여 줄 번호
for mark in marks:   # 90, 25, 67, 45, 80을 순서대로 mark에 대입
    number = number +1 
    if mark >= 60: 
        print("%d번 학생은 합격입니다." % number)
    else: 
        print("%d번 학생은 불합격입니다." % number)

각각의 학생에게 번호를 붙여 주기 위해 number 변수를 사용하였습니다.

점수 리스트 marks에서 차례로 점수를 꺼내어

mark라는 변수에 대입하고 for 문 안의 문장들을 수행합니다.

먼저 for 문이 한 번씩 수행될 때마다 number는 1씩 증가합니다.

for문 설명 이미지

이 프로그램을 실행하면 mark가 60 이상일 때

합격 메시지를 출력하고 60을 넘지 않을 때

불합격 메시지를 출력합니다.

명령 프롬프트 창을 열어 실행해 보면,

C:\doit>python marks1.py
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

이처럼 나옵니다.

 

3. for 문과 continue 문

while 문에서 살펴본 continue 문을 for 문에서도 사용할 수 있다.

즉, for 문 안의 문장을 수행하는 도중 continue 문을 만나면

for 문의 처음으로 돌아가게 됩니다.

앞에서 for 문 응용 예제를 그대로 사용해서 60점 이상 인

사람에게는 축하 메시지를 보내고

나머지 사람에게는 아무런 메시지도 전하지 않는

프로그램을 작성해 보겠습니다.

# marks2.py
marks = [90, 25, 67, 45, 80]

number = 0 
for mark in marks: 
    number = number +1 
    if mark < 60:
        continue 
    print("%d번 학생 축하합니다. 합격입니다. " % number)

점수가 60점 이하인 학생인 경우에는 mark < 60이 참이 되어

continue 문이 수행됩니다.

따라서 축하 메시지를 출력하는 부분인 print 문을 수행하지 않고

for 문의 처음으로 돌아가게 됩니다.

C:\doit>python marks2.py
1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

이러면 안타까운 불합격 학생이 안나오게 되겠죠?

 

4. for와 range를 이용한 구구단

for와 range 함수를 사용하면

소스 코드 단 4줄만으로 구구단을 출력할 수 있습니다.

들여쓰기에 주의하면서 입력해 보겠습니다.

>>> for i in range(2,10):        # 1번 for문
...     for j in range(1, 10):   # 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 문을 두 번 사용했습니다.

1번 for 문에서 2부터 9까지의 숫자(range(2, 10))가

차례대로 i에 대입되게 되고,

i가 처음 2일 때 2번 for 문을 만나게 됩니다.

2번 for 문에서 1부터 9까지의 숫자(range(1, 10))가 j에 대입되고,

그다음 문장인 print(i*j, end=" ")를 수행합니다.

따라서 i가 2일 때 2 * 1, 2 * 2, 2 * 3, … 2 * 9까지

차례대로 수행되며 그 값을 출력하게 됩니다.

그다음으로 i가 3일 때 역시 2일 때와 마찬가지로 수행될 것이고

i가 9가 될때까지 계속 반복됩니다.

print(i*j, end=" ")와 같이 print 함수에 end 파라미터를 설정한 이유는

해당 결괏값을 출력할 때 다음 줄로 넘기지 않고

그 줄에 계속 출력하기 위해서입니다.

그다음에 이어지는 print('')는 2단, 3단 등을 구분하기 위해 사용,

두 번째 for 문이 끝나면 결괏값을 다음 줄부터 출력하게 하는 역할을 한다.

  • print 문의 end 매개변수에는 줄바꿈 문자(\n)가 기본값으로 설정되어 있다.
  • print 문은 04-2에서 보다 자세히 다룬다.

 

-출처 : 점프 투 파이썬