기본 콘텐츠로 건너뛰기

방송대 방통대 파이썬프로그래밍기초 6강 - 반복 구조와 리스트 - 요약 노트 시험족보 예상문제 - 올에이클래스

파이썬프로그래밍기초 6강 - 반복 구조와 리스트

파이썬프로그래밍기초 6강 - 반복 구조와 리스트

같은 작업을 효율적으로 되풀이하는 반복 구조의 원리와 설계 방법을 학습한다. while 반복문, 증감·복합 할당, 합계와 구구단 프로그램을 익힌 뒤 여러 값을 순서대로 저장하는 리스트와 for 반복문을 이용해 반복 처리를 확장한다.

제1장 반복 구조의 개념

1. 반복 구조란

반복 구조는 특정 영역의 명령문을 여러 번 실행하는 프로그램 제어 구조다. 같은 명령을 필요한 횟수만큼 직접 복사할 수도 있지만, 반복 횟수가 많아지면 코드가 길어지고 수정하기 어려워진다. 반복문을 사용하면 반복할 명령을 한 번만 작성하고 조건이나 데이터에 따라 여러 번 실행할 수 있다.

현실의 생산 과정에서도 하나의 제품을 설계한 뒤 같은 공정으로 여러 개를 생산하고 배송한다. 프로그램의 반복 구조도 반복 작업을 한 번 설계한 뒤 컴퓨터가 그 절차를 여러 번 수행하게 한다. 파이썬의 대표적인 반복문에는 조건을 기준으로 반복하는 while문과 데이터 항목을 차례로 처리하는 for문이 있다.

2. 반복문 없이 같은 문장 출력하기

문자열 "나는 파이썬을 잘 다룰 수 있다!"를 다섯 번 출력하려면 print문을 다섯 줄 작성할 수 있다. 결과는 얻을 수 있지만 반복 횟수가 바뀔 때마다 코드 줄을 직접 추가하거나 삭제해야 한다.

msg = "나는 파이썬을 잘 다룰 수 있다!"
print(msg)
print(msg)
print(msg)
print(msg)
print(msg)

반복문의 목적은 이처럼 동일한 구조의 명령을 간결하게 표현하는 것이다. 반복 횟수가 5회에서 100회로 바뀌어도 반복 조건만 수정하면 되므로 프로그램의 확장성과 유지보수성이 높아진다.

제2장 while 반복문

1. while문의 구문 형식

while문은 조건식의 결과가 참인 동안 명령 블록을 반복한다. 조건식 뒤에는 콜론을 쓰고, 반복할 명령은 같은 수준으로 들여쓴다.

while 조건식:
    반복할 명령

조건식이 참이면 들여쓴 명령을 실행한 뒤 다시 조건을 검사한다. 조건식이 거짓이 되면 반복을 끝내고 반복문 다음 명령으로 이동한다.

2. while문의 제어 흐름

while문은 먼저 조건식을 평가한다. 참이면 반복 블록을 실행하고 다시 조건 검사 위치로 돌아간다. 거짓이면 반복 블록을 한 번도 실행하지 않거나, 이미 반복 중이었다면 반복을 종료한다. 따라서 처음부터 조건이 거짓이면 반복문 내부는 실행되지 않는다.

반복을 제어하려면 현재 반복 상태를 나타내는 변수가 필요하다. 이 변수를 제어 변수라고 한다. 반복을 시작하기 전에 초기값을 정하고, 반복할 때마다 값을 갱신하여 언젠가 종료 조건에 도달하게 해야 한다.

3. 다섯 번 출력하는 개선된 프로그램

msg = "나는 파이썬을 잘 다룰 수 있다!"
count = 1

while count <= 5:
    print(msg)
    count = count + 1

count = 1은 제어 변수의 초기화다. count <= 5는 반복을 계속할 조건이며, count = count + 1은 반복할 때마다 제어 변수를 1씩 증가시키는 갱신이다. count가 6이 되면 조건이 거짓이 되어 반복이 종료된다.

설계 요소예제 코드역할
초기화count = 1반복을 시작할 상태 설정
조건 검사count <= 5반복을 계속할지 결정
반복 작업print(msg)매 반복에서 수행할 핵심 명령
갱신count = count + 1제어 변수를 종료 조건 쪽으로 변화

4. 증감 할당과 복합 할당 연산자

