Python 2회차 : 조건문/반복문(if/for/while) + range + break/continue 완전 정복 (구구단·메뉴 프로그램 실습)
한눈에 보는 요약
조건문(if)은 “어떤 상황이면 이렇게 하자”를 코드로 표현하는 문법이고, 반복문(for/while)은 “같은 일을 여러 번 하자”를 표현하는 문법입니다. 두 문법은 초보자가 프로그램을 ‘진짜 프로그램답게’ 만들기 시작하는 핵심 구간입니다.
이번 글에서는 if/elif/else의 기본 구조, for와 while의 차이, range(범위) 사용법, break/continue로 흐름을 제어하는 법을 아주 쉬운 예제로 정리합니다. 특히 구구단과 간단 메뉴 선택 프로그램을 직접 만들면서 “왜 이런 문법이 필요한지”가 자연스럽게 이해되도록 구성했습니다.
실습은 Google Colab 기준으로 안내합니다. Colab은 설치 없이 브라우저에서 바로 실행할 수 있어 입문자가 연습하기에 가장 편합니다.
목차
- 핵심 포인트
- Google Colab 실습 준비
- 조건문 if/elif/else
- 범위(range) 이해하기
- 반복문 for
- 반복문 while
- break / continue
- 정리 표(비교표)
- 실습 1: 구구단 프로그램
- 실습 2: 간단 메뉴 선택 프로그램
- 따라하기(실행 단계)
- 자주 하는 실수와 해결법
- 블로그 최적화 정보
핵심 포인트
- if는 “분기”입니다: 조건이 참(True)인지 거짓(False)인지에 따라 실행 경로가 나뉩니다.
- for는 “횟수가 정해진 반복”에 강합니다: range와 함께 쓰면 반복 횟수를 깔끔하게 만들 수 있습니다.
- while은 “조건이 유지되는 동안 반복”입니다: 입력을 계속 받거나, 특정 상황까지 반복할 때 유용합니다.
- range는 끝값이 포함되지 않습니다: range(1, 10)은 1부터 9까지입니다(초보자 실수 1순위).
- break는 반복을 즉시 종료, continue는 다음 반복으로 건너뜁니다: 메뉴 프로그램에서 특히 자주 씁니다.
- 반복문과 조건문에서 가장 중요한 것은 들여쓰기(Indentation)입니다: 들여쓰기가 곧 “코드의 범위”입니다.
상세 설명
Google Colab 실습 준비
Google Colab은 브라우저에서 파이썬 코드를 실행하는 환경입니다. 설치가 필요 없고, 셀(Cell) 단위로 코드를 실행할 수 있어 입문자가 연습하기 좋습니다.
기본 사용 흐름은 단순합니다. 새 노트북을 만들고, 코드 셀에 코드를 붙여넣은 뒤 실행 버튼(▶) 또는 Shift+Enter로 실행합니다. 입력이 필요한 코드는 실행 후 아래쪽에 입력창이 나타납니다.
주의할 점은 input()은 항상 문자열(str)로 입력을 받는다는 것입니다. 숫자로 계산하려면 int(input())처럼 정수로 변환해야 합니다.
1) 조건문 if/elif/else
조건문은 “조건이 맞으면 실행, 아니면 다른 실행”을 표현합니다. 파이썬의 조건문은 들여쓰기로 블록을 구분하며, 콜론(:)이 끝에 붙는 것이 특징입니다.
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("D")
위 코드는 점수(score)에 따라 학점을 출력합니다. if부터 위에서 아래로 조건을 검사하고, 처음으로 참이 되는 블록만 실행한 뒤 조건문을 빠져나옵니다. 조건식에서 “같다”는 ==이고, =는 “대입(값을 넣기)”이므로 혼동하지 않도록 주의합니다.
조건식에는 비교 연산자와 논리 연산자를 자주 사용합니다. 예를 들어 “60 이상이고 100 이하” 같은 범위 체크는 다음처럼 작성할 수 있습니다.
n = 75
if 60 <= n and n <= 100:
print("범위 안입니다.")
else:
print("범위 밖입니다.")
초보자에게는 and(그리고), or(또는), not(부정)의 의미를 먼저 확실히 잡는 것이 좋습니다. 조건을 한국어로 말해본 뒤 그대로 코드로 옮기면 실수를 줄일 수 있습니다.
2) 범위(range) 이해하기
range는 “연속된 숫자 묶음”을 만드는 도구입니다. 반복문(for)에서 반복 횟수를 만드는 데 가장 많이 쓰입니다. range의 핵심은 끝값이 포함되지 않는다는 점입니다.
print(list(range(5))) # 0,1,2,3,4
print(list(range(1, 6))) # 1,2,3,4,5
print(list(range(1, 10, 2))) # 1,3,5,7,9
list(...)로 감싸면 range 안의 값을 눈으로 확인할 수 있어 학습할 때 유용합니다. range(시작, 끝, 간격) 형태이며, 간격(step)을 음수로 주면 역순도 만들 수 있습니다.
print(list(range(10, 0, -1))) # 10부터 1까지
여기서도 끝값(0)은 포함되지 않기 때문에 1에서 멈춥니다. “끝이 안 들어간다”는 규칙 하나만 확실히 기억해도 range 실수가 크게 줄어듭니다.
3) 반복문 for
for는 “정해진 횟수만큼” 또는 “자료의 원소들을 하나씩” 처리할 때 편합니다. 가장 대표적인 패턴은 range와 함께 사용하는 형태입니다.
# 1부터 5까지 출력
for i in range(1, 6):
print(i)
i는 반복마다 값이 바뀌는 변수(반복 변수)입니다. range(1, 6)이 1~5를 만든다는 점이 중요합니다.
for는 리스트 같은 자료를 돌릴 때도 자주 씁니다.
fruits = ["apple", "banana", "cherry"]
for f in fruits:
print(f)
리스트에 있는 값을 하나씩 꺼내 처리합니다. 여기서 f는 “문자열 하나”가 되며, 인덱스를 굳이 직접 쓰지 않아도 되는 것이 장점입니다.
구구단처럼 “안에 또 반복이 필요한 상황”에서는 중첩 for(이중 반복)을 사용합니다.
for dan in range(2, 10):
for n in range(1, 10):
print(dan, "x", n, "=", dan * n)
print("------")
바깥 반복(dan)이 2~9단을 돌고, 안쪽 반복(n)이 1~9를 돌면서 곱셈 결과를 출력합니다. 들여쓰기를 보면 “어떤 print가 어느 반복에 속하는지”가 바로 구분됩니다.
4) 반복문 while
while은 “조건이 참인 동안 계속 반복”합니다. 횟수가 딱 정해져 있지 않고, 사용자 입력을 계속 받거나 특정 조건이 만족될 때까지 반복할 때 특히 유용합니다.
count = 0
while count < 3:
print("반복 중:", count)
count += 1
print("끝!")
while을 쓸 때는 조건이 언젠가 거짓이 되도록 변수를 업데이트해야 합니다. count += 1이 없으면 조건이 계속 참이 되어 무한 반복이 됩니다.
입문자가 자주 만드는 형태는 “계속 입력을 받다가 종료 조건이 나오면 멈추는” 패턴입니다.
while True:
text = input("문장을 입력하세요(종료: q): ")
if text == "q":
break
print("입력한 내용:", text)
while True는 “일단 계속 반복”을 의미합니다. 대신 내부에서 break로 빠져나오는 구조를 만들어야 안전합니다. 이 패턴은 메뉴 프로그램에서도 그대로 활용됩니다.
5) break / continue로 흐름 제어
반복문은 단순히 반복만 하는 것이 아니라, 상황에 따라 “그만 반복”하거나 “이번 회차는 건너뛰고 다음 회차로” 넘어가야 할 때가 많습니다. 그럴 때 break와 continue를 사용합니다.
for n in range(1, 11):
if n == 5:
continue # 5는 출력하지 않고 다음 반복으로
if n == 9:
break # 9를 만나면 반복 종료
print(n)
continue는 “아래 코드를 건너뛰고 다음 반복으로” 넘어갑니다. break는 “반복문 자체를 끝내고 밖으로” 나갑니다. 메뉴 프로그램에서 잘못된 입력을 받으면 continue로 다시 메뉴를 띄우고, 종료를 선택하면 break로 끝내는 방식이 매우 흔합니다.
정리 표(비교표)
초보자가 헷갈리기 쉬운 포인트를 표로 한 번에 정리해두면, 코드를 짤 때 빠르게 참고할 수 있습니다.
| 항목 | 의미 | 언제 쓰면 좋은가 | 초보자 주의점 |
|---|---|---|---|
| for | 정해진 횟수/자료의 원소를 순회 | range로 횟수 반복, 리스트/문자열 순회 | range의 끝값은 포함되지 않음 |
| while | 조건이 참인 동안 반복 | 입력을 계속 받기, 종료 조건이 나올 때까지 반복 | 변수 업데이트를 빼먹으면 무한 반복 |
| break | 반복문 즉시 종료 | 종료 메뉴 선택, 목표를 찾으면 중단 | 중첩 반복에서는 “가장 안쪽 반복”만 종료 |
| continue | 현재 반복을 건너뛰고 다음 반복 | 잘못된 입력 무시, 특정 값만 제외 | continue 아래 코드는 실행되지 않음 |
range를 자주 쓰는 형태도 간단히 정리해두면 편합니다.
| 표현 | 의미 | 결과 예시 |
|---|---|---|
| range(5) | 0부터 4까지 | 0,1,2,3,4 |
| range(1, 6) | 1부터 5까지 | 1,2,3,4,5 |
| range(1, 10, 2) | 1부터 9까지 2씩 증가 | 1,3,5,7,9 |
| range(10, 0, -1) | 10부터 1까지 1씩 감소 | 10,9,8,...,1 |
실습 1: 구구단 프로그램(한 단 출력 + 전체 출력)
구구단은 조건문과 반복문 연습에 최적의 예제입니다. 먼저 “사용자가 입력한 단만 출력”을 만들고, 다음으로 “2~9단 전체 출력”까지 확장해보겠습니다.
요구사항 A: 원하는 단 하나 출력
- 사용자가 2~9 사이의 정수를 입력합니다.
- 입력한 단의 1~9 곱셈 결과를 보기 좋게 출력합니다.
- 2~9가 아닌 값이면 안내 문구를 출력합니다.
dan_text = input("몇 단을 출력할까요? (2~9): ")
# 입력은 문자열이므로 숫자로 바꿔야 합니다.
try:
dan = int(dan_text)
except ValueError:
dan = -1
if 2 <= dan and dan <= 9:
print(f"--- {dan}단 ---")
for n in range(1, 10):
print(f"{dan} x {n} = {dan * n}")
else:
print("2~9 사이의 정수를 입력해 주세요.")
핵심은 2가지입니다. 첫째, input()은 문자열이므로 정수 변환이 필요합니다. 둘째, 범위 체크는 2<=dan<=9 형태로도 쓸 수 있지만, 초보자 단계에서는 and로 풀어 쓰는 방식이 더 직관적일 수 있습니다.
요구사항 B: 2~9단 전체 출력(이중 for)
for dan in range(2, 10):
print(f"--- {dan}단 ---")
for n in range(1, 10):
print(f"{dan} x {n} = {dan * n}")
print()
바깥 for가 단(dan)을 바꾸고, 안쪽 for가 곱해지는 수(n)를 1부터 9까지 움직입니다. print() 한 줄은 단과 단 사이를 보기 좋게 띄우기 위한 줄바꿈입니다.
실습 2: 간단 메뉴 선택 프로그램(while + break/continue)
메뉴 프로그램은 “반복해서 입력받기” + “조건에 따라 다른 동작 수행”을 한 번에 연습할 수 있습니다. 구조는 거의 항상 같습니다. (1) 메뉴 출력 → (2) 입력 받기 → (3) 선택에 따라 실행 → (4) 다시 메뉴로 돌아가기, 그리고 종료 선택 시 break 입니다.
요구사항
- 메뉴를 반복해서 보여주고, 사용자가 번호를 입력하면 해당 기능을 실행합니다.
- 0을 선택하면 프로그램을 종료합니다(break).
- 잘못된 입력은 안내 후 다시 메뉴로 돌아갑니다(continue).
run_count = 0
while True:
print("====== 간단 메뉴 ======")
print("1) 두 수 더하기")
print("2) 구구단 한 단 출력")
print("3) 실행 횟수 보기")
print("0) 종료")
choice_text = input("번호를 선택하세요: ")
# 입력 검증: 숫자가 아니면 다시 메뉴로
try:
choice = int(choice_text)
except ValueError:
print("숫자로 입력해 주세요.")
print()
continue
if choice == 0:
print("프로그램을 종료합니다.")
break
elif choice == 1:
a_text = input("첫 번째 수: ")
b_text = input("두 번째 수: ")
try:
a = int(a_text)
b = int(b_text)
except ValueError:
print("정수를 입력해 주세요.")
print()
continue
print("결과:", a + b)
run_count += 1
print()
elif choice == 2:
dan_text = input("몇 단? (2~9): ")
try:
dan = int(dan_text)
except ValueError:
dan = -1
if 2 <= dan and dan <= 9:
for n in range(1, 10):
print(f"{dan} x {n} = {dan * n}")
run_count += 1
else:
print("2~9 사이의 정수를 입력해 주세요.")
print()
elif choice == 3:
print("지금까지 실행한 기능 횟수:", run_count)
print()
else:
print("메뉴에 없는 번호입니다. 다시 선택해 주세요.")
print()
continue
이 코드의 학습 포인트는 분명합니다. while True로 계속 메뉴를 반복하고, 종료 조건(0)에서 break로 나갑니다. 입력이 잘못되면 continue로 아래 로직을 건너뛰고 다시 메뉴로 돌아가며, 정상적으로 기능을 실행했을 때만 run_count를 올립니다.
따라하기(실행 단계)
- Google Colab에서 새 노트북을 만든 뒤 첫 번째 코드 셀에 “구구단(한 단 출력)” 코드를 붙여넣고 실행합니다. 실행 후 입력창이 뜨면 2~9 사이 숫자를 넣어 출력 형식을 확인합니다.
- 같은 셀에서 일부러 1, 10, 문자(예: a)도 입력해 보면서 조건문과 입력 검증이 어떻게 동작하는지 확인합니다. 에러가 나지 않고 안내 문구가 뜨면 성공입니다.
- 두 번째 셀에 “2~9단 전체 출력” 코드를 실행하고, 이중 for의 들여쓰기 구조를 눈으로 따라가며 바깥 반복과 안쪽 반복의 역할을 구분합니다.
- 세 번째 셀에 메뉴 프로그램을 실행한 뒤 1, 2, 3을 여러 번 선택해보며 run_count가 어떻게 증가하는지 확인합니다. 0을 누르면 즉시 종료되는지도 확인합니다.
- 메뉴에서 없는 번호(예: 9)나 문자 입력을 넣어보고, continue가 “다시 메뉴로 돌아가는 역할”을 한다는 점을 체감합니다.
- 마지막으로 메뉴 프로그램을 본인 스타일로 바꿔봅니다. 예를 들어 “1) BMI 계산”, “2) 환율 계산” 같은 기능을 추가해보면 if/elif/else 연습이 확실히 됩니다.
자주 하는 실수와 해결법
- 들여쓰기 오류(IndentationError): if/for/while 아래 블록은 반드시 같은 칸 수로 들여써야 하며, 탭과 공백을 섞으면 문제가 생길 수 있어 공백 4칸을 권장합니다.
- range 끝값 착각: range(1, 10)은 1부터 9까지입니다. “끝값 미포함” 규칙을 먼저 떠올린 뒤 코드를 작성하는 습관이 중요합니다.
- input을 숫자로 쓰려다 오류(ValueError): input은 문자열입니다. int로 변환해야 하며, 실습 단계에서는 try/except로 안전하게 처리하면 흐름이 끊기지 않습니다.
- 무한 반복: while에서 조건이 영원히 참이면 종료되지 않습니다. 조건에 영향을 주는 변수(count 등)가 반복마다 바뀌는지 반드시 확인합니다.
- break 위치 실수: break는 가장 가까운 반복문 하나만 종료합니다. 이중 반복에서 바깥까지 나가고 싶다면 구조를 바꾸거나 플래그 변수를 쓰는 방식이 필요합니다.
추가로 생각해볼 점
- 메뉴 프로그램에 “최근 결과 저장” 기능을 추가해 보시면 리스트와 반복문의 조합을 자연스럽게 연습할 수 있습니다.
- 구구단 출력 형식을 정렬해 보시면(예: 폭 맞추기) 문자열 포맷팅(f-string) 감각이 빠르게 늘어납니다.
- while True + break 패턴에 익숙해지면, 앞으로 만드는 대부분의 콘솔 프로그램(게임, 계산기, 퀴즈)이 훨씬 쉬워집니다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.








0 댓글