5 분 소요


단계 제목 설명  
3 반복문 for, while 등의 반복문을 사용해 봅시다.  
  소단계 문제번호 제목
  2 10950 A + B -3
    A+B를 여러 번 출력하는 문제  

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

내 제출

Test_num = int(input())

for i in range(Test_num):
    print(int(input())+int(input()))

결과

오답: 틀렸습니다.

수정 제출

Test_num = int(input())

for i in range(Test_num):
    A, B = map(int, input().split())
    print(A + B)
while 문 사용시
Test_num = int(input())

i = 0

while i < Test_num:
    i = i +1
    A, B = map(int, input().split())
    print(A + B)

결과

정답

오답 이유

이번문제의 오답 은 for 문의 단순 반복 문법 숙지 미숙입니다.

또한 while 문의 경우 초기에 반복 변수를 선언해주어야 합니다.

1. for 반복구문 수정

Test_num = int(input())

for i in range(Test_num):
    print(int(input())+int(input()))

우선 i 를 초기 반복 횟수 변수만큼 돌려주는것은 좋았지만,

해당과정에서 입력변수를 선언해준다는 것을 숙지하지 못하였습니다.

이를 다시

    A, B = map(int, input().split())

를 추가해주어 해결합니다.

2. while 문으로 해보면 어떨까

이를

Test_num = int(input())

i = 0

while i < Test_num:
    i = i +1
    A, B = map(int, input().split())
    print(A + B)

while 문의 경우 초기 반복 변수 i = 0 으로 선언해 준 뒤 while 문 내부에서 반복시 +1 을 해주어 조건이 Test_num 을 초과시에 종료되는 식으로 알고리즘을 설정해줍니다.

3.for 반복문은 이렇게 해도 된다.

for _ in range(t):  # t 만큼 반복

단순하게 범위내에서 내부 내용을 반복할 뿐인 for 문은 반복하는 대상의 변수를 underbar 와 같이 비워두고 반복해주어도 좋다.

큰 차이가 없지만, i 와 같이 자주 사용하는 변수의 경우 다른곳에 활용할 경우도 생기니 이런 방법을 가지고 코딩하는것도 좋을 것 같습니다.

사용된 코드 이론


for문의 기본 구조

for문의 기본 구조는 다음과 같다.

for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 “수행할 문장1”, “수행할 문장2” 등이 수행된다.

예제를 통해 for문 이해하기

for문은 예제를 통해서 살펴보는 것이 가장 알기 쉽다. 다음 예제를 직접 입력해 보자.

1. 전형적인 for문

>>> test_list = ['one', 'two', 'three'] 
>>> for i in test_list: 
...     print(i)
... 
one 
two 
three

['one', 'two', 'three'] 리스트의 첫 번째 요소인 ‘one’이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 다음에 두 번째 요소 ‘two’가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.

2. 다양한 for문의 사용

>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a:
...     print(first + last)
...
3
7
11

위 예는 a 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.

for문과 함께 자주 사용하는 range 함수

for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 다음은 range 함수의 간단한 사용법이다.

>>> a = range(10)
>>> a
range(0, 10)

range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

>>> a = range(1, 11)
>>> a
range(1, 11)

range 함수의 예시 살펴보기

for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

>>> add = 0 
>>> for i in range(1, 11): 
...     add = add + i 
... 
>>> print(add)
55

range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 따라서 위 예에서 i 변수에 숫자가 1부터 10까지 하나씩 차례로 대입되면서 add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.

또한 우리가 앞에서 살펴본 “60점 이상이면 합격”이라는 문장을 출력하는 예제도 range 함수를 사용해서 다음과 같이 바꿀 수 있다.

# marks3.py
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
    if marks[number] < 60: 
        continue
    print("%d번 학생 축하합니다. 합격입니다." % (number+1))

len 함수는 리스트 안의 요소 개수를 돌려주는 함수이다. 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다. number 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이고, marks[number]는 차례대로 90, 25, 67, 45, 80 값을 갖게 된다. 결과는 marks2.py 예제와 동일하다.

2. while문

앞에서 소개한대로 while문은 조건식을 가지는 녀석입니다. 조건식이 참이라면 while문 내부에 있는 블록의 문장을 실행하고, 거짓이면 반복을 멈추고 빠져나옵니다. 우선은 while문의 형태를 먼저 보도록 합시다.

while 조건식:
    문장

