Sunday, August 7, 2016

เริ่มเขียนภาษา Python : คำสั่งวน loop (for, while)

ทำไมต้องมีคำสั่ง loop ?
       ปกติแล้วโปรแกรมจะเริ่มทำงานไปตามลำดับ คำสั่งแรกใน function จะทำงานก่อนแล้วไล่ไปคำสั่งที่สอง สาม ไปเรื่อยๆ แต่ในบางเหตุการ ต้องการให้มีการทำงานเฉพาะคำสั่งตรงนั้นหลายๆครั้ง หรืออาจจะปรับไปตามคามต้องการของผู้เขียนโปรแกรม
       ทำให้การเขียนโปรแกรม ควบคุมและดำเนินการสิ่งต่างๆทำได้ซับซ้อนมากขึ้นคำสั่ง loop ช่วยให้เราสามารถดำเนินการคำสั่งหรือกลุ่มของ statement หลายครั้ง ได้ง่ายขึ้น
ประเภทของ loop มี 3 ประเภท คือ

  1. while loop
  2. for loop
  3. nested loop  (loop ซ้อนกัน)
while loop
       while  จะทำงานซ้ำๆไปเรื่อยๆ เมื่อเงื่อนไขเป็นจริง
syntax
โปรแกรมจะให้ทำคำสั่งวนซ้ำไปเรื่อยๆ ตราบไดที่เงื่อนไขเป็นจริง และเมื่อเงื่อนไขเป็นเท็จโปรแกรมจะผ่าน บรรทัดคำสั่งนี้ไป
ตัวอย่าง
ผลลัพธ์

จากภาพ จะประกอบด้วยการพิมพ์(print)และ การเพื่มจำนวนที่ถูกดำเนินการซ้ำๆ จนกระทั่ง ค่า count มีค่าเท่ากับ 5 ทำให้เงื่อนไขเป็นเท็จ เลยข้ามมาพิมพ์(print) Good bye!

การเกิด Infinite Loop
       การเกิด Infinite Loop สามารถเกิดขึ้นได้ถ้าหากเงื่อนไขไม่เคยกลายเป็นเท็จ ดั่งนั้นต้องใช้ความระมัดระวังในการเขียน while loop เพราะมีความเป็นไปได้ที่จะเกิด  Infinite Loop 

เกิด Infinite Loop แล้ว??
       ถ้าไม่รุนแรงก็ กดออกได้ตามปกติ แต่ก็มีกรณีที่พอเกิด Infinite Loop แล้ว โปรแกรมค้าง ปิดไม่ได้ ทำหัวร้อนไปช่วงนึงเลย ปิดไม่ได้นี้คือเปิด take manager ไปกดปิดก็ต้องรอพักนึงถึงจะปิดให้ 
ตัวอย่าง
เมื่อ เกิด Infinite Loop แล้วสามารถกด CTRL+C เพื่อหยุดได้ 


for loop
       for จะทำงานซ้ำๆไปเรื่อยๆ คล้ายๆ while สามารถทำงานผ่านลำดับของ list หรือ String ได้
ตัวอย่าง
ผลลัพธ์


จากตัวอย่างเป็การใช้ for ให้กำหนดค่าให้ count ในพิสัย 0 ถึง 5 คือ 0, 1, 2, 3 และ 4 โดยค่าจะถูกกำหนดตอนวนครั้งต่อไปใหม่ทำให้
ครั้งแรก count เท่ากับ 0 เมื่อผ่าน  count += 10 แล้ว ทำให้ count เท่ากับ 10 แล้วพอไปวน loop ครั้งที่สอง ตัวแปร count ถูกกำหนดค่าใหม่เท่ากับ 1 ทำให้ได้ผลลัพธ์
เลขที่มี * ด้านหลัง คือ count หลังจากผ่าน count += 10 จากตัวอย่างนี้ทำให้เห็นได้ว่า for loop ไม่สามารถเกิด Infinite Loop ได้
ในคำสั่ง range จะเห็นได้ว่าามารถใส่ parameter ได้สามตัว โดยตัวที่สามคือการเพื่มหรือลดจำนวนตามที่เราต้องการเช่นเมื่อเรากำหนดเป็น 2 จะได้
ผลลัพธ์

จากภาพจะเห็นได้ว่า จากเดิมนับเพื่มที่ละหนึ่ง เมื่อเราใส่เลข 2 เข้าไปทำให้ เลขเพื่มจาก 0 เป็น 2, 4 ตามลำดับ 
ลดจำนวนละ ?? 
ผลลัพธ์
จากภาพจะเห็นได้ว่าพิสัยตั่งแต่ 0 ถึง -10 และให้ลดลงที่ละ 3 ทำให้เริ่มนับจาก 0 เป็น -3, -6, -9 ตามลำดับ

ถ้าใส่ขัดแย้งกันละ ??
กรณีแรก เลขตรงข้ามกัน พิสัย 0 ถึง 10 แต่ให้ค่าลดลงที่ละ 3 

จากภาพจะเห็นได้ว่า จะหลุด loop ไปที่ คำสั่ง print ("Good bye!") ทันที

กรณีที่สอง พิสัย 0 ถึง 10 แต่ให้ค่าเพื่มที่ละ 0 (เท่าเดิมไม่เพื่ม)  


จากภาพจะเห็นได้ว่า ขึ้น error โดนแจ้งว่า argument ตัวที่สามจะต้องไม่เท่ากับ 0

กรณีที่สาม พิสัย 0 ถึง 10 แต่ให้ค่าเพื่มที่ละ 1.5



จากภาพจะเห็นได้ว่า ขึ้น error โดนแจ้งว่า ชนิดตัวแปร error ต้องการจำนวนเต็ม

มาดู for อีกชนิด โดยเป็นการทำงานแบบเรียงตามดัชนี (index) ลำดับ
ตัวอย่าง
ผลลัพธ์

จากภาพจะเห็นได้ว่า  count จะมีค่าไปตาม index ของ String แล้วพิมพ์ ออกมาทีละตัว 

nested loop
อีกแปบนึง น่ะ 



การควบคุม
ประโยชน์ ความแตกต่าง


















No comments:

Post a Comment