count = count + 1처럼 변수의 현재 값에 연산한 결과를 다시 같은 변수에 저장하는 문장을 증감 할당으로 표현할 수 있다. 파이썬에서는 count += 1로 간결하게 쓸 수 있다.

복합 할당같은 의미의 일반 할당
a += ba = a + b
a -= ba = a - b
a *= ba = a * b
a /= ba = a / b
a //= ba = a // b
a %= ba = a % b
a **= ba = a ** b

5. 무한 반복의 위험

반복 조건이 계속 참으로 유지되면 반복문은 끝나지 않는다. 예제에서 count += 1을 빠뜨리면 count가 계속 1이므로 count <= 5가 영원히 참이 된다. 이것을 무한 반복이라 한다.

반복문을 작성할 때 확인할 세 가지

제어 변수의 초기값이 올바른지, 반복 조건이 종료 시점을 표현하는지, 반복 블록에서 제어 변수가 종료 방향으로 변하는지 반드시 확인해야 한다.

제3장 반복 구조 설계와 응용

1. 1부터 n까지의 합

1부터 n까지의 합을 반복문으로 구하려면 누적 합을 저장할 변수와 현재 더할 수를 나타내는 제어 변수가 필요하다. 합계는 처음에 0으로, 더할 수는 1로 초기화한다. 제어 변수가 n 이하인 동안 현재 값을 합계에 더하고 제어 변수를 1 증가시킨다.

n = int(input("합계를 구할 양의 정수를 입력하세요: "))
total = 0
i = 1

while i <= n:
    total += i
    i += 1

print("1부터", n, "까지의 합은", total, "입니다.")

total은 반복할 때마다 계산 결과를 누적하는 누적 변수다. n이 10이면 1부터 10까지 차례로 더해 55가 되고, n이 100이면 결과는 5050이 된다.

2. 반복 구조 설계 전략

반복 프로그램은 먼저 반복해야 할 명령을 찾고, 반복이 계속되는 조건을 정하며, 반복 전 초기 상태와 반복 중 갱신 방법을 설계하는 순서로 접근할 수 있다. 특히 누적 계산에서는 누적 변수의 초기값을 연산의 성질에 맞게 정해야 한다. 합계는 0에서 시작하는 것이 자연스럽다.

단계질문합계 예제
1. 반복 작업 결정매번 무엇을 수행하는가?total += i
2. 제어 변수 선택반복 상태를 무엇으로 나타내는가?i
3. 초기화어떤 값에서 시작하는가?total = 0, i = 1
4. 조건언제까지 반복하는가?i <= n
5. 갱신종료 조건에 어떻게 다가가는가?i += 1

3. 구구단 출력 프로그램

구구단 한 단을 출력하는 프로그램도 같은 설계 전략을 적용한다. 사용자가 단을 입력하면 곱하는 수를 1부터 9까지 증가시키면서 곱셈 결과를 출력한다.

dan = int(input("출력할 단을 입력하세요: "))
i = 1

while i <= 9:
    print(dan, "X", i, "=", dan * i)
    i += 1

i가 1부터 9까지 변하므로 반복 블록은 정확히 아홉 번 실행된다. 출력할 단은 반복 중 바뀌지 않고, 곱하는 수와 계산 결과만 반복마다 달라진다.

제4장 리스트의 개념과 사용

1. 리스트란

리스트(list)는 여러 데이터를 순서대로 저장하는 파이썬의 컨테이너 타입이다. 여러 값을 하나의 변수 이름으로 관리할 수 있어 반복 처리와 잘 어울린다. 리스트 안에 저장된 개별 값을 원소 또는 항목이라고 한다.

리스트는 항목의 순서가 유지되고, 같은 값을 중복해서 저장할 수 있으며, 생성한 뒤 항목을 변경할 수 있는 가변 자료형이다. 하나의 리스트에 정수, 실수, 문자열처럼 서로 다른 타입의 값을 함께 넣는 것도 가능하다.

특징설명
순서항목이 저장된 순서가 유지됨
인덱스각 항목을 위치 번호로 접근할 수 있음
가변성생성 후 항목을 변경할 수 있음
중복같은 값을 여러 번 저장할 수 있음
혼합 타입서로 다른 데이터 타입을 한 리스트에 저장 가능

2. 리스트 생성

