Coding Diary.

(파이썬) for 반복문과 while 반복문에서 break 와 continue 사용하기 본문

Coding/Python

(파이썬) for 반복문과 while 반복문에서 break 와 continue 사용하기

life-of-nomad 2024. 6. 10. 11:40
728x90
반응형
앞의 글에서 for 반복문과 while 반복문, for 반복문과 while 반복문의 차이점에 대해서 알아보았습니다. 이번 글에서는 반복문이 종료되거나 반복을 통제해야 하는 경우 사용하는 breakcontinue에 대해 알아보겠습니다.

 

🔻(참고) for 반복문🔻

 

(파이썬) for 반복문, range 함수, for 반복문 이용해서 리스트 변경하기

파이썬에는 for 반복문과 while 반복문이 있습니다. 먼저, 이번글에서는 iterable(반복가능한) 것을 순회하는데 사용할 수 있는 for 반복문에 대해 알아보겠습니다. iterable : 요소들을 한 번에 하나씩

life-of-nomad.tistory.com

 

🔻(참고) while 반복문🔻

 

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

저번 글에서 for 반복문에 대해 알아보았습니다. 이번 글에서는 while 반복문에 대해 알아보겠습니다. 🔻(참고) for반복문🔻 (파이썬) for 반복문과 get 메소드로 딕셔너리(dictionary) 만들기, items로

life-of-nomad.tistory.com

 

1. break  : 반복문을 종료

  • for 반복문은 시퀀스의 모든 요소를 순회하고, while 반복문은 중지 조건이 충족될 때까지 순회합니다.
  • 하지만 루프가 종료되어야 하는 시기를 더욱 정밀하게 제어해야 하는 경우가 있습니다.
  • 이 경우 break 키워드를 사용합니다.
  • break문을 만나면 루프는 즉시 종료됩니다.
  • break 키워드는 for 및 while 반복문에서 모두 사용할 수 있습니다.
  • 예를 들어, manifest 라는 리스트가 있는 화물선에 화물을 싣고 싶다고 가정해봅시다.
  • 이 리스트에는 튜플로 이루어진  항목과 해당 항목의 무게가 있습니다.
  • 선박으니 최대 중량 용량이 있으므로 최대 중량 용량에 도달하면 화물을 그만 실어야 한다고 합시다.
manifest = [("bananas", 15), ("mattresses", 24), ("dog kennels", 42), ("machine", 120), ("cheeses", 5)]
  • 이를 수행하기 위해 각 항목을 싣고 지금까지 실은 모든 항목의 무게를 추적하는 for 반복문을 사용해야 합니다.
  • 코드는 다음과 같습니다.
manifest = [("bananas", 15), ("mattresses", 24), ("dog kennels", 42), ("machine", 120), ("cheeses", 5)]

weight = 0
items = []
for cargo in manifest:
    if weight >= 100:  # 최대 용량인 100에 도달하는지 확인
        break  # 100에 도달하면 break문 사용해 화물 추가 중지
    else:
        items.append(cargo[0])  # 그렇지 않으면 다음 항목 싣기
        weight += cargo[1]  # 무게 추가하기

print(weight)
print(items)

>>> 211
    ['bananas', 'mattresses', 'dog kennels', 'machine']
  • 여기서 선박은 무게 제한인 100을 크게 초과했습니다.
  • break문은 선박에 모든 항목을 추가하는 것은 막았지만 211로 제한을 초과했습니다.
  • 위 코드에서는 무엇이 잘못되었는지 확인하기 어렵습니다.
  • 여기서 사용할 수 있는 전략은 코드에 print문을 추가하는 것입니다.
  • 단계별로 실행될 때 코드에서 어떤 일이 발생했는지에 대한 통찰력을 제공할 수 있습니다.
  • 디버깅 코드를 추가하고 다시 작성해보겠습니다
    • 디버깅 : 코드에서 오류를 식별하고 제거하는 프로세스
manifest = [("bananas", 15), ("mattresses", 24), ("dog kennels", 42), ("machine", 120), ("cheeses", 5)]

weight = 0
items = []
for cargo in manifest:
    print("current weight: {}".format(weight))
    if weight >= 100:
        print("breaking loop now!")
        break
    else:
        print(" adding {} ({})".format(cargo[0], cargo[1]))
        items.append(cargo[0])
        weight += cargo[1]
        
>>> current weight: 0
     adding bananas (15)
    current weight: 15
     adding mattresses (24)
    current weight: 39
     adding dog kennels (42)
    current weight: 81
     adding machine (120)
    current weight: 201
    breaking loop now!

 

  • 위의 코드에서 weight가 100을 초과할 때까지 break문이 실행되지 않았음을 알 수 있습니다.
  • 실제로는, 해당 항목이 추가되기 전에 break문을 실행해야 합니다.
  • 또한, 선박에 machine 을 싣지 않았다면 cheeses를 실을 수 있었습니다.
  • 여기서 알 수 있는 사실은 단순히 반복문을 완전히 벗어나는 것 보다 단순히 반복문의 한 순회를 건너뛰고 싶을때가 있다는 것입니다.
  • 여기서, countinue 키워드를 사용합니다.

 

