c.horokhoroklog

Python 시리즈 8

순서제목작성일조회댓글
8[Python] #8 함수2026. 6. 23. (화)170
7[Python] #7 문자열2026. 6. 19. (금)560
6[Python] #6 리스트2026. 6. 19. (금)650
5[Python] #5 반복문2026. 6. 18. (목)950
4[Python] #4 조건문2026. 6. 18. (목)1090
1 / 2

[Python] #5 반복문

그린 프로필그린||00:31:33|조회 95|댓글 0|반응 0
#python#코드트리#trail0

thumbnail_python5.png

참고: codetree Trail 0의 Chapter 4, 8~9

1. 반복문

for i in range(반복횟수):    # 변수가 따로 필요 없으면 i는 _로 대체 가능
    실행할 코드

반복 작업을 효율적으로 처리하는 구문

1-1. for

1-1-1. range()

지정된 범위의 수를 생성하는 함수

  • 반복 횟수가 명확할 때 사용

(1) 인자가

  • range(stop)
  • 0부터 시작해서 stop(끝값) - 1(인자로 전달된 값)까지 값에 대한 반복
  • stop 값은 포함 X

(2) 인자가

  • range(start, stop)
  • start(시작값)부터 시작해서 stop - 1 값까지에 대한 반복
  • start의 기본값은 0
for i in range(2, 6):
    print(i)
# 2
# 3
# 4
# 5

(3) 인자가

  • range(start, stop, step)
  • start부터 stop을 지나치기 전까지 step(증가값)만큼 더해 반복
  • 수 간의 간격인 step의 기본값은 1
# 예제1 (`양수` step)
for i in range(1, 10, 2):
    print(i)
# 1
# 3
# 5
# 7
# 9

# 예제2 (`음수` step, B부터 A까지 1씩 감소하는 모든 값 출력)
A, B = map(int, input().split())    # 2 5
for i in range(B, A - 1, -1):
    print(i, end=' ')
# 5 4 3 2

1-2. while

while 조건:
    실행할 코드

주어진 조건이 참인 동안 계속 코드를 실행하는 반복문

# 예시1 (1부터 시작해 값을 2배씩 증가시키면서 x보다 작을 때까지 반복)
x = 100
num = 1

while num < x:    # num이 x보다 작으면 계속 실행 (num이 x 이상이 되는 순간 반복 멈춤)
    print("현재 값:", num)
    num *= 2    # 반복이 진행될수록 num 값은 2배씩 증가

# 예시2
n = 10
while n > 2:
    n -= 2
print(n)    # 2
  • 몇 번 반복할지 중요하지 않고, 조건을 만족(참)하는 동안 계속 반복 진행 (<-> if 문은 조건이 참일 때 코드 한 번 실행)
  • 반복 횟수가 명확하지 않을 때, 조건이 언제 거짓이 될지 모르거나 참인 조건이 유지되는 시점까지 계속 반복해야 할 경우 사용 (≈if 문의 반복 실행)
  • 반복 조건이 언젠가 거짓이 되도록 로직을 설계해야 무한 반복을 방지 가능

1-2-1. 무한 루프

조건이 항상 참이라 종료되지 않는 루프

  • 사용자가 프로그램을 강제로 종료하지 않는 이상 계속 출력
while True:
    print("무한 루프")
# 무한 루프
# 무한 루프
...
...
while n != 1:    # n이 1이 될 때까지 반복
...

1-2-2. 무한 루프 탈출법

(1) break

반복문을 즉시 종료시키는 제어문

  • 특정 조건을 만족하면 반복문 전체를 중단
# 예시 1
while True:
    user_input = input("종료하려면 'exit'를 입력하세요: ")
    if user_input == "exit":
        break
    print("입력한 값:", user_input)    # 사용자가 'exit' 입력하면 루프 종료하고, 그렇지 않으면 입력한 값 출력
