누구나 로고
オンライン講座企業・団体研修ライブラリトレンドインサイト無料コースお知らせお問い合わせ採用サイト
모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.
로그인무료 회원가입
강좌파이썬 기초 40강 — 처음 배우는 프로그래밍13강

13강 / 전체 14강

while 루프 — 반복의 본질과 루프 설계

7분 읽기 조회 0

while 루프의 정확한 실행 모델을 이해하고 올바른 루프 설계와 탈출 전략을 배운다.

🎯 이 강의에서 배우는 것

while 루프는 파이썬에서 가장 기본적인 반복 구조입니다. 단순해 보이지만, 올바른 루프를 설계하는 것은 논리적 사고를 필요로 합니다. 이 강의에서는 while 루프의 정확한 실행 모델을 이해하고, 루프 불변식(loop invariant)이라는 강력한 설계 도구를 배웁니다.

🔁 while 루프의 정확한 실행 모델

count = 0
while count < 5:      # 1단계: 조건 평가
    print(count)       # 2단계: True면 본문 실행
    count += 1         # 3단계: 다시 1단계로
# 4단계: False면 루프 종료

# 조건이 처음부터 False: 본문 한 번도 실행 안 됨
x = 10
while x < 5:
    print("실행됨")  # 절대 출력 안 됨
print("루프 건너뜀")   # 바로 실행

# 반복 횟수 카운팅
count = 0
n = 100
while n > 1:
    n //= 2     # n을 2로 나눔
    count += 1
print(f"100을 2로 {count}번 나누면 1 이하가 됨")  # 약 7번

📐 루프 불변식 (Loop Invariant)

루프 불변식이란 루프의 각 반복 시작 시 항상 참이어야 하는 조건입니다:

# 1부터 N까지의 합 — 루프 불변식 분석
n = 10
total = 0
i = 1
# 불변식: "루프 시작 시 total = 1 + 2 + ... + (i-1)"

while i <= n:
    # 이 시점: 불변식 성립 — total = sum(1..i-1)
    total += i   # total = sum(1..i)
    i += 1       # i 증가
    # 이 시점: total = sum(1..i-1) (새 i 기준) → 불변식 유지

# 루프 종료 조건: i > n → i == n+1
# 따라서 total = sum(1..n) = n*(n+1)/2 = 55
print(total)   # 55

# 이진 탐색 — 루프 불변식 활용
def binary_search(lst, target):
    low, high = 0, len(lst) - 1
    # 불변식: target이 있다면 lst[low..high] 안에 있다

    while low <= high:
        mid = (low + high) // 2   # 정수 오버플로우 없음 (파이썬 임의 정밀도)
        if lst[mid] == target:
            return mid
        elif lst[mid] < target:
            low = mid + 1    # 왼쪽 절반 제외 → 불변식 유지
        else:
            high = mid - 1   # 오른쪽 절반 제외 → 불변식 유지
    return -1

nums = [1, 3, 5, 7, 9, 11, 13, 15]
print(binary_search(nums, 7))   # 3
print(binary_search(nums, 6))   # -1

♾️ 무한 루프와 while True 패턴

# 유효 입력을 받을 때까지 반복
while True:
    user_input = input("양수를 입력하세요: ")
    try:
        n = int(user_input)
        if n > 0:
            break   # 유효한 입력 → 루프 탈출
        print("0보다 큰 수를 입력해야 합니다.")
    except ValueError:
        print("숫자가 아닙니다. 다시 입력해주세요.")
print(f"입력받은 양수: {n}")

# 게임 메인 루프 패턴
game_running = True
score = 0

while game_running:
    action = input("행동 (a=공격, d=방어, q=종료): ")
    if action == "q":
        game_running = False
    elif action == "a":
        score += 10
        print(f"공격! 점수: {score}")
    elif action == "d":
        print("방어 자세")

print(f"게임 종료. 최종 점수: {score}")

🧮 루프 상태 관리 패턴

# 카운터 패턴
primes = []
n = 2
while len(primes) < 10:    # 소수 10개 찾기
    is_prime = True
    for d in range(2, int(n**0.5) + 1):
        if n % d == 0:
            is_prime = False
            break
    if is_prime:
        primes.append(n)
    n += 1
print(primes)   # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

# 누산기 패턴
total = 0
count = 0
while True:
    val = input("숫자 입력 (엔터만 누르면 종료): ")
    if not val:
        break
    try:
        total += float(val)
        count += 1
    except ValueError:
        print("숫자가 아닙니다")
if count > 0:
    print(f"평균: {total / count:.2f}")

