[패스트캠퍼스 환급챌린지]딥러닝/Chapter 3. 파이썬

[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-10 반복문

포리셔 2023. 4. 14. 15:37

03-10 반복문

어느 프로그래밍 언어든지 가장 중요한 문법 하나를 꼽으라면 반복문의 존재가 아닐까 합니다. 하나의 코드로 수행해야 하는 작업을 여러 번 반복해야 할 경우, 반복문을 적용하는 것만으로 사용자의 수고를 덜고 효율적인 작업이 가능하기 때문이죠. 파이썬에서는 for문이 대표적으로 사용되고, 이를 지난 포스트에서 설명한 조건문과 합친 while 반복문도 사용됩니다.

for 문법

for 문은 반복 횟수를 지정한 후, 그 횟수만큼 정해진 문법을 수행하는 반복문입니다. 파이썬의 for 문은 여러 가지 괴랄한 변칙적인 적용이 가능한데, 이는 타 언어에서 횟수를 지정하는 카운터만을 이용하는 것과 달리 리스트 또는 튜플 내의 원소 자체를 카운터의 척도로 이용할 수 있기 때문입니다. 말로 설명하긴 뭐하니 예제를 보면서 설명하자면, numbers라는 리스트의 원소들을 순서대로 출력하는 방식입니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for x in numbers:
    print(x)

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(len(numbers)):
    print(numbers[i])

 

첫번째 코드는 파이썬의 for문의 특징을 활용해 리스트 내의 원소를 그대로 불러와 출력하는 형태입니다. 두번째 코드는 원소의 인덱스를 카운터삼아서 그 인덱스에 해당하는 원소를 불러오는 방식입니다. 하지만 어느 쪽이든 실행 결과는 동일합니다.

두번째 코드에서 볼 수 있듯이, for 문은 원소에 차례대로 접근한다는 특성 때문에 range() 함수와 함께 사용되곤 합니다. 여기서 range() 함수에 대해서도 간단하게 짚고 넘어가자면, 이 함수는 다음과 같은 인수를 입력받습니다.
range((start, ) end (, interval))
start는 시작하는 수, end는 마지막 수, interval은 그 범위 내의 수 사이의 간격입니다. 여기서 startinterval은 입력하지 않아도 되는 옵션으로, 따로 지정하지 않았을 경우 start는 0, interval은 1이라는 디폴트 값을 갖습니다. interval이 1일 경우, range() 함수는 0부터 end - 1 까지의 수를 돌려줍니다.

result = 0
for i in range(1, 51):
    result += i

print(result)

위 예제 코드는 1에서 50까지의 자연수를 더하는 코드입니다. range(1, 51)이므로 1부터 50까지의 수가 1의 간격으로 출력되므로 1, 2, 3, ..., 49, 50이 출력되고, 이 값이 result에 더해집니다.

조금 응용해서 1부터 50까지의 수 중 10의 배수만 더하는 프로그램을 작성해보면 다음과 같습니다.

result = 0
for i in range(1, 51):
    if i % 10 == 0:
        result += i

print(result)

enumerate() 함수

파이썬 반복문에서 함께 사용되는 중요한 함수가 하나 있는데, 바로 enumerate() 함수입니다. 영단어 enumerate는 늘어놓다, 열거하다라는 뜻인데, 이에 맞게 이 함수는 어떤 리스트를 입력으로 받으면 그 리스트 원소들의 인덱스와 원소 그 자체를 동시에 반환합니다. 아래 예시를 보면 어떤 느낌인지 아실 겁니다.

name_list = ['홍길동', '이순신', '장보고']

for i, element in enumerate(name_list):
    print(i, element)

참고로 위에서 설명한 range() 함수와 enumerate() 함수는 단독으로 실행해봤자 그 결과값을 수의 형태로 출력해주지 않습니다. 반드시 print()를 비롯한 다른 함수와 조합해야 그 리턴값을 사용할 수 있으니 이 점 참고해주세요.

반복문의 중첩

반복문을 두 번 이상 중첩해서 사용할 수도 있습니다. 아래 예제는 for 문을 두 번 중첩해서 구구단을 출력하는 코드입니다.

for i in range(1, 10):
    for j in range(1, 10):
        print(i, 'x', j, '=', i * j)

반복문 + 조건문

반복문과 저번 포스트에서 설명한 조건문을 조합해보겠습니다. 아래 예제는 1부터 100까지의 수에 대하여 369 게임을 한다고 했을 때 박수를 치는 총 횟수를 구하는 코드입니다.

cnt = 0
for i in range(1, 101):
    tens = i // 10
    units = 1 % 10
    if tens in [3, 6, 9]:
        cnt += 1
    if units in [3, 6, 9]:
        cnt += 1
print(cnt)

break

또다른 변칙적인 사용에는 break라는 구문이 추가로 필요합니다. break는 해당 break 문을 포함하는 반복문을 탈출하는 명령어로, 주로 반복문 내에서 조건문과 조합해서 사용하게 됩니다. 다음 예제는 1부터 10까지의 수 중 소수를 찾는 코드입니다.

소수 (prime number): 1과 자기 자신만을 약수로 갖는 수

n = 10
for x in range(2, n+1):
    prime_number = True
    for y in range(2, x):
        if x % y == 0:
            print(x, '=', y, '*', x//y)
            prime_number=False
            break
    if prime_number:
        print(x, '은(는) 소수입니다.')

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.`