반복문(Loop): range() 함수 활용 (숫자 범위 반복)
1. 서론: 숫자로 제어하는 반복의 마법, range()
이전 챕터에서 우리는 파이썬의 for 문이 리스트나 문자열과 같은 ‘반복 가능한 객체’의 요소들을 순회하며 반복 작업을 수행하는 데 매우 유용하다는 것을 배웠습니다. 하지만 때로는 특정 횟수만큼 반복하거나, 일정한 간격으로 숫자를 생성하여 반복 작업을 제어해야 할 필요가 있습니다. 예를 들어, 1부터 100까지의 합을 구하거나, 짝수만 출력하거나, 특정 횟수만큼 게임을 반복하는 경우 등이 그렇습니다. 이때 파이썬의 내장 함수인 range()는 for 문과 함께 강력한 시너지를 발휘합니다. range() 함수는 지정된 범위의 숫자 시퀀스를 생성하여 for 문이 이 숫자들을 기반으로 반복 작업을 수행할 수 있도록 돕습니다. 이 챕터에서는 range() 함수의 다양한 사용법과 함께, 이를 for 문과 결합하여 숫자를 기반으로 한 반복 작업을 어떻게 효율적으로 제어하는지에 대해 깊이 있게 알아보겠습니다. range() 함수를 마스터하는 것은 여러분의 파이썬 반복문 활용 능력을 한 단계 더 끌어올릴 것입니다.
2. range() 함수란 무엇인가?
range() 함수는 연속된 정수 시퀀스를 생성하는 데 사용되는 파이썬의 내장 함수입니다. 이 함수는 리스트나 튜플처럼 모든 숫자를 메모리에 저장하는 것이 아니라, 필요할 때마다 숫자를 생성하는 ‘제너레이터(Generator)’의 일종입니다. 따라서 매우 큰 범위의 숫자 시퀀스를 다룰 때도 메모리 효율적입니다.
range() 함수는 주로 for 문과 함께 사용되어 특정 횟수만큼 반복하거나, 특정 범위의 숫자를 순회할 때 활용됩니다.
2.1. range() 함수의 세 가지 형태
range() 함수는 인자의 개수에 따라 세 가지 형태로 사용될 수 있습니다.
-
range(stop):0부터stop-1까지의 정수 시퀀스를 생성합니다.stop은 포함되지 않습니다.- 시작 값은 기본적으로
0입니다. - 단계(step) 값은 기본적으로
1입니다.
python
for i in range(5):
print(i, end=" ") # 출력: 0 1 2 3 4
print() -
range(start, stop):start부터stop-1까지의 정수 시퀀스를 생성합니다.start는 포함되고,stop은 포함되지 않습니다.- 단계(step) 값은 기본적으로
1입니다.
“`python
for i in range(1, 6):
print(i, end=” “) # 출력: 1 2 3 4 5
print()for i in range(10, 13):
print(i, end=” “) # 출력: 10 11 12
print()
“` -
range(start, stop, step):start부터stop-1까지step만큼 증가(또는 감소)하며 정수 시퀀스를 생성합니다.start는 포함되고,stop은 포함되지 않습니다.step은 양수일 경우 증가, 음수일 경우 감소합니다.step이0일 수는 없습니다.
“`python
양수 step (증가)
for i in range(0, 10, 2):
print(i, end=” “) # 출력: 0 2 4 6 8
print()음수 step (감소)
for i in range(10, 0, -1):
print(i, end=” “) # 출력: 10 9 8 7 6 5 4 3 2 1
print()for i in range(5, -1, -1):
print(i, end=” “) # 출력: 5 4 3 2 1 0
print()
“`
3. range() 함수 활용 예시
range() 함수는 for 문과 결합하여 다양한 반복 작업을 수행할 수 있습니다.
3.1. 특정 횟수만큼 반복하기
가장 기본적인 활용법입니다. 특정 작업을 정해진 횟수만큼 반복할 때 사용합니다.
for _ in range(5): # 변수 _는 값을 사용하지 않을 때 관례적으로 사용
print("Hello, Python!")
# 출력:
# Hello, Python!
# Hello, Python!
# Hello, Python!
# Hello, Python!
# Hello, Python!
3.2. 1부터 N까지의 합 구하기
n = 100
sum_of_numbers = 0
for i in range(1, n + 1):
sum_of_numbers += i # sum_of_numbers = sum_of_numbers + i
print(f"1부터 {n}까지의 합: {sum_of_numbers}") # 출력: 1부터 100까지의 합: 5050
3.3. 리스트의 인덱스를 사용하여 요소 접근
리스트의 요소와 함께 인덱스도 필요할 때 range(len(리스트)) 패턴을 사용합니다. (이전 챕터에서 enumerate()와 비교)
my_list = ["apple", "banana", "cherry", "date"]
for i in range(len(my_list)):
print(f"인덱스 {i}: {my_list[i]}")
# 출력:
# 인덱스 0: apple
# 인덱스 1: banana
# 인덱스 2: cherry
# 인덱스 3: date
3.4. 짝수 또는 홀수 출력하기
step 인자를 활용하여 짝수나 홀수만 출력할 수 있습니다.
print("--- 1부터 10까지 짝수 ---")
for i in range(2, 11, 2):
print(i, end=" ") # 출력: 2 4 6 8 10
print()
print("--- 1부터 10까지 홀수 ---")
for i in range(1, 11, 2):
print(i, end=" ") # 출력: 1 3 5 7 9
print()
3.5. 구구단 출력하기
중첩 반복문과 range() 함수를 사용하여 구구단을 출력할 수 있습니다.
print("--- 구구단 ---")
for i in range(2, 10): # 2단부터 9단까지
print(f"\n--- {i}단 ---")
for j in range(1, 10): # 1부터 9까지 곱하기
print(f"{i} x {j} = {i * j}")
# 출력 (일부):
# --- 2단 ---
# 2 x 1 = 2
# 2 x 2 = 4
# ...
# --- 9단 ---
# 9 x 1 = 9
# ...
4. range() 객체와 리스트 변환
range() 함수는 직접적으로 숫자의 리스트를 반환하는 것이 아니라, range 객체를 반환합니다. 이 객체는 필요할 때마다 숫자를 생성하므로 메모리 효율적입니다. 만약 range 객체를 실제 리스트로 변환하고 싶다면 list() 함수를 사용합니다.
my_range = range(10)
print(my_range) # 출력: range(0, 10)
print(type(my_range)) # 출력: <class 'range'>
my_list_from_range = list(my_range)
print(my_list_from_range) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5. range() 사용 시 주의사항
5.1. stop 값은 포함되지 않음
range(stop) 또는 range(start, stop)에서 stop 값은 항상 포함되지 않습니다. 예를 들어 range(5)는 0, 1, 2, 3, 4를 생성하고, range(1, 5)는 1, 2, 3, 4를 생성합니다. 원하는 마지막 숫자를 포함하려면 stop 값에 1을 더해야 합니다.
5.2. step이 0일 수 없음
step 인자는 0이 될 수 없습니다. ValueError가 발생합니다.
# for i in range(0, 10, 0): # ValueError: range() arg 3 must not be zero
# print(i)
5.3. start, stop, step의 관계
step이 양수일 때는start < stop이어야 합니다. 그렇지 않으면 빈 시퀀스가 생성됩니다.step이 음수일 때는start > stop이어야 합니다. 그렇지 않으면 빈 시퀀스가 생성됩니다.
print(list(range(10, 0, 1))) # 출력: [] (step이 양수인데 start가 stop보다 큼)
print(list(range(0, 10, -1))) # 출력: [] (step이 음수인데 start가 stop보다 작음)
6. 결론: 숫자를 통한 반복 제어의 핵심
이 챕터를 통해 여러분은 파이썬 range() 함수의 다양한 활용법과 이를 for 문과 결합하여 숫자를 기반으로 한 반복 작업을 어떻게 효율적으로 제어하는지에 대해 깊이 있게 학습했습니다. range()의 세 가지 형태(stop, start, stop, start, stop, step)를 이해하고, 특정 횟수 반복, 인덱스 기반 접근, 짝수/홀수 출력, 구구단 출력 등 다양한 예제를 통해 그 활용법을 익혔습니다. 또한, range 객체의 특성과 list() 함수를 이용한 변환, 그리고 range() 사용 시 주의사항까지 살펴보았습니다.
range() 함수는 파이썬에서 반복 작업을 수행할 때 매우 강력하고 유연한 도구입니다. 특히 정해진 횟수만큼 반복하거나, 숫자 시퀀스를 생성하여 특정 패턴의 작업을 수행할 때 필수적으로 사용됩니다. for 문과 range() 함수는 뗄레야 뗄 수 없는 관계이므로, 이 둘을 함께 마스터하는 것은 여러분의 파이썬 반복문 활용 능력을 크게 향상시킬 것입니다.
이제 여러분은 파이썬의 핵심적인 제어문 중 하나인 for 문을 자유자재로 다룰 수 있게 되었습니다. 다음 챕터에서는 또 다른 중요한 반복문인 while 문에 대해 배우게 될 것입니다. while 문은 조건이 True인 동안 반복을 수행하므로, for 문과는 다른 상황에서 유용하게 사용됩니다. 오늘 배운 range() 함수를 활용하여 다양한 숫자 패턴을 생성하고 반복 작업을 직접 수행해 보면서, 여러분의 파이썬 실력을 더욱 단단하게 다지세요!
