2.2 반복문

반복문 (Loop Statement)

  • while

  • for

2.2.1 while 반복문

while 문은 조건식이 참(True)인 경우 반복적으로 코드를 실행합니다.

활용법

  • 문법

while <조건식>:
    <코드 블럭>
  • 예시

while True:
    print('조건식이 참일 때까지')
    print('계속 반복')

Warning

  • while 문 역시 조건식 뒤에 콜론(:)이 반드시 필요하며, 이후 실행될 코드 블럭은 4spaces들여쓰기를 합니다.

  • 반드시 종료조건을 설정해야 합니다.



while
# 위의 flow chart를 조건문을 통해 만들어봅시다.
# 아래에 코드를 작성하세요.
# while 문을 활용해봅시다.

a = 0

while a < 5:
    print(a)
    a += 1
print('끝')
0
1
2
3
4
끝

[연습] while 문 작성하기

사용자가 “안녕”이라고 입력할 때까지 인사하는 코드를 작성해보세요.

# 아래에 코드를 작성하세요.
# while 문을 활용해봅시다.

# user_input에 초기값으로 비어있는 문자열을로 초기화하고,

# user_input에 할당되는 값이 '안녕'일 떄까지,
    # '안녕?'을 출력하고
    # user_input에 사용자의 입력값을 받는 코드를 작성하시오.
    
user_input = ''
while user_input != '안녕':
    print('안녕?')
    user_input = input('말해봐 : ')
안녕?
말해봐 :  안녕

[실습] 합(Summation)

1부터 사용자가 입력한 양의 정수까지의 총합을 구하는 코드를 작성해보세요.


[입력 예시]

10

[출력 예시]

55

# 아래에 코드를 작성하세요

n = 0
total = 0 
user_input = int(input())
while n <= user_input:
    total += n
    n += 1
print(total)
 10
55

[응용] 한자리 씩 출력하기

사용자로부터 숫자 입력 받은 양의 정수의 각 자리 수를 1의 자리부터 차례대로 출력하는 코드를 작성해보세요.


[입력 예시]

185

[출력 예시]

5

8

1

# 아래에 코드를 작성하세요.

n = int(input())
while n > 0:
    print(n % 10)
    n = n // 10
 185
5
8
1

2.2.2 for 문

for 문은 시퀀스(string, tuple, list, range)를 포함한 순회가능한 객체(iterable)의 요소들을 순회합니다.


활용법

  • 문법

for <임시변수> in <순회가능한데이터(iterable)>:
    <코드 블럭>
  • 예시

for menu in ['김밥', '햄버거', '피자', '라면']:
    print(menu)
# flowchart를 for문을 통해 코드로 작성해봅시다.
# 아래에 코드를 작성하세요.

for num in [1, 2, 3, 4, 5]:
    print(num)
print('끝')
1
2
3
4
5
끝

for animation

for 문에서 요소 값에 다른 값을 할당해도 다음 반복구문에 영향을 주지 않습니다.

다음 요소 값에 의해 덮어 씌워지기 때문입니다.

# for 문 안에서 임시 변수에 다른 값을 할당해도 반복구문에 영향을 주지 않습니다.

for i in range(10):
    print(i)
    i = 5 
0
1
2
3
4
5
6
7
8
9

[연습] for 문 작성하기

for 문을 활용하여 사용자가 입력한 문자를 한글자씩 출력해보세요.


[입력 예시]

문자를 입력하세요 : 안녕!

[출력 예시]

안
녕
!
chars = input('문자를 입력하세요 : ')
문자를 입력하세요 :  안녕!
# 아래에 코드를 작성하세요.
# for 문을 활용해봅시다.
# 변수 char에 할당된 문자를 한글자씩 출력하는 for 반복문을 작성하시오.

for char in chars:
    print(char)
안
녕
!

[실습] for 문과 if 문 작성하기

반복문과 조건문만 활용하여 1~30까지 숫자 중에 홀수만 출력해보세요.


[출력 예시]

1
3
5
...
27
29
# 아래에 코드를 작성하세요.

for i in range(1, 31):
    if i % 2:
        print(i)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29