위를 보시면 while 다음에 조건식이 오며, 조건식 뒤에는 콜론(:)이 따라붙는다는 것을 알 수 있습니다. 우선은 while문의 간단한 예제를 보도록 합시다.

>>> i = 1
>>> while i <= 10:
    print(i, "번 출력되었습니다.")
    i += 1

1  출력되었습니다.
2  출력되었습니다.
3  출력되었습니다.
4  출력되었습니다.
5  출력되었습니다.
6  출력되었습니다.
7  출력되었습니다.
8  출력되었습니다.
9  출력되었습니다.
10  출력되었습니다.

위의 예제를 보시면 조건식에 ‘i <= 10’이 왔음을 보실 수가 있습니다. 이는 변수 i의 값이 10보다 작거나 같은 경우에 참이 성립되며, 10보다 큰 경우는 거짓에 해당합니다. 그리고 ‘i += 1’과 같은 코드는 i의 값을 1만큼 증가시키는 ‘i = i + 1’를 축약한 코드로, 반복문을 빠져나오도록 하기 위해 작성된 코드입니다. 

만약에 while문의 조건식이 처음부터 거짓이면 내부 블록에 있는 문장이 단 한번이라도 실행되지 않습니다. 왜냐하면, while문의 실행 순서는 ‘조건식을 검사 -> 내부 블록에 있는 문장을 실행 -> 조건식을 검사 -> …‘이러한 순서를 따르기 때문입니다.

위의 while문을 순서도로 나타내면 위와 같을 것입니다. i가 10보다 커지는 순간 거짓으로 넘어가서 반복문을 빠져나와 버립니다. 이해가 되셨나요? 만약에 ‘i = i + 1’과 같은 구문이 없다면, 조건식은 항상 참으로 성립하게 되어 반복문을 빠져나올수 없을 것입니다. 이렇게 되면 무한 루프에 빠지게 되는데, 무한 루프란 말 그대로 무한히 반복한다는 것입니다. 이런 상황을 피하기 위해서 i의 값을 증가시켜 주는 것입니다.

2-1. break문

이번에는 break문의 설명을 위해 위의 예제를 약간 수정해보도록 하겠습니다.

>>> i = 1
>>> while i <= 10:
    if i == 7:
        break
    print(i, "번 출력되었습니다.")
    i += 1

1  출력되었습니다.
2  출력되었습니다.
3  출력되었습니다.
4  출력되었습니다.
5  출력되었습니다.
6  출력되었습니다.

저기 사용된 break문이 어떤 녀석이냐면, 이 문법을 통해 반복문은 조건식이 거짓이여야 반복을 멈추고 빠져나오는데 우리가 직접 반복문을 강제로 탈출하게 만들 수 있습니다. 위 예제의 경우는 i가 10보다 커져야 반복을 빠져나오지만, 저기서는 i가 7일 경우에 break문을 만나 바로 반복문을 빠져나오게 됩니다. 간단하죠?

2-2. continue문

이번에는 continue문의 설명을 위해 위의 예제를 다시 한번 수정해보도록 하겠습니다.

>>> i = 0
>>> while i <= 10:
    i += 1
    if i % 2 == 1: continue
    print(i, "번 출력되었습니다.")

2  출력되었습니다.
4  출력되었습니다.
6  출력되었습니다.
8  출력되었습니다.
10  출력되었습니다.

예제에 사용된 continue문을 만나면, continue문 아래의 문장은 실행하지 않고 반복문의 시작 지점으로 되돌아갑니다. 즉, 반복문의 조건을 검사하는 부분으로 다시 되돌아간다는 말입니다. 직접 코드를 따라가보면, i의 값이 처음에 0이고 반복문 내에서 i가 1이 증가하고 i를 2로 나누어 나머지가 1인지 검사를 하는 코드가 존재합니다. 만약 i를 2로 나눈 뒤의 나머지가 1이면 이것은 홀수라는 의미가 되며, 홀수는 continue문을 만나게 됩니다.

출력된 결과를 보시면 알겠지만, 홀수가 제외되어서 출력되었음을 확인하실 수 있습니다. 홀수는 continue문을 만나 시작 지점으로 되돌아가고 i의 값이 증가하기 때문에 그렇습니다. 반대로 짝수라면 continue문을 만나지 않고, 그 아래의 문장을 계속 수행해나가는 모습을 보실 수 있습니다.



참고문헌

03-3 for문 - 점프 투 파이썬

파이썬 강좌 6편. 반복문(Loop)