학습 목표
- 반복 구조의 개념과 필요성을 설명할 수 있음
- 반복 구조 설계 전략을 통해 반복문을 작성할 수 있음
- 리스트의 개념에 대해 설명할 수 있음
주요 용어
- 조건 제어 반복
- 참과 거짓 조건에 의해 반복 여부가 결정되는 반복 구조
- 계수 제어 반복
- 특정 계수만큼 반복 횟수가 정해진 반복 구조
- 인덱스 연산자
- 시퀀스 타입의 원소에 접근하는 연산자
- 중첩 반복 구조
- 반복 구조 내 다른 반복 구조를 내포한 형식
강의록
반복 구조의 정의
반복 구조의 개념
- 특정 영역의 명령문을 여러 번 실행하는 구조
- 반복 횟수를 조건에 따라 결정
- loop, iterate, repeat 용어가 혼용

반복 출력 프로그램(while 문 미사용)
-
‘저는 파이썬을 잘 다룰 수 있습니다’를 5번 출력하는 프로그램을 작성하시오.
1 2 3 4 5 6 7 8 9
# 메시지 저장 msg = "저는 파이썬을 잘 다룰 수 있습니다." # 5번 반복 출력 (개선 전) print(msg) print(msg) print(msg) print(msg) print(msg)
반복 구조의 구문 형식
- 구문 형식
-
조건 제어 반복 (
while)
-
- 구문 형식
-
계수 제어 반복 (
for)
-
반복 구조의 실행 흐름
-
조건 제어 반복

- 흐름
- 반복-계속-조건을 검사함
- 조건이 True이면, 명령 블록을 실행함
- 다시 반복-계속 조건을 검사함
- 조건이 False가 될 때까지 2-3 단계를 반복함
- 조건이 False이면, 반복 구조를 종료함
- 흐름
반복 출력 프로그램 (while 사용)
-
‘저는 파이썬을 잘 다룰 수 있습니다’를 5번 출력하는 프로그램을
while을 사용하여 작성하시오.1 2 3 4 5 6 7 8
# 메시지 저장 msg = "저는 파이썬을 잘 다룰 수 있습니다." # 5번 반복 출력 (while 사용) count = 1 while count <= 5: print(msg) count = count + 1 # 추가하지않으면 무한 반복함
반복 구조 설계 전략
- 반복 되어야 하는 명령 블록을 작성
-
반복 되어야 하는 명령문을 다음과 같이 반복 구조로 작성
1 2
while True: 명령 블록
-
반복-계속-조건을 작성하고 반복 구조를 제어하기 위해 반복 제어 명령문을 추가
1 2 3
while 반복-계속-조건: 명령 블록 반복 제어 명령문
n까지 합 계산 프로그램(반복 구조 설계 전략 적용)
-
1부터 사용자가 입력한 값 n까지 합을 구하는 프로그램을 작성하시오
1
sum_value = sum_value + i
1 2
while True: sum_value = sum_value + i
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 초기값 설정 sum_value = 0 i = 1 # 사용자 입력 받기 last = int(input("어디까지 더할까요?: ")) # 입력값을 정수로 변환 # 합 계산 (while 사용) while i <= last: # 종결 조건 sum_value = sum_value + i i = i + 1 # 결과 출력 print(f"1부터 {last}까지의 합은 {sum_value}입니다.")
- 반복 되어야 할 것이 무엇인가?
- 1번 명령문을 반복 구조 안에 작성
- True 부분에 종결 조건을 작성하고, 반복 제어 명령문 추가
구구단 출력 프로그램
-
출력할 단을 입력 받아 해당 단의 구구단을 출력하는 프로그램을 작성하시오.

1 2 3 4 5 6 7 8
# 단 입력 받기 base = int(input("출력할 단을 입력하세요: ")) # 구구단 출력 (while 사용) i = 1 while i <= 9: # 종결 조건 작성 print(base, "X", i, "=", base * i) i = i + 1
리스트
원뿔 계산 프로그램 개선
-
반지름은 10이고 높이가 1, 5, 14, 26, 31인 원뿔의 부피와 겉넓이를 각각 출력하시오.

- 원뿔 계산 프로그램을 여러 개의 높이 값에 대해 반복적으로 실행하는 것은 비효율적임
리스트의 개념
- 순서화 된 값의 집합체를 저장할 수 있는 데이터 타입
- 단일 식별자로 연속된 저장 공간 접근 수단 제공
- 개별 원소의 값을 수정, 추가, 삭제 가능
- 원소(element)의 나열을 저장할 수 있는 시퀀스 타입 중 하나
- 리스트, 세트, 투플, 딕셔너리 등
리스트의 구성
-
원소들의 순서를 표현

- 참조 변수
- 리스트 객체를 가리키는 변수
- 리스트 객체
- 여러 개의 값을 순서대로 담고 있는 실체
- 요소 (Element)
- 리스트 내부에 저장된 각각의 값
- 참조 변수
리스트의 생성
-
구문 형식