리스트(list) 순회에서 index의 활용하기

range(리스트의 길이)

range()와 순회할 list의 길이를 활용하여 index를 조작 가능합니다.

# range 함수로 0~3 범위를 순회하여 출력하는 for 문을 작성해봅시다.

for i in range(3):
    print(i)
0
1
2
# range(리스트의 길이)를 활용해서 출력해봅시다.
# 0부터 리스트의 길이 만큼의 범위를 순회하면서 인덱스 숫자를 출력하는 for 문을 작성해봅시다.

menus = ['짜장면', '초밥', '피자']
for idx in range(len(menus)):
    print(idx)
0
1
2
# 홀수번째 메뉴를 샐러드로 바꾼다면?

menus = ['짜장면', '초밥', '피자', '치킨', '햄버거', '곱창', '소고기', '삼겹살', '김치찌개']
for idx in range(len(menus)):
    if idx % 2:
        menus[i] = '샐러드'
print(menus)
['짜장면', '샐러드', '피자', '샐러드', '햄버거', '샐러드', '소고기', '샐러드', '김치찌개']
# 순서를 함께 출력해봅시다.
# 출력 예) 
# 1번쨰 메뉴: 짜장면
# 2번쨰 메뉴: 초밥
# 3번쨰 메뉴: 피자
# 리스트의 길이 만큼의 범위를 순회하면서 메뉴의 순서와 해당 순서의 메뉴를 출력하는 for 문을 작성해봅시다.

menus = ['짜장면', '초밥', '피자']
for idx in range(len(menus)):
    print(f'{idx + 1}번째 메뉴: {menus[idx]}')
1번째 메뉴: 짜장면
2번째 메뉴: 초밥
3번째 메뉴: 피자

enumerate()

인덱스(index)와 값(value)을 함께 활용 가능합니다.

enumerate()를 활용하면, 추가적인 변수를 활용할 수 있습니다.

  • enumerate()내장 함수 중 하나이며, 다음과 같이 구성되어 있습니다.

<img src="https://user-images.githubusercontent.com/18046097/61180561-3993e180-a653-11e9-9558-085c9a0ad65d.png", alt="enumerate">
# enumerate()를 활용해서 출력해봅시다.

lunchs = ['짜장면', '초밥', '피자']

for idx, lunch in enumerate(lunchs):
    print(idx, lunch)
0 짜장면
1 초밥
2 피자
# enumerate() 에 의해 반환되는 인덱스와 값(value)를 함께 출력하는 for 반복문을 작성해봅시다.

for idx, lunch in enumerate(lunchs):
    print(idx, lunch)
0 짜장면
1 초밥
2 피자
# enumerate()를 사용하였을 때 어떻게 표현이 되는지 확인해봅시다.

print(enumerate(lunchs))
print(list(enumerate(lunchs)))
<enumerate object at 0x000002534D39DAC0>
[(0, '짜장면'), (1, '초밥'), (2, '피자')]
# 첫번쨰 항목의 type을 확인해봅시다.

print(list(enumerate(lunchs))[0])
print(type(list(enumerate(lunchs))[0]))
(0, '짜장면')
<class 'tuple'>
  • 숫자를 1부터 카운트 할 수도 있습니다.

# enumerate() 에 의해 반환되는 인덱스가 1로 시작하여 카운트되는 for 반복문을 작성해봅시다.

for idx, lunch in enumerate(lunchs, start=1):
    print(idx, lunch)
1 짜장면
2 초밥
3 피자

2.2.3 반복제어

  • break

  • continue

  • for-else

break

반복문을 종료합니다.

  • forwhile 문에서 빠져나갑니다.

# while 문에서 break를 활용해봅시다.
# 종료 조건이 있는 while 문을 작성해봅시다.
n = 0
while n < 3:
    print(n)
    n += 1
0
1
2
# 종료 조건이 없는 while 문을 break 를 활용해서 종료시키는 코드를 작성해봅시다.
n = 0
while True:
    if n == 3:
        break
    print(n)
    n += 1
