2026년 4월 26일
Language / Python[Python] 4. 반복
『데이터를 다루며 배우는 파이썬』을 참고하였고, 학교에서 수업을 들으며 필기한 내용으로 보충하였다.
목차
[1] 변수 업데이트
[2] while문
[3] 무한 루프와 break
[4] continue문
[5] for문
[6] 루프 패턴 - 개수와 합계
[7] 루프 패턴 - 최댓값과 최솟값
[1] 변수 업데이트
대입문의 일반적인 패턴은 변수의 이전 값을 새로운 값으로 업데이트하는 것이다.
x = x + 1이 코드는 x의 현재 값에 1을 더해서 x를 새로운 값으로 업데이트한다. +가 =보다 우선순위가 높다. 따라서 오른쪽의 x+1이 먼저 연산되고, 그 결과값이 = 연산으로 x에 기억된다. 하지만 x의 값이 결정되어 있지 않기 때문에 위 식은 오류가 난다.
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
x = x + 1
NameError: name 'x' is not defined
따라서, 변수를 업데이트하기 전에 초기화(initialize) 가 필요한데, 보통 단순한 대입이다.
x = 5
x = x + 1
print(x)6
변수에 1을 더해 업데이트하는 것을 증가(increment) , 1을 빼는 것을 감소(decrement) 라고 한다. 이와 같이 변수는 새로운 값으로 갱신될 수 있다. 이러한 갱신 작업을, 반복의 시작과 종료에 사용할 수 있다.
[2] while문
카운트 다운 5, 4, 3, 2, 1, 발사
n = 5
while n > 0:
print(n)
n = n - 1
print('발사')5
4
3
2
1
발사
파이썬은 반복적인 작업을 더 쉽게 처리하기 위해 여러 가지 언어적 기능을 제공한다. 이러한 기능 중 하나는 while문이다.
while은 "~인 한은", "인 동안은"이라는 뜻을 가지고 있다. 그래서 while n > 0:의 뜻은 n > 0인 동안은 : 이하의 내용을 실행하라는 뜻임을 추측할 수 있다. while문의 실행 흐름은 다음과 같다.
- 조건을 평가해서 True나 False 값을 산출한다.
- 만약, 조건이 거짓이면 while문을 빠져나가서 다음 명령을 계속 실행한다.
- 만약, 조건이 참이라면 본문을 실행하고 다시 1번으로 돌아간다.
이런 형태의 실행 흐름을 루프(loop) 라고 한다. 3번 단계를 거친 뒤, 다시 1번으로 돌아가기 때문이다. 매번 실행되는 루프 본문을 반복(iteration) 이라고 부른다. 위 루프에서는 반복이 5번 발생한다. 즉, 루프 본문이 5번 실행된다.
[3] 무한 루프와 break
루프 본문은 하나 이상의 변수를 변경해서 조건이 결국 거짓이 되고 루프가 종료되도록 한다. 루프가 실행될 때마다 변해서 루프 종료 시점을 제어하는 변수를 반복 변수(iteration variable) 라고 한다. 만약, 반복 변수가 없다면 루프는 영원히 반복되어 무한 루프(infinite loop) 에 빠진다.
n = 0
while True:
print(n, end=' ')
n = n + 1
print('끝')IDLE이나 명령프롬프트에서 실행시킨 경우에는 Ctrl+C로 중단시킬 수 있다.
위 프로그램의 경우, while에서 주어지는 조건문은 항상 참(True)이므로 아래의 두 문장(print(n, end=' '), n = n + 1)은 무한히 반복된다. 이러한 무한루프는 프로그램에서 자주 이용되는데, 게임 프로그램 등은 일부러 무한 루프로 만들어 놓은 후, 특정 상황에서 빠져나올 수 있도록 프로그램을 작성하게 된다. 이때 특정 조건에서 빠져 나오도록 하는 명령문이 바로 break다.
다음의 예를 보자.
n = 0
while True:
n = n + 1
print(n, end=' ')
if n > 5:
break
print('끝')1 2 3 4 5 6 끝
앞서의 프로그램과 다른 점은 if 구문이 중간에 있고, 조건이 참이면 break라는 명령이 수행된다는 점이다. 이러한 break문은 현재의 루프를 벗어나도록 해준다.
[4] continue문
때로는 루프 실행 중에 현재 반복을 끝내고 다음 반복으로 넘어가야 할 때가 있다. 이때는 continue문을 사용해서, 전체 루프를 끝내지 않고 다음 반복으로 건너뛴다.
일반적인 무한루프 while문
n = 0
while True:
n = n + 1
print(n)1
2
3
4
5
…
→ while의 조건식이 항상 참이므로 이하 문장을 무한히 반복한다. 즉, 1씩 증가된 값이 무한히 출력된다.
continue가 있는 while문
n = 0
while True:
n = n + 1
if n == 3:
continue
print(n)1
2
4
5
…
→ while문의 조건이 참이므로 계속 출력되다가 n = n + 1로 n이 1 증가되어 3이 되면, if문에서 n == 3이 참이 되어 continue문이 실행된다. 이로 인해 다음 문장 print(n)이 실행되지 않고, 위의 while문으로 가게 된다. 따라서 3은 출력되지 않는다.
다음은 어떤 결과가 나올까?
n=0
while True:
n=n+1
if n==3 :
continue
if n==5 :
break
print(n)1
2
4
[5] for문
단어나 숫자 목록, 텍스트 파일의 내용처럼 어떤 집합(set)을 반복할 때는 for문을 활용한 한정된(definite) 범위의 루프를 쓴다. while문은 어떤 조건이 False가 될 때까지 계속 루프를 돌기 때문에 무한(infinite) 루프라고 부르는 반면, for 루프는 범위를 알고 있기 때문에 집합 내의 항목 수만 반복한다.
friends = ['Joseph', 'Glenn', 'Sally']
for friend in friends:
print('Happy New Year: ', friend)
print('끝')Happy New Year: Joseph
Happy New Year: Glenn
Happy New Year: Sally
끝
파이썬 용어로 friends는 세 개의 문자열을 갖고 있는 리스트다. 프로그램의 해설은 다음과 같다.
- friends의 리스트에서 하나의 문자열(여기서는
Joseph)을 가져와서 이를 friend에 넣고 다음 문장을 실행한다.
print('Happy New Year:' , friend) - friends의 리스트에서 그 다음에 놓인 하나의 문자열(여기서는
Glenn)을 가져와서 이를 friend에 넣고 다음 문장을 실행한다.
print('Happy New Year:' , friend) - friends의 리스트에서 그 다음에 놓인 하나의 문자열(여기서는
Sally)을 가져와서 이를 friend에 넣고 다음 문장을 실행한다.
print('Happy New Year:' , friend) - friends의 리스트에서 더 이상의 문자열이 없으므로 다음 문장을 건너뛴다.
print('Happy New Year:' , friend)
결국 for는 반복에 관한 실행문으로, 위에서는 friends에서 데이터를 하나씩 가져와 이를 friend에 보관 후, 다음에 주어진 처리를 하는 반복문이다.
[6] 루프 패턴 - 개수와 합계
다음의 리스트에 대한 개수와 합계를 구해보자.
[3, 41, 12, 9, 74, 15]
개수
count = 0
for k in [3, 41, 12, 9, 74, 15]:
count = count + 1
print(count)6
모든 자료를 끄집어내 k에 대입하여 다음에 주어진 명령문들을 실행하며, 자료가 더 이상 없게 되면 for문을 벗어난다. 이를 이용하여 자료를 끄집어낼 때마다, count의 값을 하나씩 증가시키면 자료의 개수를 셀 수 있다. 단, 초깃값은 0으로 놓아야만 한다.
합계
total = 0
for k in [3, 41, 12, 9, 74, 15]:
total = total + k
print(total)154
모든 자료를 불러낼 때마다, total에 누적시킨다. 단, 초깃값은 0으로 놓아야만 한다.
len()과 sum()
리스트의 개수와 합계를 구할 때는 대개 내장함수 len()과 sum()을 사용한다.
l = [3,41,12,9,74,15]
print(len(l))
print(sum(l))6
154
[7] 루프 패턴 - 최댓값과 최솟값
최댓값
largest = 0
for k in [3, 41, 12, 9, 74, 15]:
if k > largest:
largest = k
print('최댓값: ', largest)최댓값: 74
리스트 내에서 최댓값을 찾아내는 방법은 다음과 같다.
- 리스트 중에서 가장 작은 값을 예상하여 초깃값으로 선정하고 이 값을 최댓값으로 설정한다.
- 리스트에서 값 하나를 불러온다. 이 값이 현재의 최댓값보다 크면 그 값을 최댓값으로 설정하고, 그렇지 않으면 다음으로 넘어간다.
- 위 2를 더 이상 자료가 없을 때까지 반복한다.
최솟값
smallest = 10000
for k in [3, 41, 12, 9, 74, 15]:
if k < smallest:
smallest = k
print('최솟값: ', smallest)최솟값: 3
리스트 내에서 최솟값을 찾아내는 방법은 다음과 같다.
- 최솟값의 초깃값은 리스트에 나열된 값들 중, 가장 크다고 생각되는 값을 선정한다.
- 그리고 하나하나의 자료를 리스트에서 가져올 때마다 최솟값보다 작다면, 그 값이 최솟값이라 간주하고 설정한다.
- 자료의 끝까지 모든 과정이 이루어지면, 최솟값을 출력한다.
max()과 min()
항목 수와 합계에 대한 내장 함수가 제공되는 것처럼, 최댓값과 최솟값을 구하는 max(), min() 함수가 제공된다.
l = [3, 41, 12, 9, 74, 15]
print('최댓값: ', max(l))
print('최솟값: ', min(l))최댓값: 74
최솟값: 3댓글
댓글을 불러오는 중...