Understanding Loops in Python

Contents
1️⃣ 반복문의 필요성 (Why do we need loops?)
2️⃣ While문 (While loop)
3️⃣ For문 (For loop)
1️⃣반복문의 필요성
(Why do we need loops?)
반복문은 동일한 작업을 여러 번 반복해야 할 때 매우 유용하다. 예를 들어, 학생들의 성적을 처리하는 경우, 각 학생의 성적을 각각 계산하는 대신, 반복문을 사용하면 모든 학생의 성적을 효율적으로 처리할 수 있다.
시간 절약: 반복문을 사용하면 같은 코드를 여러 번 작성할 필요 없이 한 번만 작성하고 여러 번 실행할 수 있다. 이는 코드의 길이를 줄이고, 가독성을 높이며, 유지보수를 쉽게 만든다.
자동화: 반복문은 반복적인 작업을 자동화할 수 있다. 예를 들어, 학생들의 성적을 처리할 때, 각각의 성적을 수동으로 계산하는 대신, 반복문을 사용하여 모든 학생의 성적을 자동으로 계산할 수 있다.
오류 감소: 수동으로 반복 작업을 수행하면 실수할 가능성이 높아진다. 반복문을 사용하면 이런 실수를 줄일 수 있다.
예제: 학생들의 성적을 아래의 예제처럼 배열로 저장하고, 각 학생의 성적을 처리하게 된다.
# 학생들의 성적 리스트 (각 학생의 성적)
students_scores = [
[25, 90, 20, 90], # 1번 학생
[85, 70, 80, 90], # 2번 학생
[75, 80, 85, 60], # 3번 학생
[90, 95, 85, 100] # 4번 학생
]
2️⃣ While문 (While loop)
while 조건문: 문법을 사용하여 반복문을 사용한다.
for 변수 in 리스트(또는 튜플, 문자열): 문법을 사용하여 반복문을 사용한다.
리스트안에 for문을 포함하여 리스트 내포를 사용할 수 있다.
while 문의 기본 구조 (Basic structure of while loop)
while 조건문:
수행할 문장1
수행할 문장2
...
while문은 조건문이 참(True)인 동안 계속해서while문 아래에 있는 문장들을 반복해서 수행한다.조건문이 거짓(
False)이 되면while문을 종료하고 다음 코드로 넘어간다.

while 문의 활용 (Practice while loop)
treeHit = 0 # 나무를 찍은 횟수를 저장하는 변수
while treeHit < 10: # treeHit이 10보다 작은 동안 반복되게 된다.
treeHit += 1 # 나무를 한 번 찍음 (treeHit를 1 증가시킴)
print("나무를 %d번 찍었습니다." % treeHit) # 현재 나무를 찍은 횟수 출력
if treeHit == 10: # treeHit이 10이 되면
print("나무가 넘어갔습니다.") # 나무가 넘어갔음을 출력
treeHit변수를 0으로 초기화한다.
while문은treeHit이 10보다 작은 동안 반복한다.루프 내부에서
treeHit을 1씩 증가시킨다.
treeHit의 현재 값을 출력한다.
treeHit이 10이 되면 "나무가 넘어갔습니다."를 출력하고 루프를 종료한다.
이 코드 예제를 실행하면 다음과 같은 출력이 나오게 된다. 이와 같이 while 문을 사용하여 조건이 만족되는 동안 특정 동작을 반복 수행할 수 있다.
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무가 넘어갔습니다.