0
1
2
# for 문에서도 break를 사용할 수 있습니다.
# 0부터 9까지 순회하는 for 반복문 안에서 
# 1을 초과하는 경우 '1 초과' 를 출력하며 종료하는 코드를 작성해봅시다.

for i in range(10):
    if i > 1:
        print('1 초과')
        break
    print(i)
0
1
1 초과
# 이 무한루프는 끝나지 않는다. break는 바로 위에 있는 반복문만 제어

# while True:
#     print('while')
#     for _ in range(10):
#         print('for')
#         break

while True:
    print('while')
    for _ in range(10):
        print('for')
        break
    break
while
for

[연습] break 활용하기

조건문과 반복문, break를 활용하여 리스트에서 쌀이 나왔을때 for 문을 멈추는 코드를 작성하세요.


[출력 예시]

보리

보리

잡았다!

rice = ['보리', '보리', '보리', '쌀', '보리']

# 아래에 코드를 작성하세요.

for i in rice:
    print(i)
    if i == '쌀':
        print('잡았다!')
        break
보리
보리
보리
쌀
잡았다!

continue

continue문은 continue 이후의 코드를 수행하지 않고 다음 요소부터 계속(continue)하여 반복을 수행합니다.

for i in range(6):
    if i % 2 == 0:
        continue
        # continue 이후의 코드는 실행되지 않습니다.
    print(f'{i}는 홀수다.')
1는 홀수다.
3는 홀수다.
5는 홀수다.

[연습] continue 문 작성하기

나이가 입력된 리스트가 있을때, 조건문과 반복문, continue를 활용하여 20살 이상일때만 “성인입니다”라는 출력을 하는 코드를 작성하세요.


[출력 예시]

23 살은 성인입니다.

30 살은 성인입니다.

25 살은 성인입니다.

31 살은 성인입니다.

ages = [10, 23, 8, 30, 25, 31]

# 아래에 코드를 작성하세요.

for age in ages:
    if age < 20:
        continue
    print(f'{age} 살은 성인입니다.')
23 살은 성인입니다.
30 살은 성인입니다.
25 살은 성인입니다.
31 살은 성인입니다.

else

끝까지 반복문을 실행한 이후에 실행됩니다.

  • 반복에서 리스트의 소진이나 (for 의 경우) 조건이 거짓이 돼서 (while 의 경우) 종료할 때 실행됩니다.

  • 하지만 반복문이 break 문으로 종료될 때는 실행되지 않습니다. (즉, break를 통해 중간에 종료되지 않은 경우만 실행)

# break가 안되는 상황을 확인해봅시다.

for i in range(3):
    print(i)
    if i == 100:
        print(f'{i}에서 break 실행됨.')
        break
else:
    print("break 실행안됨.")
0
1
2
break 실행안됨.
# break가 되는 상황을 확인해봅시다.

for i in range(3):
    print(i)
    if i == 1:
        print(f'{i}에서 break 시행됨.')
        break
else:
    print('break 시행안됨.')
0
1
1에서 break 시행됨.

[연습] for-else 활용하기

조건문과 반복문, break, else 를 통해서 아래의 코드와 동일한 코드를 작성하세요.

  • numbers 리스트에 4가 있을 경우 True를 출력하고, 없을 경우 False를 출력한다.


[출력 예시]

False

numbers = [1, 3, 7, 9]

# 아래에 코드를 작성하세요.

for number in numbers:
    if number == 4:
        print('True')
        break
else:
    print('False')
False

pass

아무것도 하지 않습니다.

  • 문법적으로 문장이 필요하지만, 프로그램이 특별히 할 일이 없을 때 자리를 채우는 용도로 사용할 수 있다.

passcontinue 차이

# pass
# 0부터 4의 범위를 순회하며 출력하는 반복문 안에서 3이 나오는 경우 pass 하는 조건문을 작성해봅시다.

for i in range(5):
    if i == 3:
        pass
    print(i)
0
1
2
3
4
# continue
# 0부터 4의 범위를 순회하며 출력하는 반복문 안에서 3이 나오는 경우 continue 하는 조건문을 작성해봅시다.

for i in range(5):
    if i == 3:
        continue
    print(i)
0
1
2
4