Python_ 반복문

장해수·2023년 6월 7일
  1. 반복문
    1) 정의
  • 특정 실행을 반복함
  • 예) 대량 메일 또는 문자 발송 | 인사말 반복 | mp3 반복 재생 | 구구단 출력 | 팩토리얼 (4!=24) | 매일 아침 기상 알람 | 영어 단어 반복 학습 도구 | 게임 반복 실행 | 타이머

2) 반복문 사용 이유

  • 프로그래밍이 간결하고 유지 보수가 쉬움 (효율성)
print('{} * {} = {}'.format(3, 1, (3 * 1)))
print('{} * {} = {}'.format(3, 2, (3 * 2)))
print('{} * {} = {}'.format(3, 3, (3 * 3)))
print('{} * {} = {}'.format(3, 4, (3 * 4)))
print('{} * {} = {}'.format(3, 5, (3 * 5)))

for i in range (1, 6):
    print('{} * {} = {}'.format(3, i, (3 * i)))
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
  1. 반복의 종류
    1) 횟수에 의한 반복
  • 횟수 지정 > 횟수만큼 순차적으로 반복 실행
    예) 대량 메일 또는 문자 발송 | 인사말 반복 | mp3 반복 재생
    2) 문법 구조
    (1) for문
    for ~ in 키워드 반복 횟수: 
    	실행문 
# 회원 100명에게 메일 발송 

for 1 in range(100): #0 ~ 99까지 100번 반복 
    print('i -> {}'.format(i))

(2) range() 함수

  • 반복 횟수 설정

    range (시작, 끝, 단계)

예) for i in range(1, 11, 1): 1부터 10까지 1씩 증가
for i in range(5, 10, 2): 5부터 9까지 2씩 증가

  • 단계가 1인 경우 단계 생략 가능
    예) for i in range(1, 11): 1부터 10까지 1씩 증가
  • 시작이 0인 경우 시작 생략 가능
    예) for i range(11): 0부터 10까지 1씩 증가

3) 조건에 의한 반복

  • 조건 지정 > 조건에 만족할때까지 반복 실행, 조건을 만족하지 않으면 반복 중단.
    예) 매일 아침 기상 알람 | 게임 반복 실행 | 타이머

4) 문법 구조
(1) while문

while 조건식:
실행문 >> 조건이 false가 되는 경우를 명시해야 함. 그렇지 않으면 무한 반복문이 되어 프로그램에 약영향을 줄 수 있음

#실내온도 26도까지 에어컨 작동

num = 0
while (num < 10):
	print('num -> '}.format(num))
    num + 1

5) for문 vs while문
1) for문이 적합한 경우

  • 횟수의 반복: for문이 while문보다 코드가 간결함.
sum = 0

for i in range(1, 11):
    sum += i
print('sum = {}'.format(sum))


sum = 0
n = 1

while n < 11:
    sum += n
    n += 1
sum = 55
sum = 55

2) while문이 적합한 경우

  • 조건의 반복: 반복 횟수를 명확히 알 수 없는 경우 while문이 적합함.
sum = 0
maxInt = 0

for i in range(1,101):
    if i % 7 ==0 and sum <= 50:
        sum += i
        maxInt = i
    print('i : {}'.format(i))

print('7의 배수의 합이 50이 상인 최초의 정수 : {}'.format(maxInt))

sum = 0
maxInt = 0
n = 1

while n <= 100 and sum <= 50:
    n += 1

    if n % 7 == 0:
        sum += n
        maxInt = n
    print('n: {}'.format(n))

print('7의 배수의 합이 50이 상인 최초의 정수 : {}'.format(maxInt))
i : 1
i : 2
i : 3
 ...
i : 98
i : 99
i : 100
7의 배수의 합이 50이 상인 최초의 정수 : 28

i : 1
i : 2
i : 3
 ...
n: 26
n: 27
n: 28
7의 배수의 합이 50이상인 최초의 정수 : 28 >> while문을 사용했을 때 불필요한 반복 수행을 하지 않고 바로 결과를 출력함
  1. 무한 반복 실행(무한 루프)
  • 반복문을 빠져나올 수 없는 경우
    1) while문에서 조건식의 결과가 항상 True인 경우
#무한루프

n = 1 
while n < 10: 
	print('Hello')

#9번만 실행 

n = 1 
while n < 10: 
	print('Hello')
    n +=1  #n이 10이 되는 순간 조건식이 False가 되어 반복 실행 중단.

