[python] 조건문 / 반복문 제어 / 중첩 반복문

jane05·2023년 9월 6일
0
post-thumbnail

1️⃣ 조건문

1. 조건에 의한 반복(while문)

  • 조건에 만족하면 반복 실행한다. 그렇지 않으면 반복을 중단한다.
  • ex) 매일 기상 알람, 게임 반복 실행, 타이머
endNum = 10
n = 0

while n <= endNum:
    print(n)
    n += 1 #조건식이 무한루프에 빠지는 것을 막기 위해 조건을 넣어줘야 함

#7단
n = 1
while n < 10:
    result = 7 * n
    print('{} * {} = {}'.format(7, n, result))
    n += 1
#실습하기1
n=1 #n 명시
while n < 101:
    if n % 2 == 0:
        print('{}은 2의 배수이다.'.format(n))
    if n % 3 == 0:
        print('{}은 3의 배수이다.'.format(n))
    n += 1

#실습하기2: while문을 이용해서 사용자가 입력한 구구단을 출력하자.
gugudanNum = int(input('희망 구구단 입력 : '))

n = 1
while n < 10:
    result = gugudanNum * n
    print('{} * {} = {}'.format(gugudanNum, n, result))
    n += 1
  • 조건에 의한 반복: while문
  • cf) 횟수에 의한 반복: for문
#조건에 의한 반복: while문
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))


#횟수에 의한 반복: for문
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 #무한루프 방지
print('sum : {}'.format(sum))
#실습하기
currentThickness = 30
rotationCount = 0
removeThickness = 0.15

while currentThickness >= 20: #최소 운행 가능한 바퀴 두께가 안되는 시점이 올 것
    rotationCount += 1 #한 번 구를 때마다 1씩 더해줌
    currentThickness -= removeThickness #여기서!
    #앞으로 구를 수 있는 횟수: safeRotationCount

safeRotationCount = rotationCount - 1 #ex.20.11일 때 : 20.11 - 0.15 -> 20 이하로 내려가 버려서 빼줌 / 더 구르면 두께는 더 얇아짐
print('운행 가능 횟수 : {}'.format(safeRotationCount))

2. 무한루프

  • 반복문을 빠져나올 수 없는 경우를 무한루프라고 한다.
  • while문에서 조건식의 결과가 항상 True인 경우
#while문 안에 논리형 데이터를 사용해서 무한 반복을 빠져나올 수 있다.
flag = True
num = 0
sum = 0
while flag: #flag
    num += 1
    sum += num
    print('{}까지의 합은 {}입니다.'.format(num, sum))

    if sum >= 1000: #누적된 값의 합이 1000보다 크면 빠져 나와라.
        flag = False #빠져나옴
#실습하기
import random

sum = 0
date = 0 #교재와 다르게 0부터 시작!
flag = True #무한 반복

while flag:
    patientCount = random.randint(50, 100) #patientCount: 일일 환자수
    sum += patientCount #환자의 수를 누적해서 받는다
    date += 1 #하루가 지난다
    print('날짜: {}, 오늘 환자수: {}, 누적 환자수: {}'.format(date, patientCount, sum))

    if sum >= 10000:
        flag = False

2️⃣ 반복문 제어

1. continue

  • 반복 실행 중 continue를 만나면 실행을 생략하고, 다음 반복 실행문으로 넘어간다.
#7의 배수가 아니라면 계속해서 새롭게 넣고, 7의 배수라면 print()를 만나 출력된다.
for i in range(100): #0~99까지
    if i % 7 != 0:
        continue
    print('{}는 7의 배수 입니다.'.format(i))
    
#else의 실행문은 반복문이 종료된 후 실행된다.
cnt = 0
for i in range(100): #0~99에서 7의 배수일 때만 센다
    if i % 7 != 0:
        continue

    print('{}는 7의 배수 입니다.'.format(i))
    cnt += 1 #누적 개수

else: #for문이 다 실행되고 난 뒤에 실행한다.
    print('99까지의 정수 중 7의 배수는 {}개입니다.'.format(cnt))
#실습하기2
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 #for문이 계속 돌기 때문에, minNum == 0일 때 실행하고 끝내라!

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

2. break

num = 0
while True: #무한 반복
    print('Hello')
    continue #continue는 continue 이하를 실행하지 않고 남은 반복문을 실행한다.

    num +=1
    if num >=5:
        break #5번 실행하고 break

print('THE END!!')

#break 키워드
#i가 무엇을 나타내는 변수인지 명확히 하기!
sum = 0
searchNum = 0
for i in range(100): #99까지 돈다
    sum += i

    if sum > 100:
        searchNum = i
        break #중단하는 위치가 중요함
print('searchNum : {}'.format(searchNum))
#10의 팩토리얼(10!)을 계산하는 과정에서 결과값이 50을 넘을 때의 숫자를 구하자.
#변수와 값을 지정해주는 것이 먼저!
result = 1
num = 0

for i in range(1,11):
    result *= i #앞의 수에 대해 곱함

    if result > 50:
        num = i #50이 넘으면 우리가 찾는 값이다 -> num을 i에 묶어둔다고 생각하기
        break

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

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

limitWeight = 2200
currentWeight = 800
date = 1

while True: #무한 반복문 만들기
    if currentWeight >= 2200:
        break

    date += 1 #2200 넘을 때까지 계속 돌려라
    currentWeight += 70 #한 번 먹을 때 체중 증가

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

3️⃣ 중첩 반복문

  • 반복문 안에 또다른 반복문을 선언한다.
  • 너무 잦은 반복은 좋지 않고 3~4번이 적당하다.
#실습하기1: 별 그리기
for i in range(10, 0, -1): #1까지, 빼기 해주는 것이 아님
    for j in range(i): #i가 1이면 한 번 돌고, 2이면 두 번 돌겠다.
        print('*', end='')
    print()

#실습하기2: 구구단 출력
for i in range(1, 10): #1부터 9까지
    for j in range(2, 10): #2단부터 9단까지
        result = j * i
        print('{} * {} = {} \t'.format(j, i, result), end = '') #개행하지 마라 : 붙여써라
    print()
profile
데이터 분석 공부 기록

0개의 댓글