Break 문 (Break in loop) ✅ 강제로 while 문을 빠져나가야 할 때 사용한다.
break 문을 사용하여 무한 루프를 종료하는 예제를 보자. 아래는 자판기에 커피가 10개 있고, 커피를 뽑을 때마다 커피의 개수가 하나씩 줄어드는 상황을 시뮬레이션한 코드이다. 이때 money가 300원으로 고정되어 있어 while 문의 조건이 항상 참이다. break 문을 사용하여 커피가 다 떨어지면 루프를 종료한다.
coffee = 10 # 자판기에 있는 커피의 개수
money = 300 # 커피를 뽑을 수 있는 돈
while money: # money가 300으로 고정이 되어 있다면 항상 참이게 되므로 무한 루프이다.
print("돈을 받았으니 커피를 뽑습니다.")
coffee -= 1 # 커피의 개수를 하나 줄입니다.
print("남은 커피의 개수는 %d개입니다" % coffee)
if coffee == 0: # 커피가 다 떨어졌을 때
print("커피가 다 떨어졌습니다. 자판기를 종료합니다.")
break # 무한 루프를 종료합니다.
coffee변수를 10으로 초기화합니다.
money변수는 300으로 고정되어 있습니다.
while money가 무한 루프를 만들게 된다. (money가 300으로 고정되어 있음)루프 내부에서 "커피를 뽑았습니다."를 출력하고
coffee변수를 1 감소시킨다.남은 커피의 개수를 출력한다.
coffee가 0이 되면 "커피가 다 떨어졌습니다. 자판기를 종료합니다."를 출력하고break문을 사용하여 루프를 종료한다.
% coffee는 문자열 포맷팅(string formatting)에서 사용되는 부분이다.% coffee는 문자열 내에 포맷 지정자%d와 함께 사용되어,%d자리에 변수coffee의 값을 대입하여 문자열을 형식화한다. 여기서%d는 정수를 나타내며,% coffee는 변수coffee의 현재 값으로 대체된다. 이 포맷팅 기법을 통해 변수의 값을 문자열 내에 삽입하거나 출력할 때 사용한다.
이 코드 예제를 실행하면 다음과 같은 출력이 나온다. 이와 같이 break 문을 사용하여 특정 조건을 만족할 때 while 문을 강제로 종료할 수 있다.
커피를 뽑았습니다.
남은 커피의 개수: 9개
커피를 뽑았습니다.
남은 커피의 개수: 8개
...
커피를 뽑았습니다.
남은 커피의 개수: 1개
커피를 뽑았습니다.
남은 커피의 개수: 0개
커피가 다 떨어졌습니다. 자판기를 종료합니다.
continue 문 (continue in loop) ✅ while문을 빠져나가지 않고 while 문의 맨 처음(조건문)으로 다시 돌아가야 할 때 사용한다.
continue 문을 사용하여 while 문의 특정 조건에서 현재 반복을 건너뛰고 처음으로 돌아가는 예제를 확인해보자. 이 예제에서는 1부터 10까지의 숫자 중 홀수만 출력하도록 한다.
a = 1 # 초기값 설정
while a < 10: # a가 10보다 작은 동안 반복
a += 1 # a를 1 증가시킴
if a % 2 == 0: # a를 2로 나눈 나머지가 0이면 (짝수이면)
continue # while 문의 처음으로 돌아감 (아래 코드 실행 안 됨)
print(a) # a가 홀수일 때만 출력됨
a변수를 1로 초기화한다.
while문은a가 10보다 작은 동안 반복한다.루프 내부에서
if a % 2 == 0조건문을 통해a가 짝수인지를 확인한다.
a가 짝수이면a += 1로a를 1 증가시키고continue문을 실행하여while문의 처음으로 돌아간다. 이 경우,print(a)문은 실행되지 않는다.
a가 홀수이면print(a)로a를 출력한다.
a가 10이 되면 루프가 종료된다.
코드 예제를 실행하면 다음과 같은 출력이 나온다. 이와 같이 continue 문을 사용하여 특정 조건에서 현재 반복을 건너뛰고 while 문의 처음으로 돌아갈 수 있다.
1
3
5
7
9
3️⃣ for 문 (for loop)
for 문의 기본 구조 (Basic structure of while loop)
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
test_list = ['one', 'two', 'three']
for i in test_list: # test_list 리스트의 각 요소를 순서대로 i에 대입
print(i) # i 출력
for문은 리스트, 튜플, 문자열 등의 첫 번째 요소부터 마지막 요소까지 차례대로 변수(i)에 대입하여for문의 블록을 수행한다.각 반복에서 변수는 순서대로 다음 요소를 가리킨다.
변수(i)의 데이터타입은 문자열(string)이다.
range 함수 사용법 (range function in for loop) range()는 숫자 리스트를 자동으로 만들어주는 함수이다. 이 함수는 반복문과 함께 자주 사용된다.
리스트 [ 1, 2, 3, 4 ... 100 ]을 일일히 손으로 작성한다고하면 번거롭고 시간이 오래걸리기 마련이다. 이럴때 range()가 사용된다.
✅ range(stop)
for i in range(10):
print(i)
range(stop)은 0부터 10 미만의 숫자를 포함하는range객체를 만들어 준다.즉,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9를 생성한다. (10은 불포함)
✅ range(start, stop)
for i in range(0,10):
print(i)
range(a, b)는a부터b미만의 숫자를 포함하는range객체를 만들어 준다.예를 들어,
range(1, 11)은1, 2, 3, 4, 5, 6, 7, 8, 9, 10을 생성한다.
range 함수를 이용한 for 문 예제 (Example of for loop with range function)
for 문을 사용하여 구구단을 만드는 예제를 연습하자. 아래 코드는 2부터 9까지의 숫자에 대해 각각의 곱셈 결과를 출력한다.
# 구구단 만들기
for i in range(2, 10): # 2부터 9까지의 숫자가 차례로 i에 대입됨 (1번 for 문)
for j in range(1, 10): # 1부터 9까지의 숫자가 차례로 j에 대입됨 (2번 for 문)
print(i*j, end ="") # i와 j의 곱셈 결과를 출력
print('') # 각 단이 끝날 때마다 빈 줄을 출력하여 구분
첫 번째
for문에서i는 2부터 9까지의 숫자를 차례로 가진다. (짝수)두 번째
for문에서j는 1부터 9까지의 숫자를 차례로 가진다. (홀수)내부의
print(i*j, end ="")문장은i와j의 곱셈 결과를 출력한다.각 단이 끝날 때마다 빈 줄을 출력하여 단을 구분한다.
이 코드를 실행하면 다음과 같은 출력이 나온다. 이와 같이 for 문을 중첩하여 구구단을 만들 수 있다. range 함수를 사용하여 반복할 범위를 지정하고, 각 범위 내의 숫자를 곱하여 출력하면 된다.