-
인용 부호 [ 와 ]를 사용하여 표현
1
[1, 4, 14, 26, 31]
1
hei_list = [1, 4, 14, 26, 31]
-
원소는 콤마(,)로 나열
1 2
# 다양한 자료형을 포함하는 리스트 생성 body = [181, 78, "dark brown", "black"]
-
인덱스 연산자
- 시퀀스 타입의 원소에 접근하는 연산자
- 접근 연산자
[,]사용 -
원소에 부여된 인덱스 번호로 지칭

- 리스트의 각 요소는 0부터 시작하는 고유한 번호(인덱스)를 가짐
리스트변수[인덱스]형식으로 특정 위치의 요소에 접근하거나 값을 변경할 수 있음
1
print(hei_list[2]) # 출력: 14
1 2
hei_list[4] = 45 print(hei_list) # 출력: [1, 5, 14, 26, 45]
- 접근 연산자
계수 제어 반복의 사용
-
구문 형식

- 계수-제어 변수와 시퀀스 사용
- 반복 시 계수-제어-변수에 시퀀스의 원소 할당
-
for루프는 리스트와 같은 시퀀스 자료형의 요소를 하나씩 순차적으로 변수에 할당하며 반복 함1 2 3 4 5 6
# 리스트 생성 hei_list = [1, 4, 14, 26, 31] # 리스트의 각 요소를 순회하며 출력 for hei in hei_list: print(hei)
원뿔 계산 프로그램 개선
-
반지름은 10이고 높이가 1, 5, 14, 26, 31인 원뿔의 부피와 겉넓이를 각각 출력하시오.

-
높이 값들을 리스트에 저장하고,
for루프를 사용하여 각 높이에 대한 원뿔 계산을 반복 수행1 2 3 4 5 6 7 8 9 10 11
rad = 10 hei_list = [1, 4, 14, 26, 31] # 리스트의 각 요소를 순회하며 출력 for hei in hei_list: # 부피 & 겉넓이 계산 vol = 1 / 3 * 3.14 * rad ** 2 + 3.14 * rad * hei surf = 3.14 * rad ** 2 + 3.14 * rad * hei print("반지름", rad, "높이", hei, "원뿔") print("원뿔의 부피는", vol, "입니다.") print("원뿔의 겉넓이는", surf, "입니다.")
반복 구조의 확장
원뿔 계산 프로그램 개선
-
반지름과 높이가 (10, 1), (20, 5), (30, 14)인 원뿔의 부피와 겉넓이를 각각 출력하시오.

- 반지름들 사이에 나름의 규칙이 있는 경우 → 리스트 생성 자동화
리스트 생성 자동화
-
리스트 내 원소에 규칙성이 있는 경우 생성 자동화를 위해 함수 사용 가능

- a부터 b보다 작은 값까지 k씩 증가 시켜 시퀀스 생성
-
range(start, stop, step)- 연속된 숫자를 생성하는 객체를 만듬
start: 시작 숫자 (포함, 생략 시 기본값 0)stop: 끝 숫자 (미포함)step: 증가 간격 (생략 시 기본값 1)
range 함수의 사용
-
1부터 99까지의 숫자를 생성
1
range(1, 100, 1)
1
range(1, 100)

-
10부터 30까지 10씩 증가하는 숫자를 생성
1
rad_list = range(10, 40, 10)

반복 출력 프로그램 개선 (for 와 range 사용)
-
‘저는 파이썬을 잘 다룰 수 있습니다’를 5번 출력하는 프로그램을 작성하시오
1 2 3 4 5 6
# 메시지 저장 msg = "저는 파이썬을 잘 다룰 수 있습니다." # 5번 반복 출력 for count in range(1, 6): # 1부터 5까지 반복 print(msg)
원뿔 계산 프로그램 개선 (for 와 range 활용)
-
반지름과 높이가 (10, 1), (20, 5), (30, 14)인 원뿔의 부피와 겉넓이를 각각 출력하시오.
1 2 3 4 5 6 7 8 9
rad_list = range(10, 31, 10) hei_list = [1, 5, 14] for rad, hei in zip(rad_list, hei_list): vol = 1 / 3 * 3.14 * rad ** 2 + 3.14 * rad * hei surf = 3.14 * rad ** 2 + 3.14 * rad * hei print("반지름", rad, "높이", hei, "원뿔") print("원뿔의 부피는", vol, "입니다.") print("원뿔의 겉넓이는", surf, "입니다.")
zip함수- 여러 리스트의 값들을 하나씩 엮어서 가져옴
구구단 출력 프로그램 개선 (전체 구구단표 출력)
-
구구단 표 출력

중첩 반복 구조
- 반복 구조 내 다른 반복 구조를 내포한 형식
-
구문 형식

