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)

    댓글