영국 척척석사 유학생 일기장👩🏻‍🎓

(파이썬) while 반복문 개념 및 예시, for 반복문과 차이점 본문

코딩공부/Python

(파이썬) while 반복문 개념 및 예시, for 반복문과 차이점

life-of-nomad 2024. 6. 10. 09:33
728x90
반응형
저번 글에서 for 반복문에 대해 알아보았습니다. 이번 글에서는 while 반복문에 대해 알아보겠습니다.

 

🔻(참고) for반복문🔻

 

(파이썬) for 반복문과 get 메소드로 딕셔너리(dictionary) 만들기, items로 키와 값 모두 반복하기

지난 글에서 for 반복문에 대한 개념과 간단한 문제에 대해 알아보았습니다. 이번 글에서는 for 반복문과 get 메소드 이용해서 딕셔너리를 만드는 방법에 대해 알아보겠습니다. 🔻(참고) for 반복

life-of-nomad.tistory.com

 

1. while 반복문

  • while 반복문은 무한 반복입니다.
  • 무한 반복은 반복문이 알 수 없는 횟수만큼 반복되고 일부 조건이 충족되면 종료되는 루프입니다.
  • 예를 들어, 카드 목록에서 카들르 뽑아 hand 리스트로 넣은 후 hand에 있는 카드의 값이 17 이상일 때 중지하도록 하는 반복문을 만들어보겠습니다. 
card_deck = [4, 11, 8, 5, 13, 2, 8, 10]
hand = []

while sum(hand) <= 17:
    hand.append(card_deck.pop())
    
print(hand)

>>> [10, 8]
  • 이 예시는 sum 함수와 리스트의 pop 메소드를 사용합니다.
    • sum은 리스트에 있는 요소의 합계를 반환하는 함수입니다. 
    • pop은 append 메소드의 반대이며 리스트에서 마지막 요소를 제거하고 반환합니다. 
  • while sum(hand) <= 17: 이 줄에서 hand 리스트의 합을 계산하고 해당 합이 17보다 작거나 같은지 확인합니다.
  • 이 조건이 참이면 반복문의 바디가 실행됩니다.
  • 반복문의 본문이 실행될 때마다 해당 조건은 다시 평가됩니다. 
  • 조건을 확인하고 반복문을 실행하는 이 과정은 표현식이 거짓이 될 때까지 반복됩니다.
  • hand.append(card_deck.pop()) 이 줄에서 카드 리스트에서 마지막 요소를 꺼내서(pop해서) hand 리스트에 추가합니다.
  • 반복문의 들여쓰기 된 부분은 테스트 표현식에서 적어도 하나의 변수를 수정해야 합니다.
  • 텍스트 표현식의 값이 변경되지 않으면 결과는 무한 루프입니다. 

 

2. 예시

(1) 팩토리얼 계산하기

  • 정수의 팩토리얼은 그 숫자와 1 사이의 모든 정수를 곱한 값입니다. 
  • 예를 들어, 6의 팩토리얼(“6!”으로 표시)은 6 x 5 x 4 x 3 x 2 x 1 = 720입니다. 따라서 6! = 720입니다.
  • while 반복문을 이용하여 팩토리얼을 계산해보겠습니다. 
number = 6
product = 1
current = 1

while current <= number:
    product *= current
    current += 1
    
print(product)

>>> 720
  • for 반복문을 이용해서도 코드를 작성할 수 있습니다.
number = 6
product = 1

for num in range(2, number + 1):
    product *= num
    
print(product)
>>> 720

 

(2) break number 구하기

  • 반복문을 시작하기 전에, break_num을 start_num으로 설정합니다.
  • 반복문을 통해 break_num을 매번 count_by만큼 증가시킵니다.
  • 반복문을 멈추는 조건은 break_num이 end_num보다 커질 때입니다.
  • 반복문이 끝난 후, break_num의 값은 end_num보다 큰 첫 번째 숫자가 됩니다.