- 바깥쪽 반복이 한 번 실행될 때마다 안쪽 반복은 전체 사이클을 모두 실행함
중첩 반복 구조의 실행 흐름

- 바깥쪽 루프 시작
- 바깥쪽 루프 조건 검사 (True)
- 안쪽 루프 시작
- 안쪽 루프 조건 검사 (True)
- 안쪽 루프 코드 블록 실행
- 안쪽 루프 조건 다시 검사
- False가 될 때까지 4-5 반복
- 안쪽 루프 종료
- 바깥쪽 루프 코드 블록 (안쪽 루프 이후 부분) 실행 (있다면)
- 바깥쪽 루프 조건 다시 검사
- False가 될 때까지 3-8 반복
- 바깥쪽 루프 종료
format 함수
-
데이터를 양식에 맞춰 형식화

- 문자열 내에서 값의 형식을 지정하여 표현할 때 사용
format(값, "형식지정자")형태로 사용 가능함
- 형식 지정자 구성
[정렬방향][필드폭][데이터타입]- 정렬 방향
<(왼쪽 정렬),>(오른쪽 정렬),^(가운데 정렬)
- 필드 폭
- 해당 값이 차지할 최소 너비 (칸 수)
- 데이터 타입
d(정수),s(문자열),f(실수) 등
- 문자열 내에서 값의 형식을 지정하여 표현할 때 사용
format 함수의 사용
- 문자열 형식
- 문자 타입은 왼쪽 정렬이 기본
-
문자열 “구구단표”를 10칸 너비에 오른쪽 정렬하여 출력

- 정수 형식
- 정수 타입은 우측 정렬이 기본
-
정수 1234를 10칸 너비에 왼쪽 정렬하여 출력

구구단 출력 프로그램 개선 (중첩 반복 및 format 사용)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 구구단표 헤더 출력
print(format("구구단표", ">20s")) # 제목 가운데 정렬 느낌으로
# 표 머리 출력
print("|", end="")
for j in range(1, 10):
print(" ", j, end = "") # 각 숫자 헤더 4칸 오른쪽 정렬
# 새로운 행 삽입
print()
print("-" * 40) # 구분선
# 구구단표 본문 출력
for i in range(1, 10): # 단 (1단 ~ 9단)
print(i, "|", end = "") # 단 표시
for j in range(1, 10): # 곱하는 수 (1 ~ 9)
print(format(i * j, ">4d"), end="") # 결과값 4칸 오른쪽 정렬
print() # 다음 단으로 넘어갈 때 줄바꿈
- 줄바꿈 없이 연달아 같은 라인에 출력할 수 있게 하는 옵션
end - 반복해야 할 구간 찾기
- 하나의 단 안에서 곱셈하는 구간
- 2~9단까지 반복
중첩 반복 구조의 공포
-
중첩 단계가 깊어질수록 반복 횟수가 기하급수적으로 증가하여 실행 시간이 매우 길어질 수 있음
1 2 3 4 5
# 3중첩 for 루프 (각 1000번 반복 시): 1000 * 1000 * 1000 = 1,000,000,000 (10억) 번의 내부 연산 수행 for i in range(1000): for j in range(1000): for k in range(1000): result = i * j * k # 10억 번 실행됨
연습 문제
-
계수 제어 반복 구조에서 특정 반복 횟수와 반복 시 계수의 값을 정하기 위해 사용하는 데이터 타입은?
a. 시퀀스
-
다음과 같이 반복 구조 내부에 또 다른 반복 구조가 포함되어 실행 흐름을 만드는 구조를 무엇이라고 하는가?

a. 중첩 반복 구조
-
다음 코드의 출력 값으로 옳은 것은?
1 2
for i in range(1, 11): print(i, end = " ")
a. 1 2 3 4 5 6 7 8 9 10
학습 정리
- 반복 구조란 동일한 명령문에 대해서 사용자가 지정한 횟수만큼 또는 조건을 만족하는 동안 동일한 코드를 반복하여 수행할 때 사용하는 구조임
whlie문은 조건이 참(True)인 동안while문 블럭 내부의 명령문을 수행하며 조건이 거짓(False)이 될 때while문을 빠져나오는 조건 제어 반복 구조임- 리스트는 순서화 된 값의 집합체를 저장할 수 있는 시퀀스 데이터 타입의 일종임
for문은 리스트 등과 같은 시퀀스의 첫 번째 요소부터 마지막 요소까지 하나 씩 변수에 대입하여 블럭의 명령문을 수행하며 마지막 요소까지 수행한 후 종료하는 계수 제어 반복임- 중첩 반복 구조는 하나의 외부 반복 구조에 여러 개의 내부 반복 구조가 중첩되어 사용되는 구조를 말하며, 외부 반복 구조가 매 반복될 때마다 내부 반복 구조에 재 진입하여 새롭게 실행됨