Python – break และ continue

break และ continue

การใช้ break และ continue จะใช้เมื่อต้องการที่จะเพิ่มข้อยกเว้นจากเงื่อนไขการทำงานของลูป เพราะในบางกรณีเราอาจต้องการที่จะข้ามการทำงานบางรอบของลูป หรือต้องการที่จะยุติการทำงานของลูปก่อนจะครบตามเงื่อนไขเดิมที่กำหนดไว้ด้วยข้อยกเว้นบางอย่าง

การใช้ break

จะยุติการทำงานทั้งหมดของลูปที่บรรจุคำสั่ง break เอาไว้ แต่ในกรณีการใช้ break กับลูปที่ซ้อนกันหลายชั้น(nested-loop) โปรแกรมจะทำการยุติการทำงานเฉพาะแค่ลูปในสุดที่บรรจุคำสั่งนั้นอยู่เท่านั้น โดยที่ลูปชั้นนอกยังคงดำเนินการต่อไป

โครงสร้างของ break

# โครงสร้างการใช้ break กับ for loop  
for <data> in <sequence_of_data>:
     if <test_condition>:
          break

# โครงสร้างการใช้ break กับ while loop
while <test_condition1>:
     if <test_condition2>:
          break

ตัวอย่างการใช้งาน

# คะแนนของนักเรียนทั้งหมด
student_scores = [90, 40, 71, 52, 88, -5, 60, 81]

# ทำการเรียงลำดับคะแนนของนักเรียนทั้งหมดจากมากไปหาน้อย
student_scores.sort(reverse=True)
print("คะแนนที่เรียงลำดับแล้วคือ {}".format(student_scores))
# โปรแกรมทำการปรินต์ค่า 
# คะแนนที่เรียงลำดับแล้วคือ [90, 88, 81, 71, 60, 52, 40, -5]

# เก็บข้อมูลลำดับของคะแนน
score_idx = 1

# ทำการวนลูปเพื่อดึงข้อมูลคะแนนของนักเรียนตั้งแต่คนแรกถึงคนสุดท้าย
for score in student_scores :
    
     # ตรวจสอบว่าหากข้อมูลคะแนนนั้นไม่อยู่ในช่วงคะแนนที่กำหนด โปรแกรมจะยุติการทำงานและแจ้งข้อผิดพลาด
     if not (score>=0 and score<=100):

          # โปรแกรมแจ้งข้อผิดพลาด       
          error_message = "ข้อมูลคะแนน {} ไม่อยู่ในช่วงคะแนนที่กำหนด(0-100)".format(score)
          raise ValueError(error_message)

          break

     # ทำการปรินต์คะแนนของแต่ละลำดับ
     print("คะแนนลำดับที่ {}: {}".format(score_idx, score) )

     # เพิ่มข้อมูลลำดับของคะแนน
     score_idx = score_idx+1

# โปรแกรมทำการปรินต์ค่า
# คะแนนลำดับที่ 1: 90
# คะแนนลำดับที่ 2: 88
# คะแนนลำดับที่ 3: 81
# คะแนนลำดับที่ 4: 71
# คะแนนลำดับที่ 5: 60
# คะแนนลำดับที่ 6: 52
# คะแนนลำดับที่ 7: 40
# Traceback (most recent call last):
#   File "", line 21, in 
# ValueError: ข้อมูลคะแนน -5 ไม่อยู่ในช่วงคะแนนที่กำหนด(0-100)

โดยโปรแกรมข้างต้นจะทำการวนลูปดึงข้อมูลของคะแนนออกมาแสดงผล ซึ่งคะแนนนั้นจะทำการเรียงลำดับจากมากไปหาน้อย และจะมีการตรวจสอบคะแนนว่าอยู่ในช่วงคะแนนที่กำหนด(0-100) หรือไม่ หากคะแนนไม่อยู่ในช่วงที่กำหนด โปรแกรมจะแสดงยุติการทำงานและแสดงรายละเอียดข้อผิดพลาดเพื่อให้ทำการตรวจสอบต่อไป

การใช้ continue

ใช้สำหรับกรณีที่ต้องการจะข้ามการทำงานของชุดคำสั่งเฉพาะรอบนั้นๆ ของลูป แต่ไม่ได้ยุติการทำงานทั้งหมดของลูป

โครงสร้างของ continue

# โครงสร้างการใช้ continue กับ for loop
for <data> in <sequence_of_data>:
     if <test_condition>:
          continue;

# โครงสร้างการใช้ continue กับ while loop
while <test_condition1>:
     if <test_condition2>:
          continue

ตัวอย่างการใช้งาน

# คะแนนของนักเรียนทั้งหมด
student_scores = [31, 60, 40, 77, 88, 60, 55, 52, 81]

count = 0

# ทำการวนลูปเพื่อดึงข้อมูลคะแนนของนักเรียนตั้งแต่คนแรกถึงคนสุดท้าย
for score in student_scores :

     # หากคะแนนน้อยกว่า 70 ให้ข้ามการทำงานในรอบนี้ไป เพื่อเริ่มรอบใหม่ของการทำงาน
     if score < 70:
          continue

     count = count+1

print("จำนวนนักเรียนที่มีคะแนนตั้งแต่ 70 คะแนนขึ้นไปมีทั้งหมด {} คน".format(count))

percent_of_students = ( float(count)/float(len(student_scores)) )*100
print("จำนวนนักเรียนที่มีคะแนนตั้งแต่ 70 คะแนนขึ้นไปคิดเป็น {:.2f} เปอร์เซ็นต์ของนักเรียนทั้งหมด".format(percent_of_students))

# โปรแกรมจะทำการปรินต์ค่า
# จำนวนนักเรียนที่มีคะแนนตั้งแต่ 70 คะแนนขึ้นไปมีทั้งหมด 3 คน 
# จำนวนนักเรียนที่มีคะแนนตั้งแต่ 70 คะแนนขึ้นไปคิดเป็น 33.33 เปอร์เซ็นต์ของนักเรียนทั้งหมด

การทำงานของโปรแกรมข้างต้น โปรแกรมจะทำการนับจำนวนนักเรียนที่มีคะแนนตั้งแต่ 70 คะแนนขึ้นไป และทำการคำนวณเปอร์เซ็นต์ของจำนวนนักเรียนที่มีช่วงคะแนนดังกล่าวจากจำนวนนักเรียนทั้งหมด

ที่มาของข้อมูล: https://www.programiz.com/python-programming/break-continue