리스트는 대괄호 [] 안에 항목을 쉼표로 구분하여 만든다. 빈 대괄호는 항목이 없는 빈 리스트를 뜻한다.

hei_list = [1, 4, 14, 26, 31]
body = [181.78, "dark brown", "black"]
empty = []

hei_list는 정수만 저장하지만 body는 실수와 문자열을 함께 저장한다. 리스트 이름은 리스트 전체를 가리키며 각 항목은 인덱스로 선택한다.

3. 인덱스 연산자

인덱스는 리스트에서 항목의 위치를 나타내는 번호다. 파이썬의 첫 번째 인덱스는 0이다. hei_list[0]은 첫 번째 항목, hei_list[4]는 다섯 번째 항목을 의미한다.

hei_list = [1, 5, 14, 31, 45]
print(hei_list[2])
hei_list[4] = 46

첫 번째 출력은 인덱스 2에 있는 세 번째 값 14다. 두 번째 문장은 다섯 번째 항목을 46으로 변경한다.

인덱스는 0부터 시작한다

길이가 5인 리스트의 유효한 양의 인덱스는 0, 1, 2, 3, 4다. 인덱스 5에 접근하면 범위를 벗어난다.

제5장 for 반복문과 리스트 처리

1. 계수 제어 반복

for문은 리스트처럼 여러 항목을 가진 데이터에서 원소를 하나씩 꺼내 반복 블록을 실행한다. 반복 횟수가 데이터 항목 수에 의해 결정되므로 계수 제어 반복에 적합하다.

for 제어변수 in 시퀀스:
    반복할 명령

매 반복마다 시퀀스의 다음 항목이 제어 변수에 저장된다. 모든 항목을 처리하면 반복이 자동으로 끝나므로 단순 리스트 순회에서는 별도의 증감문이 필요하지 않다.

2. 리스트의 모든 항목 출력

hei_list = [1, 4, 14, 26, 31]

for hei in hei_list:
    print(hei)

첫 반복에서 hei는 1, 다음 반복에서는 4가 되며 마지막에는 31이 된다. for문은 리스트의 저장 순서를 따라 각 항목을 한 번씩 처리한다.

3. 원뿔 계산 프로그램에 리스트 적용

반지름과 높이의 여러 조합에 대해 원뿔의 부피와 겉넓이를 계산하려면 반지름 목록과 높이 목록을 리스트로 저장할 수 있다. 바깥쪽 for문이 반지름을 선택하고 안쪽 for문이 높이를 차례로 선택하면 모든 조합을 처리한다. 이런 구조를 중첩 반복이라 한다.

rad_list = [10, 20, 30]
hei_list = [1, 4, 31]

for rad in rad_list:
    for hei in hei_list:
        vol = 1 / 3 * 3.14 * rad ** 2 * hei
        slant = (rad ** 2 + hei ** 2) ** (1 / 2)
        surf = 3.14 * rad ** 2 + 3.14 * rad * slant

        print("반지름", rad, ", 높이", hei, "원뿔")
        print("부피:", vol, "겉넓이:", round(surf, 2))

반지름이 3개이고 높이가 3개이면 안쪽 계산은 총 9번 실행된다. 각 반지름마다 모든 높이를 조합하기 때문이다. 리스트의 항목 수가 달라져도 반복문 자체를 다시 작성할 필요 없이 리스트 내용만 수정하면 된다.

while과 for의 선택

종료 여부가 조건에 따라 결정되면 while문이 자연스럽고, 리스트의 모든 항목을 차례로 처리하려면 for문이 간결하다. 두 반복문 모두 들여쓰기된 블록을 반복한다는 공통점이 있다.

핵심 개념 정리

① 반복 구조: 같은 명령 블록을 조건이나 데이터에 따라 여러 번 실행한다.

② while문: 조건식이 참인 동안 반복하며 초기화, 조건, 반복 작업, 제어 변수 갱신이 필요하다.

③ 복합 할당: count += 1count = count + 1을 간결하게 표현한다.

④ 무한 반복: 조건이 계속 참이거나 제어 변수가 갱신되지 않으면 반복이 끝나지 않는다.

⑤ 누적 계산: 합계를 저장할 변수를 0으로 초기화하고 각 반복의 값을 더한다.

⑥ 리스트: 여러 항목을 순서대로 저장하는 가변 컨테이너이며 첫 인덱스는 0이다.

