ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬/Python] for문 기본, 그리고 range 함수
    깜빡의 취미/파이썬을 합니다. 2021. 8. 29. 18:06
    728x90

    곧 소개할 단계별로 풀어보기부터는 for문에 대해 다룬다. for문은 if문, while문과 함께 파이썬을 배우는 사람이라면 기본기로 익혀 두어야 할 지식이다. 그만큼 많이 쓰이고, 또 편하게 쓰인다.

     

    이번 글에서는 for문의 기본을 간단하게 살펴보기로 하자. 이에 더해, for문과 함께 자주 쓰이는 range 함수를 함께 살펴보자.

    아래의 그림은 정확한 비유가 아님을 유념해 주세요. i라는 변수가 for문의 각 요소에 대입되어 출력되는 과정을 재미나지 않게 그려보았습니다.


    for문의 기본

    # for문은 간단히 말해, 특정 범위 동안 반복되는 반복문이다. 우선 아래 예시부터 보자.

    이때 a [i-1] 번째라고 둔 이유는, 리스트의 경우 첫 요소의 위치가 1이 아니라 0이기 때문이다.

    >>> a = [1, 2, 3, 4, 5, 6]	-> 이런 리스트가 있습니다.
    >>> for i in a:			-> a 리스트를 범위로 잡고
    ...     b = a[i-1]		-> b를 a의 i-1번째로 두시고   
    ...     print(b)		-> 이 b를 출력해 주세요!
    ...
    1
    2
    3
    4
    5
    6

     


    # for문의 기본형은 for ■ in ▲: 이다.

    ▲는 미리 설정해 둔 범위이다. 대표적으로 리스트나, 뒤이어 언급할 range 함수 등을 이용한다. 리스트로 설정하였을 경우, 리스트 안 요소 개수만큼 아래의 조건문이 반복된다.

     

    ■는 반복문 시행 시 각 요소가 대입될 변수이다. 주로 i를 사용한다. 아래의 for문은 위 예시와 동일하다.

    >>> a = [1, 2, 3, 4, 5, 6]
    >>> for i in a:				
    ...     print(a[i-1])

    부연설명을 조금 더 해보겠다. 처음 for문이 시작되면 먼저 리스트의 첫 번째 값이 1이 i에 대입된다. 그 이후 아래 수행문 print(a[i-1])에 i가 대입된다. 이는 print(a[1-1])과 같기 때문에 결과물로 print(a[0])이 수행된다. 이 때 a 리스트의 첫 번째 값은 1이기 때문에, 1이 출력된다.

     

    앞서 언급했듯 ■는 각 요소가 대입되는 변수이므로 지정하는 것은 필수이다. 하지만 i를 활용하지 않아도 for문은 작동한다. 아래의 예시를 보자.

    >>> a = [1, 2, 3, 4, 5, 6]
    >>> for i in a:
    ...     print("오늘의 하늘은 지나치게 파랗다.")
    ...
    오늘의 하늘은 지나치게 파랗다.
    오늘의 하늘은 지나치게 파랗다.
    오늘의 하늘은 지나치게 파랗다.
    오늘의 하늘은 지나치게 파랗다.
    오늘의 하늘은 지나치게 파랗다.
    오늘의 하늘은 지나치게 파랗다.

    이 경우, 수행문은 ■와 아무 관련이 없다. 따라서 i는 1, 2, 3, 4, 5, 6으로 바뀌었지만 수행문에는 그것이 보이지 않는다. 좀 더 확실한 이해를 위해 살짝 수정한 예시를 가져와 보았다.

    f 포맷팅 기법을 이용하여 표현해 보았습니다. f 포맷팅에 대해 자세히 설명하지는 않겠지만, 문장 앞에 f를 표시하고 변경 가능한 변수를 {변수}의 형태로 삽입해 두면, 변수 값이 달라질 때마다 반영됩니다.

    >>> a = [1, 3, 7, 10, 21, 32]
    >>> for i in a:
    ...     print(f"9월 {i}일, 오늘의 하늘은 지나치게 파랗다.")
    ...
    9월 1일, 오늘의 하늘은 지나치게 파랗다.
    9월 3일, 오늘의 하늘은 지나치게 파랗다.
    9월 7일, 오늘의 하늘은 지나치게 파랗다.
    9월 10일, 오늘의 하늘은 지나치게 파랗다.
    9월 21일, 오늘의 하늘은 지나치게 파랗다.
    9월 32일, 오늘의 하늘은 지나치게 파랗다.

    이제 a 리스트의 요소가 차례로 i에 반영된다는 것을 이해할 수 있을 것이다.


    # 이미 수차례 언급해 버렸지만, for문 밑에는 수행문을 적는다. 각 요소를 순서대로 반영한 i가 수행문을 수행한다... 고 간단하게 이해해 보자. 수행문에는 대표적으로 print문이 들어가는데, if문 등을 통해 출력될 값의 세부 조정도 가능하다. 거창하게 말했지만 수행문에는 수행할 수 있는 어떤 문장이든 들어갈 수 있다. 


    # 마지막으로 주의할 점 몇 개 적어본다.

    1. for문 끝에 꼭 : 까먹지 말자.

    2. for문 아래 수행문은 tab 또는 스페이스 바 4번을 눌러서 하위 문장임을 구분해 주어야 한다.

    3. 더 없다.


    range 함수

    range 함수의 기본은 range(1,2)와 같은 형태이다.


    # range 함수의 범위는 단순 출력으로는 확인할 수 없다.

    >>> print(range(100,1000))
    range(100, 1000)

    # for문을 함께 이용하여 range 함수에 대해 자세히 알아볼 수 있다. range(a,b)라고 했을 때 range 함수는 a 이상 b 미만(a ≤ 범위 < b)을 의미한다.

    >>> for i in range(1, 6):
    ...     print(i)
    ...
    1
    2
    3
    4
    5

    range(1,6) 범위에 i 변수를 하나씩 대입해 보았다. 1 이상 6 미만(1 ≤ 범위 < 6)이 출력되는 것을 확인할 수 있다.


    # range문은 range(a, b, c)와 같이 쓰일 수도 있다. 이 경우 a 이상 b 미만(a ≤ 범위 < b), 간격은 c라 해석하면 된다.

    >>> for i in range(1,11,2):
    ...     print(i)
    ...
    1
    3
    5
    7
    9

    1 이상 11 미만(1 ≤ 범위 < 11), 간격은 2이므로 1부터 2씩 더한 1, 3, 5, 7, 9가 출력된다. 11은 범위에 포함되지 않으므로 출력되지 않는다.


    # range문에는 기본적으로 숫자만 들어갈 수 있다. 지정되지 않은 문자를 넣으면 오류가 뜬다.

    >>> for i in range(a,b):
    ...     print(i)
    ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined

     

    다시 말해, 문자열(str)인 경우 range 함수를 이용할 수 없다.

    >>> a = "line"
    >>> b = "cross"
    >>> for i in range(a,b):
    ...     print(i)
    ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'str' object cannot be interpreted as an integer

     

    물론 정수형으로 미리 지정된 문자의 경우 활용할 수 있다.

    >>> a = 10
    >>> b = 16
    >>> for i in range(a,b):
    ...     print(i)
    ...
    10
    11
    12
    13
    14
    15

    제가 알고 이용하는 범위 내에서 설명을 적어 보았습니다. 보다 자세한 소개는 문제풀이를 하며 하나씩 추가해 나가면 좋을 것 같습니다. 저도 파이썬이라는 언어를 공부한 지 얼마 되지 않았지만, 기본 개념이 중요하다는 것을 하루하루 느끼고 있습니다. 기본기가 탄탄하면, 그걸 응용하는 것도 어렵지 않을 거예요. 방문해 주셔서 감사하고, 오늘도 파이팅합시다~! (구독공감이 큰 힘이 됩니다)

    댓글

Designed by Tistory.