[Py.9-10]

반복문 cont.

횟수에 의한 반복

  • 정해 놓은 반복 횟수에 따라 반복문 실행
  • for문을 주로 사용

1. for 문

예시)

for i in range(5):
	print('Hello~')
- pass → 미완성 부분 지나가도록 코딩하는 것

예시)

for i in range(5):
	pass
  • (코드 블록), 들여 쓰기

2. range() 함수 (반복 범위 설정)

  • range() 함수 기본 사용 방법

  • 단계 매개변수를 생략할 수 있는 경우는 단계가 1일 때 가능하다.

예시)

for i in range(1,11):
	print(i)
  • 시작 매개변수를 생략할 수 있는 경우는 시작이 0일 때 가능하다.

예시)

for i in range(11):
	print(i)

조건에 의한 반복

  • 조건에 만족하면 반복 실행하며, 만약 만족 X 면 반복을 중단함
  • while 문을 주로 사용

while 문

예시)

endNum = 10
n = 0

while n <= endNum:
	print(n)
	n += 1
- pass → 미완성 부분 지나가도록 코딩하는 것

예시)

while n > 10:
	pass
  • (코드 블록), 들여 쓰기

for 문 vs while 문

  • for 문이 적합한 경우 → 횟수에 의한 반복

  • while 문이 적합한 경우 → 조건에 의한 반복

실습 결과로 잊지 않기

[예제]

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

자동차 바퀴가 한번 구를 때마다 0.15mm씩 마모된다고 한다.
현재의 바퀴 두께가 30mm이고 최소 운행 가능 바퀴 두께가 20mm라고 할 때 앞으로 구를 수 있는 횟수를 구해보자.
currentThickness = 30
rotationCnt = 0
removeThickness = 0.15

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

safeRotationCnt = rotationCnt - 1
# 위 while 문에서 나온 rotationCnt 는 최소 운행 바퀴 두께를 한 번 더 넘었기에
# rotationCnt에서 1을 빼 구를 수 있는 최대 횟수를 구해야 한다.
print('운행 가능 횟수 : {}'.format(safeRotationCnt))

무한 루프

  • 반복문을 빠져나올 수 없는 경우

    1. while 문에서 조건식의 결과가 항상 True인 경우

      예시)

      n = 1
      while n < 10:
      	print('Hello')
    2. 조건식에 논리형 데이터를 사용한 경우

      예시)

      flag = True
      num = 0
      sum = 0 
      while flag:
          num += 1
          sum += num
          print('{}까지의 합은 {}입니다.'.format(num, sum))

실습 결과로 잊지 않기

[예제]

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

import random

sum = 0
date = 1
flag = True

while flag:
    patientCnt = random.randint(50,100)
    sum += patientCnt
    date += 1
    print('날짜 : {},\t오늘 환자 수 :{},\t누적 환자 수 : {}'.format(date, patientCnt, sum))

    if sum >= 10000:
        flag = False

반복문 제어

continue 키워드

  • 반복 실행 중 continue를 만나면 실행을 생략 후, 다음 반복 실행문으로 넘어감

예시)

for i in range(1, 100):
    if i % 7 != 0:
        continue

    print('{}은 7의 배수입니다.'.format(i))
  • else의 실행문은 반복문이 종료된 후 실행됨

예시)

cnt = 0

for i in range(1, 100):
    if i % 7 != 0:
        continue

    print('{}은 7의 배수입니다.'.format(i))
    cnt += 1

else:
    print('99까지의 정수 중 7의 배수는 {}개입니다.'.format(cnt))

실습 결과로 잊지 않기

[예제]

1부터 100까지의 정수 중 3과 7의 공배수와 최소 공배수를 출력하자.

minNum = 0

for i in range(1,101):
    if i % 3 != 0 or i % 7 != 0:
        continue

    print('공배수 : {}'.format(i))
    if minNum == 0:
        minNum = i

else:
    print('최소 공배수 : {}'.format(minNum))

break 키워드

  • 반복 실행 중 break를 만나면 반복문을 빠져나옴

예시) 1부터 100까지 정수를 더할 때, 합계가 100이 넘는 최초의 정수 찾기

sum = 0
searchNum = 0

for i in range(100):
    sum += i

    if sum > 100:
        searchNum = i
        break

print('searchNum : {}'.format(searchNum))

실습 결과로 잊지 않기

[예제 1]

10의 팩토리얼(10!)을 계산하는 과정에서 결과값이 50을 넘을 때의 숫자를 구하자.

result = 1
num = 0
for i in range(1, 11):
    result *= i

    if result > 50:
        num = i
        break

print('num : {}, result : {}'.format(num, result))

[예제 2]

새끼 강아지 체중이 2.2kg가 넘으면 이유식을 중단하려고 한다. 한번 이유식을 먹을 때 체중이70g 증가한다고 할 때, 예상되는 이유식 날짜를 구하자. (현재 체중은 800g이다.)

limitWeight = 2200
currentWeight = 800
date = 1

while True:
    if currentWeight >= 2200:
        break

    date += 1
    currentWeight += 70

print('이유식 중단 날짜 : {}일'.format(date))

중첩 반복문

  • 반복문 안에 또 다른 반복문을 선언한 것

예시)

for i in range(1, 10):
    for j in range(i):
        print('*', end='')
        # i = 1일 때 : j = 0
        # i = 2일 때 : j = 0, 1
        # i = 3일 떼 : j = 0, 1, 2
        # i = 4일 때 : j = 0, 1, 2, 3
        # .
        # .
        # .
        
    print()

실습 결과로 잊지 않기

[예제]

아래의 모양이 출력되도록 코드를 작성하자:

for i in range(10, 0, -1):
    for j in range(i):
        print('*', end='')
    print()

[예제 2]

구구단 전체를 출력하자.

for i in range(1,10):
    for j in range(2, 10):
        result = j * i
        print('{} * {} = {}\t'.format(j, i, result), end ='')
    print()

이상 데이터 취업 스쿨 Chpt.1 파이썬 기초의 저번 진도 이후의 스터디노트이다.

드디어 어느 정도 주어진 스케줄에 맞추어 정상화가 가까워졌다.

이번 강의들이 제일 복습이 많이 필요한 것들임을 다시 한 번 느꼈다.

강의를 들으면서 실습 문제를 풀고, 또 다시 설명을 들으면서 중요한 부분들을 노트하며 공부했지만, 그래도 만약 이 문제들을 혼자서 풀라고 하면 과연 자신있게 풀 수 있을까라는 의문이 머리 속에서 떠나지 않는다.

계속 정진하는 수 밖에 없을 것 같다.

현재 아침 8시다.

오늘 To-Do 리스트의 첫 번째로는 맥모닝이다.

다녀온 후 기초 문제 풀이를 진행할 예정이다.

오늘도 '열심히'가 아닌,

'그냥' 하는 것을 목표로.





이미지 출처: @waterglasstoon, 제로베이스 강의 일부

profile
On My Way

0개의 댓글