# 예시2 (num이 3인 경우, 반복문 종료)
for num in range(1, 6):
    print(f"{num}번째 반복문 시작")
    if num == 3:    # num이 3이 되는 순간
        break    # 반복문 종료
    print(num)
# 출력:
# 1번째 반복문 시작
# 1
# 2번째 반복문 시작
# 2
# 3번째 반복문 시작

(2) 조건 활용

  • while 문의 반복 조건 설정으로 break 문 없이 반복을 종료
  • 특정 조건이 만족될 때까지만 반복 계속 (유동적인 반복 횟수 설정)
num = -1
while num <= 0:
    num = int(input("양수를 입력하세요: "))    # 양수를 입력하면 루프 종료하고, 맨 마지막 출력문 실행
    if num <= 0:
        print("양수가 아닙니다. 다시 시도하세요.")
print("입력한 양수:", num)

(3) 사용자 입력

  • 사용자 입력에 따라 반복을 계속하거나 종료
correct_password = "python123"
attempts = 0
max_attempts = 3

while attempts < max_attempts:
    password = input("비밀번호를 입력하세요: ")
    if password == correct_password:
        print("로그인 성공!")
        break
    else:
        attempts += 1
        print(f"비밀번호가 틀렸습니다. {max_attempts - attempts}회 남았습니다.")
else:
    print("로그인 시도 횟수를 초과했습니다.")

1-3. 반복문 흐름 제어

1-3-1. continue

현재 반복을 건너뛰고 다음 반복으로 넘어가게 하는 제어문

# 예시1 (num이 짝수인 경우만 반복을 넘길 때)
for num in range(1, 6):
    print(f"{num}번째 반복문 시작")
    if num % 2 == 0:
        continue
    print(num)
# 출력:
# 1번째 반복문 시작
# 1
# 2번째 반복문 시작
# 3번째 반복문 시작
# 3
# 4번째 반복문 시작
# 5번째 반복문 시작
# 5
# 예시2 (num이 음수나 0이면 건너뛰고, 양수일 때만 출력)
numbers = [10, -5, 7, -3, 0, 12, -1]

print("양수 목록:")
for num in numbers:
    if num <= 0:
        continue
    print(num)
# 출력:
# 양수 목록:
# 10
# 7
# 12

1-4. 이중 for문

하나의 for 문 안에 또 다른 for 문을 중첩하는 반복문

for i in range(반복횟수 1):
    for j in range(반복횟수 2):
        # 반복되는 코드
  • 2차원 구조나 반복이 필요한 복잡한 패턴 쉽게 처리 가능
# 예시 1
for i in range(100):          # 아래 반복문을 100번 반복
    for j in range(1, 101):   # 1부터 100까지 반복
        print(j, end=" ")
    print()    # 한 줄 출력 후 줄바꿈

1-4-1. 외부에 변수

  • 변수 선언: 외부 for문 외부
  • 변수 초기화: 반복문 시작 전 딱 한 번
  • 변수 누적: 모든 반복 과정 / 이중 for 문 전체에서 유지 / 전체 반복을 통틀어 누적
total_cnt = 0  # 외부 for문 전에 변수 선언

for i in range(3):        # 외부 반복문
    for j in range(5):    # 내부 for문
        total_cnt += 1

print(f"전체 반복 횟수: {total_cnt}")    # 15 (외부 3번 실행 x 내부 5번 실행 = 15번 반복)

1-4-2. 내부에 변수

  • 변수 선언: 외부 for문 내부
  • 변수 초기화: 외부 for 문이 반복될 때마다 / 내부 for 문이 한 번 돌 때마다 새로 생성
  • 변수 누적: 각 외부 for 문마다 (반복이 시작될 때마다) 독립적으로 계산(초기화)
  • 각 외부 for 문에서 내부 for 문이 몇 번 반복했는지 개별 기록 가능
  • 루프별 합계