2. countinue : 반복문의 반복 한 번을 건너뜀

  • 아래의 예시에서 우리는 음식 리스트를 순회하고 음식이 과일이면 fruit_count를 1씩 증가시킨다고 합시다.
  • 음식에서 과일이 발견되지 않으면 순회를 종료합니다.
  • 코드는 아래와 같습니다.
fruit = ["orange", "strawberry", "apple"]
foods = ["apple", "apple", "hummus", "toast"]

fruit_count = 0
for food in foods:
    if food not in fruit:  # 음식에서 과일이 발견되지 않을때 
        print("Not a fruit")
        continue  #음식이 후무스나 토스트일때 나머지 루프는 완전히 건너뜀
    fruit_count += 1  # 그렇지 않으면 과일 수에 하나 추가
    print("Found a fruit!")
    
print("Total fruit: ", fruit_count)

>>> Found a fruit!
    Found a fruit!
    Not a fruit
    Not a fruit
    Total fruit:  2
  • 이제, 위에 선박 문제에서 만든 코드를 continue 를 이용하여 다시 작성해보겠습니다. 
manifest = [("bananas", 15), ("mattresses", 24), ("dog kennels", 42), ("machine", 120), ("cheeses", 5)]

weight = 0
items = []
for cargo_name, cargo_weight in manifest:
    print("current weight: {}".format(weight))
    if weight >= 100:  # 무게가 100 이상인 경우
        print("  breaking from the loop now!")
        break  # 반복 중단
    elif weight + cargo_weight > 100:  #화물을 추가하면 무게가 100을 초과하는 경우
        print("  skipping {} ({})".format(cargo_name, cargo_weight))
        continue  # 해당 화물을 건너뜀
    else:  # 화물을 추가할 수 있는 경우
        print("  adding {} ({})".format(cargo_name, cargo_weight))
        items.append(cargo_name)  # 해당 화물을 items 리스트에 추가
        weight += cargo_weight  # weight에 화물 무게 더하기
        
print("\nFinal Weight: {}".format(weight))
print("Final Items: {}".format(items))

>>> current weight: 0
      adding bananas (15)
    current weight: 15
      adding mattresses (24)
    current weight: 39
      adding dog kennels (42)
    current weight: 81
      skipping machine (120)
    current weight: 81
      adding cheeses (5)

    Final Weight: 86
    Final Items: ['bananas', 'mattresses', 'dog kennels', 'cheeses']

 

 

3. 연습문제

(1)  break문이 있는 반복문을 작성하여 문자열 news_ticker를 생성하세요. 

  • 이 문자열의 길이는 정확히 140자여야 합니다.
  • headlines 리스트의 헤드라인을 추가하고 각 헤드라인 사이에 공백을 삽입하여 news_ticker를 만들어야 합니다.
  • 필요하다면 마지막 헤드라인을 중간에서 절단하여 new_ticker의 길이가 정확히 140자가 되도록 해야 합니다.
headlines = ["Local Bear Eaten by Man",
             "Legislature Announces New Laws",
             "Peasant Discovers Violence Inherent in System",
             "Cat Rescues Fireman Stuck in Tree",
             "Brave Knight Runs Away",
             "Papperbok Review: Totally Triffic"]
             
news_ticker = ""  # 최종 결과를 저장할 빈 문자열 
for headline in headlines:  # 각 헤드라인에 대해 반복
    news_ticker += headline + " "  # 현재 헤드라인과 공백(" ") 추가
    if len(news_ticker) >= 140:  # 140자 이상이 되면
        news_ticker = news_ticker[:140]  # 문자열을 140자로 자르고 
        break  # 반복 중단
        
print(news_ticker)
>>> Local Bear Eaten by Man Legislature Announces New Laws Peasant Discovers Violence Inherent in System Cat Rescues Fireman Stuck in Tree Brave

 

(2) 소수인지 확인하기

  • 소수는 약수가 2개, 즉 1과 그 숫자뿐인 정수를 말합니다. 몇 가지 예를 들자면 2, 3, 5, 7 등이 있습니다.
  • 리스트 check_prime에 제공된 숫자들이 소수인지 검사하세요.
  • 만일 숫자가 소수라면 코드는 "[숫자] is a prime number."를 출력해야 합니다.
  • 만일 숫자가 소수가 아니라면 "[숫자] is not a prime number"를 출력하고 1과 그 숫자 자체가 아닌 약수를 "[약수] is a factor of [숫자]"라고 출력해야 합니다
check_prime = [26, 39, 51, 53, 57, 79, 85]

for num in check_prime:
    is_prime = True  
    for i in range(2, num):
        if (num % i) == 0:
            print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
            is_prime = False
            break
    if is_prime:
        print("{} IS a prime number".format(num))

 

728x90
반응형