프로그래밍 언어에서는 반복되는 작업을 간단하게 처리하기 위해 반복문이라는 기능을 제공한다. 반복문은 반복 횟수, 반복 및 정지 조건을 자유자재로 제어할 수 있다.
for
반복문은 range
에 반복할 횟수를 지정하고 앞에 in
과 변수를 입력한다. 그리고 끝에 클론(:
)을 붙인 뒤 다음 줄에 반복할 코드를 넣는다.
for 변수 in range(횟수):
반복할 코드
for
다음 줄에 오는 코드는 반드시 들여쓰기를 해준다.
📎 참고) 에러
SyntaxError: invalid syntax:
for
반복문의 형식을 지키지 않았을 떄 발생하는 구문 에러이다.for
반복문의 형식에 맞는지 확인한다. 특히for
끝에 콜론(:
)을 빠뜨리지 않았는지 확인한다.
SyntaxError: expected an indented block:
for
다음 줄에 오는 반복할 코드의 들여쓰기가 맞지 않아서 발생하는 구문 에러이다. 반복할 코드에서 들여쓰기 4칸을 했는지 확인한다.
for
반복문은 range
에서 in
으로 숫자를 하나씩 꺼내서 반복하는 방식이다. for
는 숫자를 꺼낼 때마다 코드를 실행한다.
for
반복문은 반복 횟수가 정해져 있을 때 주로 사용한다.
for 변수 in range(횟수)
-> 반복할 코드로 순환하는 것을 루프(loop)라고 부른다.
>>> for i in range(100):
... print('Hello, world!', i)
...
# 출력결과
Hello, world! 0
Hello, world! 1
Hello, world! 2
... (생략)
Hello, world! 98
Hello, world! 99
📎 참고) 반복문의 변수
i
변수i
를 루프 인덱스라고 부르며index
의 첫 머리 글자를 따서i
를 주로 사용한다.
📎 참고) 버전별 range의 차이점
파이썬 2.7에서는range
를 사용하면 실제로 연속된 숫자가 들어있는 리스트를 만들어내지만 파이썬 3에서는range
객체(반복 가능한 객체)를 만들어낸다.
<파이썬 2.7>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<파이썬 3>
>> range(10) range(0, 10) >> list(range(10)) # range 객체를 리스트로 만듦 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range
의 다양한 기능을 활용하여 for
반복문을 사용해본다.
>>> for i in range(5, 12): # 5부터 11까지 반복
print('Hello, world!', i)
# 실행결과
Hello, world! 5
Hello, world! 6
Hello, world! 7
Hello, world! 8
Hello, world! 9
Hello, world! 10
Hello, world! 11
>>> for i in range(0, 10, 2): # 0부터 8까지 2씩 증가
print('Hello, world!', i)
# 실행결과
Hello, world! 0
Hello, world! 2
Hello, world! 4
Hello, world! 6
Hello, world! 8
>>> for i in range(10, 0): # range(10, 0)은 동작하지 않음
print('Hello, world!', i)
range
에서 시작하는 숫자를 큰 숫자, 끝나는 숫자를 작은 숫자로 지정하면 아무것도 출력되지 않는다. range
는 숫자가 증가하는 기본 값이 양수 1이기 때문이다.
range
에 증가폭을 음수로 지정해서 반복해본다.
>>> for i in range(10, 0, -1): # 10에서 1까지 1씩 감소
print('Hello, world!', i)
# 출력결과
Hello, world! 10
Hello, world! 9
Hello, world! 8
(생략)
Hello, world! 2
Hello, world! 1
증가폭을 음수로 지정하는 방법 말고도 reversed
를 사용하면 숫자의 순서를 반대로 뒤집을 수 있다.
>>> for i in reversed(range(10)): # range에 reversed를 사용하여 숫자의 순서를 반대로 뒤집음
print('Hello, world!', i) # 9부터 0까지 10번 반복
Hello, world! 9
Hello, world! 8
Hello, world! 7
(생략)
Hello, world! 1
Hello, world! 0
📎 참고) 반복문의 변수 i를 변경할 수 있을까? 🔎
for
와range
로 반복하면서 변수 i를 변경하면 어떻게 될까?>> for i in range(10): print(i, end=' ') i = 10 # 실행결과 0 1 2 3 4 5 6 7 8 9
변수
i
는 반복할 때마다 다음 값으로 덮어써지기 때문에 값을 할당해도 변수에 영향을 주지 못한다.
count = int(input('반복할 횟수를 입력하세요: '))
for i in range(count):
print('Hello, world!', i)
반복할 횟수를 입력하세요:'
가 출력되면 여기에 3을 입력하고 엔터
# 실행결과
반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2
for
는 리스트, 튜플, 문자열 등 시퀀스 객체로 반복할 수 있다.
리스트 : 리스트의 요소를 꺼내면서 반복
>>> a = [10, 20, 30, 40, 50]
>>> for i in a:
print(i)
# 실행결과
10
20
30
40
50
튜플 : 튜플의 요소를 꺼내면서 반복
>>> fruits = ('apple', 'orange', 'grape')
>>> for fruit in fruits: # 반복문의 변수 i 대신 fruit 사용
print(fruit)
# 실행결과
apple
orange
grape
문자열 : 문자를 하나씩 꺼내면서 반복
>>> for letter in 'Python':
print(letter, end=' ')
# 실행결과
P y t h o n
문자열을 뒤집어서 출력하고 싶은 경우 reversed
를 활용하면 된다.
>>> for letter in reversed('Python'):
print(letter, end=' ')
# 실행결과
n o h t y P
다음 소스 코드를 완성하여 리스트 x에 들어있는 각 숫자(요소)에 10을 곱한 값이 출력되게 만드세요. 모든 숫자는 공백으로 구분하여 한 줄로 출력되어야 합니다.
x = [49, -17, 25, 102, 8, 62, 21]
for i in x:
print(i * 10, end=' ')
# 실행결과
490 -170 250 1020 80 620 210
for
에 리스트를 지정하면 각 요소를 꺼내면서 반복 가능
따라서, for i in x:
와 같이 반복문을 만들고 꺼낸 변수 i
에 10을 곱해서 print
하면된다.