for i in range(3):        # 외부 반복문
    cnt = 0               # 외부 반복문이 돌 때마다 cnt를 0으로 초기화 (내부 변수 선언)
    for j in range(5):    # 내부 반복문
        cnt += 1
    print(f"{i}번째 외부 for문에서의 내부 for문 반복 횟수: {cnt}")    # 5 (각 (외부 for 문이 시작될 때)마다 0으로 초기화되고, 내부 for 문이 5번 실행될 때마다 5로 증가(계산됨))

1-4-3. 별표 패턴 출력

  • 세로로 3칸, 가로로 6칸 모양의 별표 패턴 출력하기
  • 외부 반복문은 총 6번 실행되고, 한 번 실행될 때마다 내부 반복문이 3번 실행됨

(1) 내부 반복문

  • 열(column) 제어

이미지을 불러올 수 없습니다.

for j in range(cols):
    print('*', end=" ")

(2) 외부 반복문

  • 내부 for 문의 반복 작업 제어
  • 행(row) 제어

이미지을 불러올 수 없습니다.

# 예시 1 (내부 반복문에서의 continue)
for i in range(rows):
    (내부 반복문)
    print()

1-4-4. 2차원(이중) for 문에서의 흐름 제어

(1) continue

현재 반복(실행중인 반복문에서의 이번 반복)만 건너뛰고, 다음 나머지 반복을 계속 진행하도록 하는 제어문

  • 이중 for문에서는, continue가 속해 있는 가장 안쪽 for 문의 반복만 건너뛰고, 외부 반복문은 계속 진행됨
for i in range(1, 4):            # 외부 반복문 (i는 1부터 3까지)
    for j in range(1, 6):        # 내부 반복문 (j는 1부터 5까지)
        if j == 3:
            continue             # j가 3일 때, 내부 for문의 이번 반복만 건너뜀
        print(f"i={i}, j={j}")    # j가 3일 때만 건너뛰어 print를 실행하지 않음

# 출력
"""
i=1, j=1
i=1, j=2
i=1, j=4
i=1, j=5
i=2, j=1
i=2, j=2
i=2, j=4
i=2, j=5
i=3, j=1
i=3, j=2
i=3, j=4
i=3, j=5
"""
# 예시 2 (외부 반복문에서의 continue)
for i in range(1, 4):            # 외부 반복문 (i는 1부터 3까지)
    if i == 2:
        continue                 # i가 2일 때, 외부 for문의 이번 반복만 건너뜀
    for j in range(1, 6):        # 내부 반복문 (j는 1부터 5까지)
        print(f"i={i}, j={j}")

# 출력
"""
i=1, j=1
i=1, j=2
i=1, j=3
i=1, j=4
i=1, j=5 
i=3, j=1    # i == 2일 때만 건너뛰어 출력 X
i=3, j=2
i=3, j=3
i=3, j=4
i=3, j=5
"""

(2) break 문

해당 반복문(내부 or 외부) 전체를 즉시 종료하는 제어문

  • 이중 for 문에서는 break가 속해 있는 가장 안쪽 for 문을 즉시 종료하고 바깥쪽으로 빠져나감
    • 내부 반복문에서 break를 만나면 내부 반복문만 종료하고 외부 반복문은 계속 진행
    • 외부 반복문에서 특정 조건을 만족했을 때, break 사용하면 그 시점에 전체 이중 반복문 종료
# 예시 1 ( 내부 반복문에서의 break)
for i in range(1, 4):        # 외부 반복문 (i는 1부터 3까지)
    for j in range(1, 6):    # 내부 반복문 (j는 1부터 5까지)
        if j == 3:
            break            # j가 3이 되는 순간, 내부 반복문 자체를 완전히 종료
        print(f"i={i}, j={j}")