# 오프-바이-원 오류 예방
n = 5
# n번 반복하고 싶을 때
i = 0
while i < n:     # 0,1,2,3,4 → n번 실행 (권장: 0부터 시작)
    i += 1

i = 1
while i <= n:    # 1,2,3,4,5 → n번 실행 (1부터 시작할 때)
    i += 1

🔄 언제 while을 쓰는가 — for vs while

# for: 반복 횟수를 미리 알 때, 이터러블을 순회할 때
for i in range(10):       # 10번 반복
    print(i)

for item in my_list:      # 리스트 순회
    process(item)

# while: 반복 횟수를 미리 모를 때, 외부 상태 변화를 기다릴 때
import time
timeout = 10
start = time.time()
while time.time() - start < timeout:   # 타임아웃까지 대기
    if check_condition():
        break
    time.sleep(0.1)

# 콘텐츠 스트리밍
buffer = ""
while True:
    chunk = stream.read(1024)
    if not chunk:    # EOF
        break
    buffer += chunk

⚠️ 자주 하는 실수

  • 루프 변수를 수정 안 함: while i < 10:에서 본문에 i += 1이 없으면 무한 루프. 반드시 조건 변수를 수정하세요.
  • 오프-바이-원 오류: n번 반복을 원할 때 while i <= n(n+1번 실행될 수 있음)과 while i < n의 차이를 명확히 하세요.
  • 무한 루프를 의도했는데 탈출 조건 빠뜨림: while True에는 반드시 break 또는 return으로 탈출 경로를 명시하세요.

📝 정리 및 다음 강의 예고

  • while 루프: 조건 평가 → True면 실행 → 반복. False면 종료.
  • 루프 불변식: 각 반복에서 항상 참인 조건. 올바른 루프 설계의 논리적 기반.
  • while vs for: 반복 횟수를 모를 때는 while, 이터러블 순회는 for.

다음 강의: for 루프의 내부 동작인 이터레이터 프로토콜을 완전히 이해합니다. for x in lst가 내부에서 어떻게 작동하는지, enumerate와 zip의 원리를 배웁니다.

관련 주제

  • while 루프 실행모델
  • 루프 불변식
  • 무한루프와 break 탈출
  • 오프바이원 오류
  • 카운터·누산기 변수
  • for vs while 선택기준
  • 개발·프로그래밍
  • 개발·프로그래밍 강의
  • 파이썬 기초 40강 — 처음 배우는 프로그래밍
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나
이전 12강조건문 — 프로그램이 결정을 내리는 방법다음 14강 for 루프 — 이터레이션 프로토콜의 깊은 이해

댓글

0/1000

불러오는 중...

목차

  1. 1.컴퓨터는 어떻게 생각하는가 — 0과 1에서 프로그램까지
  2. 2.파이썬 생태계와 개발 환경 완전 설정
  3. 3.파이썬의 실행 모델 — 바이트코드, PVM, GIL
  4. 4.첫 프로그램 — print()와 input()으로 배우는 I/O 원리
  5. 5.변수란 무엇인가 — 이름표, 객체, 참조의 삼각관계
  6. 6.정수(int) 완전 해부 — 임의 정밀도, 비트 연산, 정수 연산의 함정
  7. 7.부동소수점(float)의 함정 — IEEE 754와 수치 오류의 진실
  8. 8.문자열(str) 완전 해부 — 유니코드, 불변성, 인코딩
  9. 9.불리언(bool)과 None — 진리값 시스템의 철학
  10. 10.연산자 완전 분석 — 우선순위, 결합성, 연산자 오버로딩 예고
  11. 11.f-string과 문자열 포맷팅 완전 정복
  12. 12.조건문 — 프로그램이 결정을 내리는 방법
  13. 13.while 루프 — 반복의 본질과 루프 설계
  14. 14.for 루프 — 이터레이션 프로토콜의 깊은 이해

カスタマーサポート

  • お知らせ
  • よくある質問
  • お問い合わせ
  • コミュニティ

ご利用案内

  • 利用規約
  • プライバシーポリシー
  • 返金ポリシー

サービス

  • 会社紹介
  • 新規登録
  • 新着コース
  • 無料コース
누구나 로고
利用規約プライバシーポリシー返金ポリシー

상호명: NUGUNA  |  대표자: 정우진  |  사업자등록번호: 392-32-01817  |  통신판매업신고: 제 2026-서울양천-0564 호

주소: 서울특별시 양천구 목동서로 100  |  이메일: nugunapass@gmail.com  |  전화: 010-6395-3043

© 2026 NUGUNA. All rights reserved.

KB예금주인증관리자
ホームコースライブラリお問い合わせMY