파이썬의 반복문

Suhyeon Lee·2024년 10월 27일
0

for문, while문 차이

  • 어떤 동작을 반복해야 할 때, 코드의 간결함 등을 위하여 많이 사용

  • for문은 반복 횟수가 정해진 경우, 즉 복권을 몇 번이 당첨되든 50번 사야하는 상황 등에서 유리

  • while문은 몇 번 수행해야할지는 모르더라도 특정 조건이 만족될 때까지 수행해야 하는 경우, 예를 들면 복권을 몇 번 사든 당첨될때까지 사야하는 상황 등에 유리

  • while문 내부에 while문을 중첩시키는 것도 가능하며, while문과 for문을 중첩하여 혼합 사용하는 것도 가능

while문

  • 당첨 확률이 10%인 복권을 당첨될 때까지 구매
import random

win = 0

while win == 0:
    print('복권을 사겠습니다.')
    seed = random.random() # 0 ~ 1 사이의 랜덤 숫자
    if seed <= 0.1:
        print('축하합니다. 당첨입니다!')
        win = 1
    else:
        print('아쉽네요! 꽝입니다.')
  • while문 선언 시 while 옆에 조건을 제시
  • while문의 맨 아래까지 도달한 뒤, 다시 조건을 검사해서 여전히 만족하고 있다면 while문이 종료되는 방식
  • 여기서는 당첨이 된 경우 win = 1로 바뀌면서, win == 0조건이 만족되지 않기에 반복문이 종료됨

while문 break, continue

  • break: while문을 중간에 빠져나오는 명령어
  • continue: 이번에 실행 중인 while문을 건너뛰고 맨 처음 부분으로 돌아가게 만듦
num = 0

while True:
    if num >= 6:
        break
    num += 1
    if num % 2 == 0:
        continue
    print('숫자를 셉니다!', num)
  • 위 코드의 실행 결과:
    숫자를 셉니다! 1
    숫자를 셉니다! 3
    숫자를 셉니다! 5

  • 우선, num이 홀수이면 while 문의 맨 아래에 있는 print가 무사히 실행됨

  • num이 짝수라면 if문의 continue를 만나 print를 실행하지 못하고, while 문의 맨 위로 올라감

  • num이 6이 되었을 때는, if문의 break를 만나 반복문 종료

while문으로 프로그램 만들기

  • while문은 프로그램을 만드는 경우 등에서 유용하게 사용될 수 있음
  • 예제: 자판기 프로그램
    • input 함수로 원하는 숫자를 입력 받아 반복 실행을 하다가, 6이 입력된 경우 프로그램을 종료하게 되는 상황을 while문에서 break 함수로 구현

while True:
    num = input('''
    무엇을 주문하시겠습니까?
    1. 콜라
    2. 사이다
    3. 환타
    4. 생수
    5. 제로콜라
    종료를 원하시면 6을 입력해주세요. ''')
    if num == '1':
        print('콜라 입니다.')
    # ...
    elif num == '6':
        print('프로그램을 종료합니다.')
        break

for문

  • 원하는 횟수만큼 반복문을 실행시키고 싶은 경우는 while문보다는 for문이 더 적합

for문 기본형(range 이용)

  • for문을 사용할 수 있는 가장 기본적인 방법인 range(숫자)를 이용해서 원하는 횟수만큼 코드를 반복 실행
cnt = 0
sum = 0

# range(10) == 0, 1, 2, …, 9
for i in range(10):
    cnt += 1
    sum += i

print(cnt) # 10
print(sum) # 45 → 0+1+2+3+4+5+6+7+8+9
  • i가 0부터 9까지 1씩 올라가면서 동작 실행
    • range(1, 10, 2)처럼 작성하면 i가 1, 3, 5, 7, 9로 총 5번 실행
    • np.range 등 range를 대체할 수 있는 기능을 가진 iterator 종류도 사용 가능

for문 순회(리스트, 튜플, 딕셔너리, …)

  • 리스트나 튜플 등 자료형 내 원소들에 대해서 순회
  • iterate가 가능하게 설계된 자료형이면 모두 아래와 같은 in을 이용한 for문 순회가 가능
cnt = 0
sum = 0

list_a = [1, 3, 5]

# i가 1, 3, 5로 바뀌면서 실행
for i in list_a:
	cnt += 1
    sum += i

print(cnt) # 3
print(sum) # 9 → 1+3+5
cnt = 0
sum = 0

dict_a = {'a' : 1, 'b' : 2}

# dict_a의 value들의 모임인 1, 2에 대해서 실행
for val in dict_a.values():
	cnt += 1
    sum += val

print(cnt) # 2
print(sum) # 3 → 1+2

enumerate를 이용한 순서 정보 동시 순회

  • 앞의 인자는 현재 자료가 순회하고 있는 자료 중 몇 번째인지를 나타내므로, 때에 따라 유용하게 쓰일 수 있음
sum_i = 0
sum_j = 0

list_a = [1, 3, 5, 7]

# i는 0, 1, 2, 3으로 몇 번째인지를 나타내며 순회, j는 리스트 내 요소 순회
for i, j in enumerate(list_a):
    sum_i += i
    sum_j += j

print(sum_i) # 6 → 0+1+2+3
print(sum_j) # 16 → 1+3+5+7

break, continue를 통한 for문 제어

  • break를 만나면 for문은 실행 종료
  • continue문을 만나면 현재 순회를 마치고 바로 다음 순회로 넘어감
cnt = 0
sum = 0

list_a = [1, 2, 3, 6, 10]

# i가 1, 2일 때는 정상 수행
# i가 3일 때는 continue를 만나 바로 6으로 진행
# i가 6이면 for문 순회가 멈추고 10은 미진행

for i in list_a:
    if i == 3:
        continue
    cnt += 1
    sum += i
    if i == 6:
        break

print(cnt) # 3 → i가 1, 2, 6일 때 실행 
print(sum) # 9 → 1 + 2 + 6

이중 for문 이상의 다중 for문

  • for문 여러개가 겹쳐 있는 다중 for문
for i in range(2, 10):
    for j in range(2, 10):
        print(i, 'x', j, '=', i * j)
    print('-' * 10)
profile
2 B R 0 2 B

0개의 댓글