การเขียน loops แต่ละแบบใน Python
ข้อดีของ Python คือเราไม่ได้มี syntax ให้เราเลือกเยอะมากจึงทำให้ code ของเราไม่แตกต่างกันมา ซึ่งการเขียน loops ใน Python ก็จะมีให้เลือกแค่ for-loop และ while-loop เท่านั้น
การเขียน For loop
เราจะใช้ for loop ในกรณีที่เรารู้จำนวนรอบที่ชัดเจนว่าจะทำกี่รอบ ใน python เราจะใช้ range ในการระบุจำนวนรอบ หรือ for ที่เข้าถึงสมาชิกแต่ละตัวใน list, dict หรือ tuple
เขียน loop แบบกำหนดรอบด้วย range()
เราจะใช้ function range ในการระบุจำนวนรอบโดยที่ range จะมีรูปแบบการใช้งาน ดังนี้
-
ระบุจำนวนรอบ ในตัวอย่างนี้จะวน loop ทั่้งหมด 10 รอบ
for i in range(10): print(i) # ผลลัพธ์จะออกมาเป็น 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
-
ระบุจุดเริ่มต้นและสิ้นสุด ในตัวอย่างนี้จะเริ่มต้นที่ 1 และไปสิ้นสุดที่ 10
for i in range(1, 11): print(i) # ผลลัพธ์จะออกมาเป็น 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
range จะไม่รวมตัวสุดท้าย(exclude)
-
ระบุ step โดย default แต่ละรอบจะเพิ่มค่าทีละ 1 เราสามารถปรับ step ให้เพิ่มที่ละ 2 หรือลดลงทีละ 2 ได้
ตัวอย่าง เพ่ิมค่าทีละ 2
for i in range(1, 11, 2): print(i) # ผลลัพธ์จะออกมาเป็น 1, 3, 5, 7, 9
ตัวอย่าง ลดค่าลงทีละ 2
for i in range(10, 0, -2): print(i) # ผลลัพธ์จะออกมาเป็น 10, 8, 6, 4, 2
สังเกตว่า start และ end จะไม่ได้สลับที่กัน เพราะ python จะไม่รวมจุดจบ(end) เข้ามาใน loop
การวน loop สมาชิกใน list
ในกรณีที่คุณมี list, dictionary หรือ tuple คุณสามารถใช้ for loop ดึงสมาชิกแต่ละตัวออกมาใช้งานได้(เหมือนกับ foreach ในภาษาอื่นๆ) การวน loop สมาชิกแต่ละตัวภายใน list เราจะใช้ syntax แบบนี้
numbers = [ 1, 2, 3, 4, 5, 6]
for number in numbers
print(number)
# ผลลัพธ์จะออกมาเป็น 1, 2, 3, 4, 5, 6
การวน loop สมาชิกใน dictionary
เช่นเดียวกับ list เราสามารถวน loop สมาชิกภายใน dict ออกมาใข้งานได้แบบนี้ ถ้ายังไม่เข้าใจเรื่อง dict ลองอ่านบทความเรื่อง การทำงานกับ dict ใน python
ตัวอย่าง สมมุติว่าเรามี dict ที่ชื่อว่า current_movies แบบนี้
current_movies = {'The Grinch': '11:00am',
'Rudolph': '1:00pm',
'Frosty the Snowman': '3:00pm',
'Christmas Vacation': '5:00pm'}
-
เราสามารถวน loop เหมือนกับ list ได้เลย แต่ผลลัพธ์ที่ได้ในแต่ละรอบจะเป็น Key หรีือ index เท่านั้น เราจะไม่ได้ value ของมัน
for key in current_movies: print(key)
-
เราสามารถนำ key หรือ index ที่ได้มาไปดึงเอา value ออกมาแบบนี้ก็ได้
for key in current_movies: print(key, current_movies[key])
-
แต่จะสวยกว่าถ้าเราใช้การรับค่าออกมาทีเดียวทั้ง key และ value เลยโดยใช้ method items แบบนี้
for key, value in current_movies.items(): print(key, value)
Method items จะ return ผลลัพธ์ออกมาเป็น Tuple แบบนี้ (key, value)
การวน loop สมาชิกใน Tuple
Tuple ก็จะเป็นอีก 1 data structure ที่สามารถวน loop เอาสมาชิกแต่ละตัวออกมาได้เหมือนกับ list และ dict ในตัวอย่างก่อนหน้า
- เราสามารถดึงสมาชิกแต่ละตัวใน tuple ออกมาเหมือนกัน list ได้เลย
fruits = ("apple", "banana", "cherry") for x in fruits: print(x)
- แต่ถ้าในกรณีที่เราต้องการทำงานกับ index ด้วยให้ใช้วิธีนี้ ซึ่งเราจะเห็นว่าการใช้ for loop แบบด้านบนจะอ่านง่ายกว่า ให้พยายามเลือกเขียนแบบด้านบนก่อน
fruits = ("apple", "banana", "cherry") for i in range(len(fruits)): print(fruits[i])
การเขียน While loop
นอกจาก for-loop แล้วเรายังสามารถใช้ while-loop ในการวน loop ที่เรายังไม่รู้ว่าจะมีกี่รอบกันแน่ เช่น เราจะวน loop รับ input ไปเรื่อยๆ จนกว่า user จะพิทพิ์คำว่า exit แบบนี้
while True:
answer = input("Please answer the question Yes or No(or Exit): ")
if answer.lower() == 'exit':
break
print f"you type {answer.upper()}"
หรือเราอาจเขียน while loop เพื่อกำหนดตจำนวนรอบแบบ for-loop แบบนี้ก็ได้ แต่ไม่แนะนำให้ใช้เพราะ syntax แบบนี้จะอ่านยากกว่าการใช้ for-loop และ range เยอะ
i = 0
while i < 10:
print(i)
i = i + 1
Continue และ break
-
ถ้าเราต้องการข้ามรอบนั้นไปเฉยๆ(ยังไม่ออกจาก loop) ให้ใช้ continue แบบนี้
num = 1 while num <= 10: # loop นี้จะทำงานเฉพาะรอบที่เป็นเลขคี่เท่านั้น(เลขคู่จะเจอ continue) if (num % 2) == 0: continue print(num) num += 1
-
ถ้าเราต้องการออกจาก loop เราจะใช้ break เหมือนในตัวอย่างก่อนหน้า
while True: answer = input("Please answer the question Yes or No(or Exit): ") if answer.lower() == 'exit': break print f"you type {answer.upper()}"
Continue และ Break สามารถใช้ได้ทั้ง for-loop และ while-loop