리스트 내포 사용법 (How to use list comprehension) 리스트를 더 간결하고 직관적으로 만들 수 있는 방법이다.
리스트 안에 for 문 포함하기
for문 2개 이상 사용 가능
구구단의 모든 결과를 리스트로 담는 리스트 내포 예제
✅ 리스트 안에 for 문 포함하기
예제1) a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담기
a = [1, 2, 3, 4]
result = []
for num in a:
result.append(num * 3)
print(result) # [3, 6, 9, 12]
예제2) 예제 1을 리스트 내포를 사용하도록 수정 (예제1과 동일한 결과를 얻는다)
a = [1, 2, 3, 4]
result = [num * 3 for num in a] #표현식 num *3 뒤에 for 변수 in 반복개체
print(result) # [3, 6, 9, 12]
예제3) 리스트 내포 안에 'if 조건' 사용
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0] # 표현식, for 문 변수 in 반복 개체, if 조건
print(result) # [6, 12]
예제 1:
- 일반적인
for문을 사용하여 리스트a의 각 항목에 3을 곱한 결과를result리스트에 추가한다.예제 2:
리스트 내포를 사용하여 예제 1을 간결하게 표현한다.
[num * 3 for num in a]는a리스트의 각 요소num에 대해num * 3을 계산하여result리스트에 추가한다.예제 3:
리스트 내포 안에
if조건을 사용하여 조건에 맞는 항목만 처리한다.
[num * 3 for x in a if num % 2 == 0]는a리스트의 각 요소num에 대해num % 2 == 0인 경우에만num * 3을 계산하여result리스트에 추가한다.여기서
num % 2 == 0조건은num이 짝수인지를 확인한다.리스트 내포를 사용하면 코드가 더 간결하고 읽기 쉬워진다. 이를 활용하여 다양한 리스트 변환 작업을 효율적으로 처리할 수 있다.
✅ for문 2개 이상 사용 가능
[표현식 for 항목 in 반복 가능 객체 if 조건1
for 항목 in 반복 가능 객체 if 조건2
for 항목 in 반복 가능 객체 if 조건n]
여기서
표현식은 각 항목에 적용되는 표현식이고,항목은 반복 가능 객체에서 가져오는 값이다.if 조건은 선택 사항이다.이 방법은 가독성이 떨어질수 있으므로 잘 사용하지 않지만 프로그래머로써 알아야할 문법이라고 교수님께서 말씀하셨다.
✅ 구구단의 모든 결과를 리스트로 담는 리스트 내포 예제
result = [x*y for x in range(2,10)
for y in range(1,10)]
print(result)
for x in range(2, 10): 2부터 9까지의 숫자 범위에서x를 반복. 즉, 3단부터 9단까지 반복된다.
for y in range(1, 10): 1부터 9까지의 숫자 범위에서y를 반복. 이는 각 단의 곱셈 결과를 반복한다.
x*y: 각 반복마다x * y의 튜플을 생성하여 리스트에 추가한다.아래와 같은 결과가 나온다.
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
Quiz