start_num = 5
end_num = 100
count_by = 2

break_num = start_num
while break_num < end_num:
    break_num += count_by
    
print(break_num)

>>> 101
  • 만약, start_num 이 end_num보다 크면 오류 메세지를 출력하는 코드를 만들어보겠습니다.
start_num = 105
end_num = 100
count_by = 2

if start_num > end_num:
    result = "Oops! Looks like your start value is greater than the end value. Please try again."
else:
    break_num = start_num
    while break_num < end_num:
        break_num += count_by
    result = break_num
    
print(result)

>>> Oops! Looks like your start value is greater than the end value. Please try again.

 

(3) 제곱근의 근사치 

  • 이 반복문은 주어진 정수 limit보다 작은 가장 큰 제곱수를 찾아 nearest_square 변수에 저장합니다. 
  • 제곱수란 어떤 정수를 자기 자신과 곱한 값을 의미합니다. 
  • 예를 들어, 36은 6*6과 같기 때문에 제곱수입니다.
  • 예를 들어, limit이 40이라면, 코드가 nearest_square를 36으로 설정해야 합니다.
limit = 40
num = 0

while (num + 1) ** 2 < limit:
    num += 1
    nearest_square = num ** 2
    
print(nearest_square)

>>> 36



3. for 반복문과 while 반복문 차이

(1) for 반복문

  • for 반복문은 반복 횟수를 알고 있거나 유한한 경우에 유용합니다.
  • 즉, 반복문의 바디가 미리 정의된 횟수만큼 실행됨을 의미합니다.
  • iterable 컬렉션이 있는 경우(리스트, 문자열, 세트, 튜플, 딕셔너리)
  • 리스트에 대한 for 반복문은 리스트의 각 요소에 대해 바디를 한 번 실행합니다.
    • 예시) for name in names:  
  • range() 함수를 사용하여 유한한 횟수로 반복하려는 경우
    • 예시) for i in range(5):

(2) whlie 반복문

  • while 반복문은 조건이 충족될 때까지 반복이 계속되어야 하는 경우에 유용합니다.
  • 비교 연산자를 사용하려는 경우
    • 예시) while count <= 100:
  • 특정한 사용자 입력을 받아 반복하려는 경우
    • 예시) while user_input == 'y':

(3) 예시

  • 아래의 예시에서 어떤 유형의 반복문을 사용해야하는지 알아보겠습니다.
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]
  • 이 리스트에서 앞에서부터 5개까지의 홀수를 더하는 코드를 작성할때는, while 반복문을 사용해야합니다.
  • 그 이유는 for 반복문에 필요한 break문이 필요하지 않습니다. break문이 없다면 for 반복문은 리스트 전체를 반복하게 됩니다.
  • 우리는 전체 리스트를 반복하기 원하지 않고, 조건을 충족하는 리스트의 필요한 개수의 요소만 반복하려고 합니다. 
  • 반복문을 나가는 조건을 명시적으로 통제하기 때문에 더 이해하기 쉽습니다.
  • 코드는 아래와 같습니다.
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]

count_odd = 0
list_sum = 0
i = 0
len_num_list = len(num_list)

while (count_odd < 5) and (i < len_num_list):
    if num_list[i] % 2 != 0:
        list_sum += num_list[i]
    count_odd += 1
    i += 1
        
print("The numbers of odd numbers added are: {}".format(count_odd))
print("The sum of the odd numbers added is: {}".format(list_sum))

>>> The numbers of odd numbers added are: 5
    The sum of the odd numbers added is: 85
  • 만약 질문이 리스트에 있는 모든 홀수 또는 짝수를 식별하는 것이라면 for 반복문이 더 합리적입니다. 
  • 하지만 위의 질문에서는 앞의 다섯 홀수의 합계만 있으면(조건) 리스트 반복을 중지할 수 있고 나머지 요소를 반복할 필요가 없습니다.
728x90
반응형