# 출력
"""
i=1, j=1
i=1, j=2
i=2, j=1
i=2, j=2
i=3, j=1    # 외부 반복문은 i=2, i=3 일때 계속 진행 (내부 반복문은 매번 처음부터 다시 시작)
i=3, j=2
"""
# 예시 2 (외부 반복문에서의 break)
for i in range(1, 4):
    print(f"[외부 반복문 시작] i={i}")
    if i == 2:
        break    # 외부 반복문에서 i가 2가 되는 순간, 곧바로 전체 반복 종료 (i=1 일 때의 내부 반복문만 실행)
    for j in range(1, 6):
        print(f"   i={i}, j={j}")

# 출력
"""
[외부 반복문 시작] i=1
   i=1, j=1
   i=1, j=2
   i=1, j=3
   i=1, j=4
   i=1, j=5
[외부 반복문 시작] i=2
"""

1-4-5. 가운데 정렬된 삼각형

n = 5

for i in range(1, n + 1):
    # 공백 출력
    for j in range(n - i):
        print(" ", end=" ")    # 첫 줄은 8개의 공백(공백 2개씩 4번)과 1개의 별 출력, 두 번째 줄은 6개의 공백(공백 2개씩 3번)과 3개의 별 출력,..
    # 별 출력
    for j in range(2 * i - 1):
        print("*", end=" ")
    print()
"""
        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * * 
"""

1-4-6. 세로로 정렬된 구구단 출력

for i in range(2, 10):
    for j in range(1, 10):
        print(f"{i} x {j} = {i*j}")
    print("-" * 20)

"""
2 x 1 = 2
2 x 2 = 4
...
2 x 9 = 18
--------------------
...
9 x 9 = 81
--------------------
"""

1-4-7. 정상적인 구구단

(1) 문제: 정수 N의 값이 주어지면 N x N 모양 구구단 출력 (2) 입력: 첫 번째 줄에 N 주어짐 (3) 출력: N의 값에 따른 구구단을 입출력 예제처럼 출력 (4) 예제

# 입력
3

# 출력
1 * 1 = 1, 1 * 2 = 2, 1 * 3 = 3
2 * 1 = 2, 2 * 2 = 4, 2 * 3 = 6
3 * 1 = 3, 3 * 2 = 6, 3 * 3 = 9

(5) 풀이:

# 풀이1
N = int(input())

for i in range(1, N + 1):
    for j in range(1, N + 1):
        print(f"{i} * {j} = {i * j}", end="")
        
        if j != N:    # 마지막이 아닐 때만 콤마+공백 출력
            print(", ", end="")

    print()
# 풀이2
n=int(input())
for i in range(1,n+1):
    for j in range(1,n+1):
        if j < n:
            print(f"{i} * {j} = {i*j}",end=", ")
        else:
            print(f"{i} * {j} = {i*j}",end="")
    print()

1-5. 퀴즈

1-5-1. 짝수만 거꾸로 출력하기

(1) 문제: N개의 정수가 주어질 때, 입력에서 주어진 순서의 역순으로 짝수만 출력 (2) 입력: 첫 줄에 정수 N, 그 다음 줄에 N개의 정수가 차례대로 공백으로 구분되어 주어짐 (3) 출력: 첫 줄에 N개의 정수 중 짝수만, 주어진 순서의 역순으로 출력 (4) 예제

# 입력
6
3 1 4 5 6 2

# 출력
2 6 4

(5) 풀이

# 풀이1
N = int(input())

nums = list(map(int, input().split()))    # map 함수로 감싸면 리스트가 아닌 map 객체가 됨

for num in nums[::-1]:    # map 객체는 슬라이싱 불가
    if num % 2 == 0:
        print(num, end=" ")

# 풀이2
N = int(input())

nums = list(map(int, input().split()))

for num in reversed(nums):
    if num % 2 == 0:
        print(num, end=" ")

1-5-2. 친근하지 않은 수

(1) 문제: 1이상 N 이하의 정수 중 친근하지 않은 수의 개수를 출력, 이때 친근한 수는 2, 3 또는 5로 나누어 떨어지는 수이다. (2) 입력: 첫 번째 줄에 정수 N이 주어짐 (3) 출력: 첫 번째 줄에 1이상 N 이하의 수 중 친근하지 않은 수 개수 출력 (4) 예제:

