파이썬 range() 함수
range() 함수란 무엇인가?
파이썬에서 range() 함수는 주로 반복문에서 정해진 범위의 숫자들을 순서대로 사용할 때 쓰입니다. 예를 들어, 0부터 4까지의 숫자를 차례로 출력하거나, 5에서 1씩 감소하며 반복할 때 등 여러 상황에서 활용할 수 있습니다. range()는 매우 자주 사용되는 기본 함수이지만, 시작값, 끝값, 증가값의 역할과 동작 원리를 헷갈리기 쉬운 부분이 많습니다.
이 글에서는 range() 함수의 기본 구조, 각각의 인자가 실제로 어떻게 작동하는지, 초보자가 자주 겪는 오류와 수정 방법까지 차근차근 설명합니다. 파이썬 초보라면 반드시 알아야 할 핵심 개념만 쏙쏙 정리했습니다.
range() 함수의 기본 구조와 가장 간단한 예제
range()는 최소 1개, 최대 3개의 값을 넣을 수 있습니다. 기본 구조는 다음과 같습니다.
- range(끝값) : 0부터 끝값-1까지 1씩 증가
- range(시작값, 끝값) : 시작값부터 끝값-1까지 1씩 증가
- range(시작값, 끝값, 증가값) : 시작값부터 끝값-1까지 증가값만큼 증가
가장 기본적인 예제로 0부터 4까지 반복하는 코드를 살펴봅시다.
for i in range(5):
print(i)실행 결과
0
1
2
3
4
이 코드는 i가 0, 1, 2, 3, 4의 값을 차례로 가지며, 각 값을 출력합니다. 즉, 끝값은 포함되지 않고 바로 전 숫자까지만 생성됩니다.
시작값·끝값·증가값을 지정하는 방법
시작값과 끝값 지정
시작값을 1로, 끝값을 6으로 지정하면 1, 2, 3, 4, 5가 출력됩니다.
for num in range(1, 6):
print(num)실행 결과
1
2
3
4
5
여기서 range(1, 6)은 1부터 5까지의 정수를 생성합니다. 끝값 6은 포함되지 않습니다.
증가값(step) 지정
세 번째 인자로 증가값(또는 감소값)을 줄 수도 있습니다. 예를 들어, 2씩 증가시키려면 다음과 같이 씁니다.
for n in range(0, 10, 2):
print(n)실행 결과
0
2
4
6
8
이 코드는 0, 2, 4, 6, 8을 출력합니다. 시작값 0부터 끝값 10 바로 전까지 2씩 증가합니다.
감소하는 range 만들기
증가값에 음수를 넣으면 큰 수에서 작은 수로 감소하는 범위를 만들 수 있습니다.
for x in range(5, 0, -1):
print(x)실행 결과
5
4
3
2
1
5, 4, 3, 2, 1이 출력됩니다. 이처럼 감소값을 쓸 때는 시작값 > 끝값이어야 하고, 끝값은 여전히 포함되지 않습니다.
자주 하는 실수와 혼동
끝값이 포함된다고 착각하기
많은 초보자가 range(1, 10)이면 1부터 10까지 나온다고 생각하지만, 실제로는 1부터 9까지만 나옵니다. range()의 끝값은 항상 포함되지 않는다는 점을 기억하세요.
잘못된 예
아래 코드는 1부터 10까지 모두 출력하려는 의도로 썼지만, 실제로는 1부터 9까지만 출력됩니다.
for i in range(1, 10):
print(i)실행 결과
1
2
3
4
5
6
7
8
9
10도 포함하려면 끝값을 11로 늘려야 합니다.
for i in range(1, 11):
print(i)실행 결과
1
2
3
4
5
6
7
8
9
10
증가값에 0을 넣으면?
증가값(step)이 0이면 반복이 멈추지 않아 오류가 발생합니다.
잘못된 예:
for i in range(1, 5, 0):
print(i)
이 코드는 다음과 같이 오류를 냅니다.
ValueError: range() arg 3 must not be zero
이럴 땐 반드시 증가값이 0이 아닐 때만 사용하세요. 아래는 올바른 예시입니다.
for i in range(1, 5, 1):
print(i)실행 결과
1
2
3
4
음수 증가값에서의 흔한 실수
시작값이 끝값보다 작고, 증가값이 음수라면 아무 값도 출력하지 않습니다.
for i in range(1, 5, -1):
print(i)실행 결과
(출력 없음)
위 코드는 아무 결과도 출력하지 않습니다. 감소하는 반복을 원할 때는 시작값이 끝값보다 커야 합니다.
range()와 반복문의 실제 사용 예
리스트의 인덱스 순회
range()는 리스트의 인덱스를 순서대로 다룰 때 자주 사용됩니다.
numbers = [4, 7, 9, 2]
for i in range(len(numbers)):
print('인덱스', i, '값', numbers[i])실행 결과
인덱스 0 값 4
인덱스 1 값 7
인덱스 2 값 9
인덱스 3 값 2
이 코드는 리스트의 각 위치와 그 값을 함께 출력합니다.
합계 구하기
1부터 100까지의 합계를 구하는 데도 range가 쓰일 수 있습니다.
total = 0
for i in range(1, 101):
total += i
print('합계:', total)실행 결과
합계: 5050
range로 비어 있는 반복 만들기
조건이 맞지 않으면 range가 빈 반복을 만들기도 합니다.
for i in range(3, 2):
print(i)
print('완료!')실행 결과
완료!
이 코드는 아무 값도 출력하지 않고 바로 '완료!'가 출력됩니다. range의 범위가 비어 있다는 뜻입니다.
range() 핵심 정리와 연습 문제
핵심 정리
range()의 끝값은 항상 포함되지 않는다.- 증가값(step)은 반드시 0이 아닌 정수여야 한다.
- 감소하는 반복은 시작값 > 끝값, 증가값은 음수여야 한다.
- range로 만든 숫자는 실제로 하나씩 꺼내 사용해야 하며, for문과 자주 함께 쓴다.
연습 문제
- 1부터 20까지 홀수만 출력하는 코드를 작성해 보세요.
힌트: 증가값을 적절히 조정해 보세요. - 10에서 1까지 거꾸로 출력하는 코드를 작성하세요.
- range()를 사용해 리스트의 모든 요소를 인덱스와 함께 출력하는 코드를 작성해 보세요.
range()의 원리를 직접 코드로 실습하면서 익히면, 반복문과 숫자 다루기가 훨씬 쉬워질 것입니다.