▼2020년/파이썬 기초

[Python] 파이썬에서의 제어문 (for문) (3/3)

ITISIK 2020. 1. 22. 11:17
반응형

지난 포스트에서는 반복문 중에서 while문에 대해서 알아보았다. 오늘은 나머지 하나의 반복문인 for문을 공부하려고 한다. for문은 언어를 막론하고 다양한 프로그래밍 언어에서 많이 활용되고 있으며, 파이썬에서는 for문과 관련한 다양한 기능들을 추가적으로 지원하기 때문에 확실히 공부해두면 프로그래밍 실력 향상에 큰 도움이 되리라 믿는다.

 

반복문 중 나머지 하나, for문

  for문은 주로 횟수(또는 개수)가 정해져 있는 상황에서 그만큼 반복시키고자 할 때 사용된다. 이미 전에 반복문에 대한 개념은 알아보았기 때문에 이번 포스트에서는 for문의 문법들에 대해서만 공부하겠다.

 

for문은 아래와 같이 아주 간단한 구조를 하고 있다.

for 변수 in 리스트(또는 문자열, 튜플, 딕셔너리, 집합):
    리스트(또는 문자열, 튜플, 딕셔너리, 집합)의 길이만큼 반복해서 수행할 문장.

# 위 코드에서 변수는, 리스트(또는 문자열, 튜플, 딕셔너리, 집합)를 구성하고 있는 각 성분이
# 한 번 씩 담겨져서 사용될 변수를 의미한다. 아래 예시를 보자.

  아래의 코드는 'Python'이라는 문자열에서 각 문자('P', 'y', 't', 'h', 'o', 'n')를 alpha라는 변수에 각각 넣으면서 총 6번 반복하는 코드이다. 이 과정에서 alpha라는 변수를 print() 함수를 이용해서 찍으면, 각 스펠링이 출력되게 된다.

for alpha in 'Python':
    print(alpha)

  나머지 자료형들에 대해서도 이와 같이 작동된다.

 

for문을 이용하여 문자열 속 특정 알파벳 개수세기

  테슬라 홈페이지에서 Model Y에 대한 설명 중 일부를 긁어온 본문에서 알파벳 'o'의 개수가 몇 개 인지 세는 for문을 아래와 같이 작성했다.

17개라고 한다.

직접 세어보니  17 개 맞다

  이렇게 기존에 배운 if문과 for문을 결합하여 원하는 미니 프로그램을 작성할 수 있다. 혹시 연습을 더 하고 싶은 분이 계시다면, 학생 20명의 점수를 가지고 평균점수 초과면 A학점을, 평균점수 이하이면 F학점을 주는 프로그램을 짜보셔라.

students = [20, 50, 78, 95, 100, 25, 65, 46, 75, 95, 65, 45, 16, 33, 48, 84, 94, 77, 66, 70]
count = 0
sum = 0
avg = 0
grade = []

for point in students:
    count += 1
    sum += point

avg = sum / count

for point in students:
    if(point > avg):
        grade.append('A')
    else:
        grade.append('F')


grade

 

for문에서의 break문과 continue문

  while문과 마찬가지로 for문에서도 break문과 continue문을 사용할 수 있다. 아래는 4의 배수가 나오면 for문 반복을 중지시키는 프로그램이다.

for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    if(i % 4 == 0):
        break
    print(i)

 

  아래는 continue를 이용해서 만든 3의 배수만 출력시키는 프로그램이다. for문에 의해 반복되다가 if문에 의해 continue를 만나게 되면 그 아래의 코드(출력)는 실행하지 않고 곧바로 for문의 가장 위로 올라가게 된다.

for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    if(i % 3 != 0):
        continue
    print(i)

 

for문에서 주로 사용되는 range() 함수

  range() 함수는 이름 그대로 특정 범위에 해당하는 값을 만들어준다. range() 함수의 기본 문법은 아래와 같다.

range(지정숫자)
# 0부터 시작하며 지정숫자를 포함하지 않는다.
# 예를들어 range(5)의 경우 0, 1, 2, 3, 4에 해당한다.



range(시작숫자, 끝숫자)
# 시작숫자부터 시작하여 끝숫자를 포함하지 않는다.
# 예를들어 range(4,11)의 경우 4, 5, 6, 7, 8, 9, 10에 해당한다.

  이와같이 수의 범위를 생성해낼 수 있는 range는 for문에서 아래처럼 구구단 출력에 활용할 수 있다. 아래와 같이 for문을 두 번 이상 겹쳐서 사용하는 것을 중첩포문이라고 하는데, 이와 같은 형태에서도 쉽게 결과값을 예측할 수 있어야 한다.

for i in range(2, 10):
    for j in range(2, 10):
        print(i, end=' ')
        print('*', end=' ')
        print(j, end=' ')
        print('=', end=' ')
        print(i*j, end = '')
    print('')

  파이썬의 print() 함수에는 숨어있는 인수가 몇 가지 있는데, 그중 한 가지가 end 인자이다. 원래 파이썬의 print 함수는 아래와 같이 생겼다.

print(objects, sep = ' ', end = '\n', file = sys.stdout, flush = False)

  기본값이 이와같기 때문에, 우리가 print() 함수를 사용하면 알아서 맨 뒤(end)에 '\n'이 붙었던 것이다. 그런데 이번 출력에서 end라는 인자에 공백(' ')을 부여해주었기 때문에, 줄바꿈 되지 않고 공백만이 남게 되는 것이다. 그리고 한 개의 단이 끝나고 나면 end 인자가 별도로 설정되어 있지 않은 print() 함수에 의해서 줄이 바뀌는 것이다.

 

for문 보다 나은 List Comprehension(= 리스트)

 

for문보다 코드 작성도 간결하고 작동 속도도 더 빠른 축약형 리스트이다. 축약된 list는 아래와 같은 형태로 사용한다.

[표현식 for 변수 in 리스트(또는 문자열, 튜플, 딕셔너리, 집합)]
[표현식 for 변수 in 리스트(또는 문자열, 튜플, 딕셔너리, 집합) if 조건]

위에서 숙제(?)로 냈던 학점 부여 프로그램에서 평균 이상의 점수만 골라서 리스트에 담는 프로그램을 작성해보겠다.

students = [20, 50, 78, 95, 100, 25, 65, 46, 75, 95, 65, 45, 16, 33, 48, 84, 94, 77, 66, 70]
count = 0
sum = 0
avg = 0

for point in students:
    count += 1
    sum += point

avg = sum / count

[point for point in students if avg < point]

  이렇게 해서 파이썬에서의 제어문 if, while, for문에 대해서 모두 알아보았다. 다음 포스트에서는 우리 일상생활과 가장 밀접한 연관성을 갖는 함수에 대해서 알아보도록 하겠다.

반응형