for문 - range / enumerate() / 반복문 제어

제어문

Range

  • 반복문에서 많이 쓰일 range 알고가기

range(시작 숫자, 끝 숫자(포함X), 스탭지정)

  • 숫자의 리스트를 나타내기 위해 사용
  • 변경이 불가능하며, 반복 가능
num_list = range(11)
print(num_list)
# range(0, 11)
print(type(num_list))
# <class 'range'>
  • 0에서 11미만의 숫자를 포함하는 range 객체를 만듦.
  • 🕵 0~10까지의 숫자 리스트를 출력하는 것이 아님

range 리스트로 표현

num_list = range(11)
print(list(num_list))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 리스트에 담아줘야지 0~10까지의 숫자 리스트를 만듦.
예제 1
  • 5부터 10까지 숫자 리스트 출력하기
num_list1 = range(5,11)
print(list(num_list1))
# [5, 6, 7, 8, 9, 10]
  • 1~10까지 홀수의 리스트 출력하기
num_list2 = range(1,11,2)
print(list(num_list2))
# [1, 3, 5, 7, 9]

range 역순

range(시작 숫자, 끝 숫자(포함X), -1)

  • 스탭을 -1로 주어 시작 숫자부터 -1씩 증가시킴
예제2
  • 10부터 1까지 리스트
num_list1 = range(10,0,1)
print(list(num_list1))
# []

num_list2 = range(10,0,-1)
print(list(num_list2))
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
  • 1~10까지 짝수를 내림차순으로 정렬한 리스트
num_list3 = range(10,0,-2)
print(list(num_list3))
# [10, 8, 6, 4, 2]

반복문

for문

  • 시퀀스(string, tuple, list, range)를 포함한 순회가능한 객체요소를 모두 순회함
  • 형식
for 변수명  in iterable :
    # 실행할 코드 블록
  • iterable : 반복 가능한 객체를 뜻함.
  • 순회 가능한 객체 : 컨테이너형(문자열, 리스트, 튜플, range, set, dictionary)
for fruit in ['mango', 'banana', 'apple'] :
  print(fruit)
print("과일 종류 끝")
'''
mango
banana
apple
과일 종류 끝
'''

문자열 요소 하나씩 순회하기

chars = 'Hello'
for char in chars:
  print(char, end = '/')
# H/e/l/l/o/
  • 1번째 순회
    • 'Hello' 문자열 중 첫번째 요소인 'H'가 char이 됨.
    • print('H', end = '/') : 출력할 요소('H') 뒤에 /로 구분 짓음.
  • 1번째 순회 하듯 'o'까지 순회를 반복하면서 출력함.

문자열 요소 하나씩 순회하기 - range 활용

chars = 'Hello'
for index** in range(len(chars)):
  print(chars[index], end = '/')
# H/e/l/l/o/

