티스토리 뷰
학습목표
- While문을 사용하여 반복문을 작성 할 수 있다.
- For문을 사용하여 정해진 횟수만큼 반복 할 수 있다.
- 리스트에 저장된 항목들에 대하여 반복할 수 있다.
01.반복구조(loop)
파이썬에서 반복 구조는 특정한 작업을 여러 번 반복하거나, 조건을 만족하는 동안 작업을 계속 수행하는 제어 구조입니다.
파이썬에서는 for 루프와 while 루프를 사용하여 반복 작업을 구현할 수 있습니다.
- hello world를 100번 출력하려면?
- print('hello world') * 100 번작성 (가능)
- 하지만 100,000번 출력은 오래걸리고, 프로그래밍 측면에서 비효율적
- 프로그래밍에서는 반복문(loop)기능을 제공
- 반복적 문장 제어?
- 무한반복
- 정해진 횟수만큼
- 어떤 조건이 참 또는 거짓이 될때까지 반복 등
- 반복의 종류
- 횟수제어반복(for문): 정해진 횟수만큼 반복
- 조건제어반복(while문): 특정한 조건을 만족하면 계속 반복
for item in sequence:
# 반복 작업 수행
리스트, 문자열, 튜플 등 반복 가능한 객체를 순서대로 꺼내어 실행한다.
# for문 예제: 100번 반복
for i in range(100):
print("hello world")
# while문 예제: 조건에 따라 반복
count = 0
while count < 100:
print("hello world")
count += 1
#과일 리스트에서 하나씩 출력 해 보도록 하겠습니다.
fruits = ['사과','바나나','오렌지']
for i in fruits:
print(i)
→ apple
→ banana
→ cherry
i = 0
while i < 3:
print(i, '번째')
i = i + 1
02.반복문 for ~문
파이썬의 for 반복문은 주어진 시퀀스(리스트, 튜플, 문자열 등)의 각 요소를 순차적으로 반복하면서 실행되는 반복 구조입니다.
for 반복문을 사용하여 시퀀스의 각 항목을 처리하거나 특정 작업을 반복적으로 수행할 수 있습니다.
for문이란?
파이썬의 for 반복문은
주어진 시퀀스(리스트, 튜플, 문자열 등)의 각 요소를 순차적으로 꺼내면서 실행되는 반복 구조이다.
- **시퀀스(sequence)**란 여러 데이터를 순서대로 저장한 자료형을 말한다.
- 예: 리스트, 튜플, 문자열
for 반복문을 사용하면,
- 시퀀스의 각 항목을 하나씩 처리하거나
- 특정 작업을 반복적으로 수행할 수 있다.
for문의 기본 구조
for 변수 in 시퀀스:
실행할 코드
- 변수: 시퀀스에서 하나씩 꺼낸 요소를 담는 임시 저장공간이다.
- 시퀀스: 반복할 대상이다. 리스트, 튜플, 문자열 등이 올 수 있다.
- 실행할 코드: 꺼낸 요소를 이용해 원하는 작업을 수행한다.
예시 1) 리스트를 순회하기
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)
- 리스트 fruits에 들어 있는 항목들을 차례대로 꺼내어 출력한다.
예시 2) 문자열을 순회하기
for char in "hello":
print(char)
h
e
l
l
o
예시 3) 리스트를 순회
#end='' 부분은 print() 함수의 끝에 출력할 문자열을 지정하는 매개변수, 빈 문자열을 사용하면 줄바꿈 없이 요소들이 출력됩니다.
a = ['호','랑','이']
for i in a:
print(i, end =' ')
for문에 range() 사용하기
- for문은 숫자 리스트를 자동으로 만들어 주는 range함수와 함께 사용하는 경우가 많음
- range(10) : 0부터 10미만의 숫자를 포함하는 range 객체를 만들어 줌
- range(시작, 끝) 형태 (끝 숫자는 미포함)
- 기본문법
for 변수 in range(횟수):
반복할 코드
range(start, stop, step)
- start: 순차적인 시작 숫자 (생략 가능, 기본값: 0)
- stop: 순차적인 마지막 숫자 (필수)
- step: 순차적으로 증가하는 값 (생략 가능, 기본값: 1)
예제1)
# 1부터 10까지 반복 (2씩 증가)
for num in range(1, 11, 2):
print(num)
for i in range(11):
print(i)
0
1
2
3
4
5
6
7
8
9
10
중첩 for문 (for문 안에 for문)
중첩 for문이란,
하나의 for문 안에 또 다른 for문이 들어있는 구조를 말한다.
이 구조를 사용하면,
- 두 개 이상의 시퀀스를 조합하거나,
- 2차원 데이터(행과 열)를 다루거나,
- 복잡한 반복 작업을 수행할 수 있다.
name = ["토미", "지미", "낸시", "불독"]
fes = ["OT", "CONCERT", "MT", "PLAY"]
for a in name: # 이름을 하나씩 꺼낸다
for b in fes: # 각 이름마다 모든 행사를 순회한다
print(a, b)
토미 OT
토미 CONCERT
토미 MT
토미 PLAY
지미 OT
지미 CONCERT
지미 MT
지미 PLAY
낸시 OT
낸시 CONCERT
낸시 MT
낸시 PLAY
불독 OT
불독 CONCERT
불독 MT
불독 PLAY
- 첫 번째 for문이 name 리스트의 이름을 하나씩 꺼낸다.
- 두 번째 for문이 fes 리스트의 모든 행사를 차례대로 꺼낸다.
- 그래서 각 사람마다 모든 행사를 하나씩 매칭하여 출력하게 된다.
연습: for문을 이용한 누적 합계 구하기
sum = 0
for i in range(1, 11):
sum = sum + i
print(sum) #내어쓰기는 shift + tab
코드 설명
- sum = 0
→ 합계를 저장할 변수를 0으로 초기화한다. - for i in range(1, 11)
→ i가 1부터 10까지 하나씩 증가하면서 반복된다. - sum = sum + i
→ 현재 i의 값을 기존 sum에 더해서 다시 sum에 저장한다. - print(sum)
→ 반복이 모두 끝난 뒤, 최종 누적된 합계를 출력한다.
연습문제 2. 홀수만 출력하기
for i in range(1, 11): # 1부터 10까지 반복
if i % 2 == 1: # 홀수인지 검사
print(i) # 홀수이면 출력
for i in range(1, 31, 2):
print(i)
연습문제 3. range() 함수를 이용해 구구단 출력하기
for dan in range(2, 10): # 2단부터 9단까지
print(f"--- {dan}단 ---") # 단 제목 출력
for i in range(1, 10): # 각 단의 곱셈
print(f"{dan} x {i} = {dan * i}")
- for dan in range(2, 10)
→ 2부터 9까지 단을 반복한다. - for i in range(1, 10)
→ 각 단마다 1부터 9까지 곱할 수를 반복한다. - print(f"{dan} x {i} = {dan * i}")
→ 현재 단과 곱할 수, 그리고 결과를 포맷팅하여 출력한다.
03.while~반복문
while 반복문은
조건식이 참(True) 인 동안 코드를 반복해서 실행하는 구조이다.
for문이 정해진 횟수만큼 반복하는 것과 달리,
while문은 조건을 만족하는 동안 계속 반복한다.
초기값 설정
while 조건식:
실행할 코드
변화식
- 초기값 설정: 반복을 제어할 변수를 준비한다.
- 조건식: 참이면 반복하고, 거짓이면 반복을 종료한다.
- 변화식: 반복이 끝날 수 있도록 조건에 영향을 주는 코드를 작성한다.
만약 변화식이 없다면 반복이 무한히 계속되는 무한 루프에 빠질 수 있으니 주의해야 한다!
while문은 언제 사용하면 좋은가?
- 반복 횟수를 모를 때 사용한다.
(언제 끝날지 모르는 반복) - 조건이 참인 동안 반복해야 할 때 사용한다.
- 사용자 입력, 게임 진행, 무한 대기 같은 상황에 적합하다.
✅ for문: 정해진 횟수 반복
✅ while문: 조건이 만족될 때까지 반복
i = 0
while i < 5:
print(i)
i +=1
count = 0
while count < 5:
print("현재 카운트:", count)
count += 1
break문: 강제로 반복문 빠져나가기
- 강제로 while문을 빠져나가고 싶을 때
while 조건식:
실행할 코드
if 탈출조건:
break
실행할 코드
- break를 만나면 반복문이 바로 종료된다.
- 남은 코드는 실행하지 않고 밖으로 나온다.
간단한 예제
i = 1
while True:
print(i)
if i == 5:
break # i가 5가 되면 반복 종료
i += 1
1
2
3
4
5
# @title
while True:
rsp = input('가위바위보:')
if rsp == '가위':
break #loop 종료
print('끝')
continue문: 반복을 건너뛰고 다음으로
- 반복문 자체를 끝내지는 않는다.
- 이번 턴만 스킵하고 다음 반복을 이어간다.continue문은
현재 반복을 건너뛰고 바로 다음 반복으로 넘어가게 만든다.
while 조건식:
실행할 코드
if 건너뛸조건:
continue
실행할 코드
- continue를 만나면 아래 코드를 무시하고,
- 곧바로 조건식 검사 → 다음 반복으로 넘어간다.
간단한 예제
i = 0
while i < 5:
i += 1
if i == 3:
continue # i가 3이면 아래 코드를 건너뛴다
print(i)
1
2
4
5
(3은 출력되지 않고 건너뛰었다.)
연습문제4.
정답을 맞출 때까지 반복하기- while문과 input() 함수를 사용하여
정답을 맞출 때까지 질문을 반복해보자.
answer = ' ' # 초기값 설정 (빈 문자열)
while answer != '근초고왕':
print('백제의 제13대 왕, 3세기 백제의 전성기를 이끌고 한강을 탈환한 왕은 누구일까요?')
answer = input('정답을 입력하세요: ')
코드 설명
- answer = ' '
→ 사용자의 답변을 저장할 변수를 빈 문자열로 초기화한다. - while answer != '근초고왕'
→ 사용자가 '근초고왕'이라고 입력할 때까지 반복한다. - print(...)
→ 문제를 출력한다. - input()
→ 사용자의 답변을 입력받는다. - 정답이 맞으면 반복을 종료하고, 틀리면 계속 문제를 출력한다.
백제의 제13대 왕, 3세기 백제의 전성기를 이끌고 한강을 탈환한 왕은 누구일까요?
정답을 입력하세요: 고구려
백제의 제13대 왕, 3세기 백제의 전성기를 이끌고 한강을 탈환한 왕은 누구일까요?
정답을 입력하세요: 근초고왕
(반복 종료)
연습문제 5. 숫자 맞추기 게임 (업다운 게임)
문제
1부터 100 사이의 무작위 숫자를 맞추는
업다운(Up & Down) 게임을 만들어보자.
import random
answer = random.randint(1, 100) # 1~100 사이 무작위 숫자 생성
while True:
guess = int(input('예상 숫자는: ')) # 사용자 입력 받기
if guess < answer:
print('Up') # 입력한 숫자가 정답보다 작으면
elif guess > answer:
print('Down') # 입력한 숫자가 정답보다 크면
else:
print('정답!') # 정답을 맞추면
break # 반복 종료
코드 설명
- import random
→ 랜덤 숫자를 생성하기 위해 random 모듈을 불러온다. - answer = random.randint(1, 100)
→ 1부터 100 사이의 랜덤 정수를 하나 선택한다. - while True:
→ 정답을 맞출 때까지 무한 반복한다. - guess = int(input('예상 숫자는: '))
→ 사용자의 추측을 숫자로 입력받는다. - 조건에 따라
- 추측이 정답보다 작으면 "Up" 출력
- 추측이 정답보다 크면 "Down" 출력
- 정답을 맞추면 "정답!" 출력하고 break로 반복 종료
예상 숫자는: 50
Up
예상 숫자는: 75
Down
예상 숫자는: 65
Down
예상 숫자는: 60
정답!
연습문제 6. for문과 range()로 피보나치 수열 만들기
피보나치 수열이란?
- 피보나치 수열은
앞의 두 수를 더하여 다음 수를 만드는 수열이다. - 수열의 처음 두 항은 보통 0과 1이다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
a = 0
b = 1
for i in range(20):
print(a, end=' ')
n = a + b
a = b
b = n
코드 설명
- a = 0, b = 1
→ 첫 번째 수(a)와 두 번째 수(b)를 초기화한다. - for i in range(20)
→ 20번 반복한다. - print(a, end=' ')
→ 현재 a를 출력한다. (한 줄에 띄어쓰기로 출력) - n = a + b
→ 다음에 출력할 수를 계산한다. - a = b, b = n
→ a와 b의 값을 한 칸씩 밀어서 업데이트한다.- a는 현재 b로
- b는 새로 계산한 n으로 변경된다.
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
- Total
- Today
- Yesterday