# 입력
10

# 출력
2

(5) 풀이

# 풀이1
N = int(input())

cnt = 0

for i in range(1, N + 1):
    if i % 2 and i % 3 and i % 5:
        cnt += 1

print(cnt)

# 풀이2
N = int(input())

cnt = 0

for i in range(1, N + 1):
    if i % 2 == 0 or i % 3 == 0 or i % 5 == 0:
        continue
    cnt += 1

print(cnt)

1-5-3. 배수의 개수

(1) 문제: 10개의 수가 주어질 때, 3의 배수의 개수와 5의 배수의 개수 출력 (2) 입력: 입력으로 10개의 수가 한 줄에 하나씩 주어짐 (3) 출력: 첫 번째 줄에 3과 5의 배수의 개수를 공백을 사이에 두고 출력 (4) 예제:

# 입력
7
42
10
54
34
55
57
60
30
50

# 출력
5 5

(5) 풀이:

# 예시1
cnt_3 = cnt_5 = 0

for _ in range(10):
    n = int(input())

    if n % 3 == 0:
        cnt_3 += 1

    if n % 5 == 0:
        cnt_5 += 1

print(cnt_3, cnt_5)
# 잘못된 예시1
cnt_3 = cnt_5 = 0

for _ in range(10):
    n = int(input())

    if n % 3 == 0:
        cnt_3 += 1

    elif n % 5 == 0:    # 바로 위의 if문이 참이면 elif 문은 실행 하지 않음
        cnt_5 += 1

print(cnt_3, cnt_5)
# 잘못된 예시2
cnt_3 = cnt_5 = 0

nums = map(int, input())    # 수를 한줄로 1개만 받음

for num in nums:
    if num % 3 == 0:
        cnt_3 += 1
    elif num % 5 == 0:
        cnt_5 += 1

print(cnt_3, cnt_5)

1-5-4. 0 나올때까지 출력

(1) 문제: 정수를 계속 입력받다가 0이 입력되기 전까지의 결과를 그대로 출력 (2) 입력: 입력으로 몇 개의 줄이 들어올지는 정해져 있지는 않으며, 각 줄에는 하나의 정수가 주어진다. (그 중 적어도 하나는 0임을 가정해도 좋음) (3) 출력: 0이 주어지기 전까지의 결과를 한 줄에 하나씩 순서대로 출력 (4) 예제:

# 입력
3
5
0

# 출력
3
5

(5) 풀이:

while True:    # 언제 끝날지 모르므로 계속 반복
    n = int(input())    # 변수 선언 (반복문 밖에 -1보다 효율적)

    if n == 0:
        break

    print(n)    # n이 0이 아닌 경우에 계속 값 출력

1-5-5. A 부터 B 까지

(1) 문제: 정수 A부터 B까지의 수를 출력하기. A에서 시작하여 조건에 맞춰 수를 변경하다 B보다 커지는 순간에 종료해야 하며, 수가 바뀌는 조건은 다음과 같다.

  • 수가 홀수일 땐 2배가 된다.
  • 수가 짝수일 땐 3만큼 증가 (2) 입력: 첫 번째 줄에 정수 A, B가 공백을 사이에 두고 주어짐 (3) 출력: 첫 번재 줄에 수들을 공백을 사이에 두고 출력한다. A에서 시작하여 순서로 출력하되, B를 넘기 전까지만 출력 (4) 예제
# 입력
2 13

# 출력
2 5 10 13

(5) 풀이:

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

while True:
    print(A, end=" ")

    if A % 2:
        A *= 2
    else:
        A += 3

    if A > B:
        break

[코드트리 추천 링크] https://www.codetree.ai/ko/trail-info?referralCode=th2gr22n

댓글 0

로그인 필요 프로필로그인 필요

아직 댓글이 없습니다.