range(len(chars)

  • len : 문자열의 길이를 반환함.
  • len(chars)는 5임
  • range(5)는 0 1 2 3 4 임으로 chars의 index로 활용 함.
  • 1번째 순회
    • for 0 in 0,1,2,3,4** 임으로 chars[0]인 'H'가 출력됨.
  • 마지막 인덱스인 4까지 반복됨

** index를 idx 또는 i로 줄여서 쓰기도 함.
** range(5)는 객체지만 이해를 위해 대략적으로 적음.

문자열 요소 하나씩 순회하기 - enumerate() 활용

  • enumerate
    • 몇 번째 반복문인지 확인하기 위해 사용
    • 인덱스 번호와 순회할 객체의 원소를 tuple 형태로 반환함.
chars = 'Hello'
for c in enumerate(chars):
  print(c)
'''
(0, 'H')
(1, 'e')
(2, 'l')
(3, 'l')
(4, 'o')
'''
예제 3
  • tuple 형태로 반환하는 것을 이용하여 인덱스 번호와 해당 요소 출력하기
chars = 'Hello'
for i,char in enumerate(chars):
  print(f'{char}요소의 인덱스 번호는 {i}이다.')
'''
H요소의 인덱스 번호는 0이다.
e요소의 인덱스 번호는 1이다.
l요소의 인덱스 번호는 2이다.
l요소의 인덱스 번호는 3이다.
o요소의 인덱스 번호는 4이다.
'''

for문과 if문 활용하기

  • word에 'a'가 있으면 1를 출력한다.
# 방법1
word = 'apple'
for char in word :
  if char == 'a':
    print(1)
# 1

# 방법2
if 'a' in word:
  print(1)
# 출력없음

while문

  • 조건식이 참인 경우 반복적으로 코드 블록 실행.
  • 코드 블록이 모두 실행 후, 다시 조건식을 검사하며 반복적으로 실행.
  • 종료조건에 해당하는 코드를 통해 반복문을 종료시켜야 함.
    • 🕵 주의! 종료 조건 없으면 무한루프에 빠짐
while 표현식:
  # true일때 실행할 코드 블록
예제 4
  • 1부터 사용자가 입력한 양의 정수까지의 총합을 구하는 코드 작성
user_num = int(input('정수를 입력하세요 > ')) # 5

num_start = 1
sum = 0
while num_start <= user_num : # num_start가 user_num 를 초과되면 반복 종료
  sum += num_start # sum에 num_start를 누적해서 더해주고
  num_start += 1 # num_start 1씩 증가
print(sum) # 15
  • for문으로 코드 구현하기
user_num = int(input('정수를 입력하세요 > ')) # 5

num_start = 1
sum = 0
for number in range(1,user_num+1): # 1~user_num까지 숫자 객체를 만들어서 number가 요소를 순회함.
  sum += number # sum에 number를 누적합 시킴
print(sum) # 15 # 반복이 종료되고 sum을 출력함

반복제어

break

  • 반복종료
for i in range(10):
  if i > 1:
    print('0과 1만 필요해!!')
    break
  print(i)
'''
0
1
0과 1만 필요해!!
'''
  • 첫번째 i인 0은 if문 조건에 해당하지 않아서 i가 출력됨.
  • 두번째 i인 1은 if문 조건에 해당하지 않아서 i가 출력됨.
  • 세번째 i인 2은 if문 조건에 해당되므로 '0과 1만 필요해!!'이 출력되고 break문을 만나 반복이 종료됨.

continue

  • 다음 반복을 실행 / continue 아래의 코드 블록을 실행하지 않고 다음 반복을 실행한다.
for i in range(1,11):
  if i % 2 != 0:
    continue
  print(i)
'''
2
4
6
8
10
'''
  • 첫번째 i인 1은 if문 조건에 해당되므로 continue문을 만나 다음 코드인 print(i)를 실행하지 않고 다음 반복으로 넘어감.
  • 두번째 i인 2는 if문에 해당되지 않으므로 print(i)를 실행해 출력함

for-else

  • 끝까지 반복문 실행 이후 else문 실행
    • 만약 break를 통해 중간 종료 시 else문 실행X
for char in 'apple':
  if char == 'b':
    print('b가 있습니다.')
    break
else:
  print('b가 없습니다.') 
# b가 없습니다.
  • 'apple'의 요소들 중 'b'는 없으니 조건문을 만나지 않고 else문 실행함.
for char in 'banana':
  if char == 'b':
    print('b가 있습니다.')
    break
else:
  print('b가 없습니다.')
# b가 있습니다.
  • 'banana'의 요소들 중 'b'가 있어 조건문을 통과하고 break문을 만남.
  • break는 바로 반복이 종료됨으로 else문을 실행하지 않고 반복 종료.

반복문제어비교

출처 - 멀티캠퍼스(hypergrowth) 자료, https://docs.python.org/ko/3.12/library/stdtypes.html?highlight=range#range

[Built-in Types

The following sections describe the standard types that are built into the interpreter. The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions. Some colle...

docs.python.org](https://docs.python.org/ko/3.12/library/stdtypes.html?highlight=range#range)

댓글