프로그래밍을 하다보면 반복되는 작업을 할 때가 많습니다. 가령 각각의 학생의 성적을 입력하는 프로그램을 만든다고 하면, 같은 작업을 학생의 명수만큼 해야 하죠. 하지만 학생 한 명별로 코드를 작성하는 것은 꽤 번거로운 일입니다. 학생 수가 100명, 1000명으로 된다면 일일이 쓸 수는 없으니까요. 때문에 파이썬에서는 for문과 while문을 통해서 반복되는 작업을 효과적으로 수행할 수 있게 합니다. 이번 시간에는 for문을 다뤄보겠습니다.
for문은 제어문 중 하나로, 지정된 범위 안에서 특정 코드를 반복하는 문법입니다. 주로 포함 확인 연산자 in과 함께 쓰입니다.
lst = [1, 2, 3, 4, 5]
for i in lst:
print(i)
# 결과
# 1
# 2
# 3
# 4
# 5
for문의 기본 구조는 다음과 같습니다.
for 변수 in [문자열, 리스트, 튜플...]:
실행문
for문은 문자열, 리스트, 튜플 등에 포함된 원소들을 하나씩 변수에 담아 실행문을 수행합니다. 그렇게 마지막 원소까지 순회하면 for문이 끝이 나게 됩니다.
아까의 코드를 보면, [1, 2, 3, 4, 5]인 리스트의 원소를 하나씩 i에 담아 출력하였기에 결과가 1, 2, 3, 4, 5로 나온 것을 확인할 수 있습니다. 그렇다면 다음과 같은 경우는 어떨까요?
lst = [1, 2, 3, 4, 5]
for i in lst:
i += 1
print(lst)
위 코드에서 lst를 출력해 보면 각 원소가 하나씩 증가한 [2, 3, 4, 5, 6]이 나올 것 같지만 [1, 2, 3, 4, 5]가 출력됩니다. 어떻게 된 일일까요?
이는 lst의 원소를 변수 i에 담아서 그렇습니다. 즉, 원소 값을 가져온 변수 i가 증가한 거지 리스트의 원소 자체가 증가한 것이 아니기 때문에 결과가 [1, 2, 3, 4, 5]로 나오는 거죠.
for문은 복잡한 구조를 가질 수도 있습니다. 다뤄야 할 리스트, 튜플 등이 복잡해지거나 여러 개이면, for문의 변수를 여러 개로 설정하거나 for문 안에 for문이 들어갈 수도 있습니다.
a = [[1, 2], [3, 4], [5, 6]]
for one, two in a:
print(one + two)
for i in a:
for j in i:
print(j)
# 첫번째 for문 결과
3
7
11
# 두번째 for문 결과
1
2
3
4
5
6
range() 함수는 시작 숫자부터 끝 숫자 미만까지의 숫자들을 포함하는 범위를 만들어 줍니다. 숫자 리스트를 일일이 만들 필요 없이 range()를 통해서 특정 범위의 숫자들을 뽑아낼 수 있기에 for문에서 주로 사용됩니다.
range(start_num, end_num, step)
- start_num은 지정하지 않으면 0, step은 지정하지 않으면 1입니다.
for문과는 다음과 같이 쓰일 수 있습니다.
for i in range(10)
print(i)
# 결과: 0부터 9까지 차례로 출력됩니다.
for문을 실행시키다 보면 특정 순간에 멈추게 하고 싶을 때가 있을 겁니다. 혹은 for문 실행 중 어느 순간은 생략하고 싶을 때도 있을 수 있죠. 그럴 때 우리는 break와 continue 구문을 사용합니다.
break는 실행된 후 해당 for문을 종료합니다. 즉, 회차가 얼마나 남아있든 break 구문이 실행되면 for문이 끊기는 거죠.
for i in range(1, 11):
print(i)
if i == 5:
break
print("for statement end")
# 결과
# 1
# 2
# 3
# 4
# 5
# for statement end
위의 코드를 살펴보면, i가 5일 때 break 구문이 시행되었기에 5까지 밖에 출력하지 못하고 for문이 끝난 것을 확인할 수 있습니다.
continue는 break처럼 for문을 끝내는 것이 아닌, 해당 회차는 넘기고 다음 회차로 진행합니다. continue 구문이 실행되면 해당 회차의 다음 코드는 실행되지 않는다는 점은 break와 같지만, break와 달리 for문 자체가 종료되지는 않죠.
for i in range(1, 10):
if i % 2 == 0: # 짝수이면
continue
print(i)
print("for statement end")
# 결과
# 1
# 3
# 5
# 7
# 9
# for statement end
위의 코드를 보면, i가 짝수일 때 continue 구문이 실행되어 뒤의 print(i)
는 실행되지 않고 다음 회차로 넘어간 것을 살펴볼 수 있습니다. 때문에 홀수만 출력된 결과를 가지게 되죠.