2) 조건식에서 논리형 데이터를 사용하여 무한 반복을 실행하는 경우

flag = True 
num = 0
sum = 0

while flag: 
	num += 1
    sum += num
    print("{}까지의 합은 {}입니다.'.format(num, sum))
    #여기까지 무한루프 실행 
    
   	if sum >= 1000: 
    	flag = False #조건이 부정되어 실행 중단
  1. 실습
    예제 1) 'Hello python'문자열을 5번 출력하는 코드를 작성하자.
  • 코드
for i in range(5):
    print('Hello python')
  • 결과
Hello python
Hello python
Hello python
Hello python
Hello python

예제 2) 사용자가 입력한 숫자에 맞는 구구단을 출력하는 코드를 작성하자.

  • 코드
gugudanNum = int(input('숫자 입력: '))
for num in range(9):
    result = gugudanNum * (num + 1)
    print('{} * {} = {}'.format(gugudanNum, (num + 1), result))
  • 결과
숫자 입력: 3
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

예제 3) 사용자가 반복의 시작과 끝을 입력하면 1씩 증가하는 반복문을 만들어보자.

  • 코드
statNum = int(input('시작: '))
endNum = int(input('끝: '))

for i in range(statNum, (endNum + 1)):
    print(i)
  • 결과
시작: 3
끝: 10
3
4
5
6
7
8
9
10

예제 4) 예제 3에서 작성한 반복문을 이용하여 2씩 증가하는 반복문을 만들어보자.

  • 코드
statNum = int(input('시작: '))
endNum = int(input('끝: '))

for i in range(statNum, (endNum + 1), 2):
    print(i)
  • 결과
시작: 3
끝: 10
3
5
7
9

예제 5) 1부터 100까지의 정수 중 2의 배수와 3의 배수를 구분하여 출력하자. (while문 사용)

  • 코드
while n <= 100:
    if n % 2 == 0:
        print('{}은 2의 배수'.format(n))
    if n % 3 == 0:
        print('{}은 3의 배수'.format(n))
    n += 1
  • 결과
2은 2의 배수
3은 3의 배수
4은 2의 배수
6은 2의 배수
6은 3의 배수
8은 2의 배수
9은 3의 배수
10은 2의 배수
12은 2의 배수
12은 3의 배수
...

예제 6) while 문을 이용해서 사용자가 입력한 구구단을 출력하자.

  • 코드
gugudanNum = int(input('숫자: '))
n = 1

while n <=9:
    result = gugudanNum * n
    print('{} * {} = {}'.format(gugudanNum, n, result))
    n += 1
  • 결과
숫자: 3
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

예제 7) 다음 반복 실행을 위해서 for문과 while문 중 가장 적합한 구문을 이용해서 프로그램을 만들어보자.

  • 코드
currentThickness = 30
rotationCount = 0
removeThickness = 0.15

while currentThickness >= 20:
    rotationCount += 1
    currentThickness -= removeThickness 

safeRotationCount = rotationCount - 1 
>> 만약 현재 두께가 20.1 인 경우, 한 바퀴를 더 돌 경우 현재 두께가 최소 운행 가능 바퀴 두께가 20보다 작아지기 때문에 운행 가능 횟수는 굴린 횟수에서 1을 빼주어야 함

print('운행 가능 횟수: {}'.format(safeRotationCount))
  • 결과
운행 가능 횟수: 66

예제 8) 하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 때, 누적 독감 환자 수가 최초로 10,000명을 넘는 날짜를 구해보자.

  • 코드
import random

sum = 0
date = 0
flag = True

while flag:
    patientCount = random.randint(50, 100)
    sum += patientCount
    date += 1

    print('날짜: {}, \t 오늘 환자 수: {}, \t 누적 환자 수: {}'.format(date, patientCount, sum))

    if sum >= 10000:
    	flag = False
  • 결과
날짜: 1, 	 오늘 환자 수: 52, 	 누적 환자 수: 52
날짜: 2, 	 오늘 환자 수: 52, 	 누적 환자 수: 104
날짜: 3, 	 오늘 환자 수: 63, 	 누적 환자 수: 167
...
날짜: 133, 	 오늘 환자 수: 52, 	 누적 환자 수: 9949
날짜: 134, 	 오늘 환자 수: 50, 	 누적 환자 수: 9999
날짜: 135, 	 오늘 환자 수: 73, 	 누적 환자 수: 10072
profile
데이터 진행시켜

0개의 댓글