⑦ for문: 리스트의 항목을 하나씩 제어 변수에 넣어 반복하고, 중첩하면 여러 목록의 조합을 처리할 수 있다.

최종 정리

반복 구조는 반복 횟수를 줄이는 문법이 아니라 반복 작업의 규칙을 설계하는 방법이다. 종료 조건을 정확히 만들고, 여러 값을 리스트로 구조화하여 whilefor를 목적에 맞게 선택하는 것이 핵심이다.

예상문제 20선

1. 반복 구조를 사용하는 주된 이유는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
반복문은 동일한 구조의 명령을 한 번 작성하고 필요한 횟수만큼 실행하게 한다.

2. while문의 반복 블록이 실행되는 조건은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
while문은 조건을 먼저 검사하고 참이면 블록을 실행한 뒤 다시 조건을 검사한다.

3. 반복문의 제어 변수를 반복 전에 시작값으로 설정하는 단계는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
초기화는 반복이 시작되기 전에 제어 변수와 누적 변수의 첫 상태를 설정하는 단계다.

4. count = 1이고 while count <= 5:에서 갱신문을 생략하면 발생하기 쉬운 문제는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
count가 1에서 변하지 않으면 count <= 5는 계속 참이므로 반복이 종료되지 않는다.

5. count += 1과 같은 의미의 문장은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
+=는 현재 변수 값에 오른쪽 값을 더한 뒤 다시 같은 변수에 저장하는 복합 할당 연산자다.

6. a *= b와 같은 의미는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
*=는 곱셈 결과를 왼쪽 변수에 다시 저장하는 복합 할당이다.

7. 1부터 n까지의 합을 저장할 변수의 적절한 초기값은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
합계 누적 변수는 아직 아무 값도 더하지 않은 상태를 나타내는 0으로 초기화한다.

8. i = 1이고 while i <= 9:에서 매번 i += 1을 실행하면 반복 횟수는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
i는 1부터 9까지 조건을 만족하므로 총 아홉 번 반복한다.

9. 리스트에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
리스트는 여러 값을 순서대로 저장하며 인덱스로 접근하고 항목을 변경할 수 있다.

10. 빈 리스트를 만드는 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
리스트는 대괄호로 만들며 항목을 쓰지 않은 []는 빈 리스트다.

11. nums = [10, 20, 30]일 때 nums[0]의 값은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
파이썬 리스트의 첫 항목은 인덱스 0에 있으므로 값은 10이다.

12. 길이가 5인 리스트에서 마지막 항목의 양의 인덱스는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
인덱스가 0부터 시작하므로 항목 다섯 개의 인덱스는 0부터 4까지다.

13. 리스트의 특징으로 옳지 않은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
리스트는 같은 값을 여러 번 저장할 수 있으므로 ①은 옳지 않은 설명이다.

14. for x in [2, 4, 6]:의 반복 블록은 몇 번 실행되는가?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
리스트에 항목이 세 개 있으므로 x가 2, 4, 6을 차례로 받아 세 번 실행된다.

15. 리스트의 모든 항목을 차례로 처리할 때 일반적으로 가장 간결한 반복문은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
for문은 리스트의 항목을 자동으로 하나씩 제어 변수에 넣어 처리한다.

16. for문으로 리스트를 순회할 때 별도의 증감문이 보통 필요 없는 이유는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
for문은 시퀀스의 다음 항목을 자동으로 가져오고 모든 항목을 처리하면 종료한다.

17. 바깥 리스트 항목이 3개, 안쪽 리스트 항목이 4개인 완전한 중첩 반복의 내부 실행 횟수는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
바깥 반복의 각 항목마다 안쪽 항목 4개를 모두 처리하므로 3×4=12번이다.

18. 조건이 언제 거짓이 될지 데이터 처리 중 결정되는 반복에 자연스러운 문장은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
while문은 특정 조건이 참인 동안 계속하므로 조건 기반 반복에 적합하다.

19. 다음 코드가 출력하는 값은?
nums = [1, 5, 9]
print(nums[1])

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
인덱스 1은 리스트의 두 번째 항목을 가리키므로 5가 출력된다.

20. 반복문 설계에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
네 요소가 논리적으로 연결되어야 원하는 횟수만큼 실행되고 정상적으로 종료되는 반복문이 된다.

댓글