23. ตัวอย่างโปรแกรม
• 1 var = 100
2 if var < 200:
3 print("Expression value is less than 200")
4 if var == 150:
5 print("Which is 150")
6 elif var == 100:
7 print("Which is 100")
8 elif var == 50:
9 print("Which is 50")
10 elif var < 50:
11 print("Expression value is less than 50")
12 else:
13 print ("Could not find true expression")
14 print("Good bye!")
24. การควบคุมทิศทางแบบ nested if
• จากโปรแกรมที่ 6.7 บรรทัดที่ 1 กาหนดค่าเริ่มต้นให้ตัวแปร var เท่ากับ 100 จากนั้นบรรทัดที่ 2 ท าการเปรียบเทียบเงื่อนไข (var < 200) ผล
ปรากฎว่า เป็นจริง ทาให้โปรแกรมพิมพ์ข้อความว่า"Expression value is less than 200" (บรรทัดที่ 3) ออกทางจอภาพลาดับถัดไปใน
บรรทัดที่ 4โปรแกรมทาการเปรียบเทียบเงื่อนไข if var == 150 ผลลัพธ์คือ เป็นเท็จ โปรแกรมจึงกระโดดข้ามบรรทัดที่ 5 ไปทาการเปรียบเทียบ
เงื่อนไข elif ต่อในบรรทัดที่ 6 ผลจากการเปรียบเทียบมีค่าเป็นจริง(var == 100) ดังนั้นในบรรทัดที่ 7 โปรแกรมจึงสั่งพิมพ์ข้อความ "Which is
100" หลังจากพิมพ์ข้อความเสร็จ โปรแกรมจะกระโดดไปทาคาสั่งบรรทัดที่ 14 เพื่อพิมพ์ข้อความ "Good bye!" แล้วจบการทางาน
25. การควบคมุ ทิศทางแบบวนรอบ หรือทาซ้า
(Loop, Iteration)
• การแก้ปัญหาต่างๆในชีวิตประจาวัน มักจะพบเจอกับปัญหาที่ต้องใช้ความพยายามในการแก้ปัญหาดังกล่าววนซ้าหลายๆครั้ง เพื่อที่จะบรรลุเป้าหมาย
เช่น ถ้าต้องการสอบให้ได้คะแนนดีจาเป็นต้องอ่านหนังสือในบทที่จะออกสอบหลายๆรอบ ยิ่งอ่านมากยิ่งมีโอกาสที่จะได้คะแนนสอบมากตามไปด้วย
หรือนักกีฬาที่ต้องการได้เหรียญทองในการแข่งขันจาเป็นต้องฝึกซ้าแบบเดิมให้เกิดความชานาญ ยิ่งชานาญมากก็ยิ่งมีโอกาสประสบความสาเร็จมากตาม
ไปด้วย เช่นเดียวกับการแก้ปัญหาทางคอมพิวเตอร์ บางปัญหานั้นจาเป็นต้องประมวลผลซ้าไปซ้ามาหลายๆรอบ จนกว่าจะได้คาตอบ เช่นการหาผลรวม
ของจานวนเต็มตั้งแต่ 1 – n, การหาค่า factorial, การหาค่า prime number และการคานวณเลขลาดับอนุกรมเป็นต้น ปัญหาเหล่านี้
จาเป็นต้องอาศัยเทคนิคการทาซ้าทั้งสิ้น ภาษาไพธอนเตรียมคาสั่งในการทาซ้าไว้2 คาสั่งคือ while และ for loop โดยใน 2 คาสั่งนี้สามารถจา
แนกเป็นวิธีการทางานได้3 รูปแบบ while loop, for loop และ nested loop ซึ่งมีรายละเอียดดังต่อไปนี้
26. ค าสั่ง While loop
• While เป็นคาสั่งวนซ้าที่มีการตรวจสอบเงื่อนไข (condition) ก่อนเข้าทางานเสมอเมื่อเงื่อนไขที่ทาการตรวจสอบเป็นจริง จึงจะประมวลผล
คาสั่งหลัง while แต่ถ้าเงื่อนไขเป็นเท็จจะยุติการทางานทันทีสาหรับงานที่นิยมใช้while ในการแก้ปัญหาคือ ปัญหาที่ไม่ทราบจานวนรอบการท า
งานที่แน่นอนหรือ
ปัญหาที่ไม่สามารถทราบได้ร่วงหน้าว่าจะต้องใช้เวลาในการประมวลผลนานเท่าใด ส่วนใหญ่มักจะหยุดการทางานของ while ด้วยเงื่อนไขบางประการ
เช่น กดแป้นพิมพ์ที่บ่งบอกว่าต้องการออกจากโปรแกรมเช่นESC, q, -1, 0 เป็นต้น หรือตรวจสอบค่าในตัวแปรตัวใดตัวหนึ่งในโปรแกรมเป็นเท็จ เป็น
ต้นโครงสร้างการทางาน while loop มีรูปแบบคาสั่งดังนี้
whilecondition: statement(s)
31. ตัวอย่างโปรแกรม
• 1 # Infinite loop program
2 # When would you like to exit this program, push CTRL + C
3 var = 1
4 while var == 1 : # This constructs an infinite loop
5 num = int(input("Enter a number :"))
6 print("You entered: ", num)
7 print("Good bye!")
32. การวนซ้าแบบไม่ร้จูบ (The Infinite Loop)
• จากตัวอย่างโปรแกรม เริ่มต้นบรรทัดที่3 กาหนดค่าให้ตัวแปร var = 1 เพื่อใช้สาหรับเปรียบเทียบเงื่อนไขก่อนเข้าทางานใน while loop (การ
กาหนดเงื่อนไขเพื่อใช้เปรียบเทียบก่อนเข้าทางานใน while loop เป็นขั้นตอนที่สาคัญมากและต้องทาเสมอ)บรรทัดที่ 4 ทาการตรวจสอบเงื่อนไข
ก่อนเข้าทางานใน while ผลการตรวจสอบปรากฎว่า เป็นจริงเสมอ เพราะว่าค่าในตัวแปร var มีค่าเท่ากับ 1 โปรแกรมจึงเลื่อนไปท าค าสั่งใน
บรรทัดที่ 5 หลังคาสั่ง while คือคาสั่งอ่านข้อมูลจานวนเต็มมาจากแป้นพิมพ์เก็บไว้ในตัวแปร num จากนั้นบรรทัดที่ 6 จะพิมพ์ค่าที่อยู่ในตัวแปร
num ออกมาทางจอภาพแล้วโปรแกรมจะกลับไปทางานในบรรทัดที่ 4 อีกครั้ง ทั้งนี้เพราะเงื่อนไขใน while ยังเป็นจริงอยู่การทางานจะทาซ้าคาสั่ง
บรรทัดที่ 4 5 6 ไปเรื่อยๆ จนกว่าเงื่อนไขใน while จะเป็นเท็จ แต่สาหรับในกรณีนี้จะเป็นจริงตลอดไปแบบไม่มีวันจบ (Infinite loop)
และคาสั่งในบรรทัดที่ 7 จะไม่ถูกประมวลผลเลย ถ้าผู้เขียนโปรแกรมต้องการออกจากโปรแกรมนี้ให้กดปุ่ม CTRL + C เท่านั้น เพื่อเป็น การ
Terminate โปรแกรมและโปรแกรมจะแสดงข้อความผิดพลาดออกมาดังตัวอย่างข้างบน
33. การใช้คาสั่ง else ร่วมกับ while และ for
• ไพธอนจะอนุญาตให้ผู้เขียนโปรแกรมสามารถใช้ else ร่วมกับคาสั่ง while และ for ได้(ซึ่งแนวคิดดังกล่าวไม่มีในภาษาC/C++ หรือ Java)
โดยถ้าใช้คาสั่ง else กับ for แล้ว คาสั่ง else จะทางานเมื่อการประมวลผลคาสั่งในfor loop เสร็จเรียบร้อยหมดแล้ว และเมื่อใช้งาน else กับ
while โดย elseจะทางานก็ต่อเมื่อเงื่อนไขใน while loop เป็นเท็จ ตัวอย่างการใช้else ร่วมกับ while ดังโปรแกรม
34. ตัวอย่างโปรแกรม
• 1 # Testing else statement with while loop
2 count = 0
3 while count < 5:
4 print(count, " is less than 5 (While Loop)")
5 count = count + 1
6 else:
7 print(count," is not less than 5(Else after exit while
• loop)")
8 print("Good bye!")
35. ตัวอย่างโปรแกรม
• จากตัวอย่างโปรแกรม บรรทัดที่ 2 กาหนดค่าเริ่มต้นให้ตัวแปร count เท่ากับ 0 เพื่อใช้ สาหรับทาการเปรียบเทียบก่อนเข้าทางานใน while loop
ผลลัพธ์จากการเปรียบเทียบ (บรรทัดที่ 3) มี ค่าเป็นจริง เพราะ count < 5 โปรแกรมจะเข้าไปประมวลผลในบรรทัดที่ 4 โดยพิมพ์ข้อความว่า "X is
less than 5 (While Loop)" โดย X คือค่าที่อยู่ในตัวแปร count ในบรรทัดที่ 5 โปรแกรมทาการเพิ่มค่า conunt อีก 1 จากนั้นโปรแกรม
จะวนกลับมาตรวจสอบเงื่อนไขใน while อีก (เพราะเงื่อนไขยังไม่เป็น เท็จ) ซึ่งโปรแกรมจะทาคาสั่งซ้าในบรรทัดที่ 3 4 5 เช่นนี้ไปเรื่อยๆ จนกว่า
count >= 5 จึงทาให้ โปรแกรมยุติการท างานใน while loop ลง และมาประมวลผลคาสั่งในบรรทัดที่ 6 โดยพิมพ์ข้อความว่า "5 is not
less than 5 (Else after exit while loop)" และตามด้วยข้อความ "Good bye!" ในบรรทัดที่ 8 ดังแสดงใน OUTPUT ของ
โปรแกรมด้านบน
37. ตัวอย่างโปรแกรม
• 1 # Testing else statement with while loop
2 count = 0
3 while count < 5:
4 print(count, " is less than 5 (While Loop)")
5 count = count + 1
6 else:
7 print(count," is not less than 5(Else after exit while
• loop)")
8 print("Good bye!")
41. ตัวอย่างโปรแกรม
• 1 # Break for while and for loop
2 for letter in 'Python': #First example for for loop
3 if letter == 'h':
4 break #Break force exit for loop
5 print('Current Letter :', letter)
7 var = 10 #Second example while loop
8 while var > 0:
9 print('Current variable value :', var)
10 var = var – 1
11 if var == 5:
12 break #Break force exit while loop
13 print("Good bye!")
43. ตัวอย่างโปรแกรม
• 1 # Continue for while and for loop
2 for letter in 'Python': # First example for for loop
3 if letter == 'h':
4 continue
5 print('Current Letter :', letter)
6 var = 10 # Second example for while loop
7 while var > 0:
8 var = var -1
9 if var == 5:
10 continue
11 print('Current variable value :', var)
12 print("Good bye!")
45. ตัวอย่างโปรแกรม
• 1 # Testing pass command
2 for letter in 'Python':
3 if letter == 'h':
4 pass
5 print('This is pass block')
6 print('Current Letter :', letter)
7 print("Good bye!")
Note: คาสั่ง switch, do-while, forecach ไม่มีให้ใช้งานในภาษาไพธอน
46. คาสั่ง for loop
• คาสั่ง for เป็นคาสั่งที่ใช้ส าหรับการทาซ้าเช่นเดียวกับ while และต้องมีการตรวจสอบเงื่อนไขก่อนเข้าลูปเหมือนกันแต่แตกต่างกันตรงที่ for จะ
ตรวจสอบรายการแบบลาดับแทน (Item ofsequence) เช่น ข้อมูลชนิดสตริง ลิสต์หรือทัพเพิล เป็นต้น โครงสร้างการทางาน for loop มี
รูปแบบคาสั่งดังนี้
• โดย interating_var คือตัวแปรที่ใช้สาหรับรับค่าทีละค่าเพื่อนามาประมวลผลจากข้อมูลที่อยู่ในตัวแปร sequence เมื่อข้อมูลในตัวแปร
sequence เป็นชนิดลิสต์คาสั่ง for จะดึงข้อมูลในตาแหน่งแรกของลิสต์ออกมาเก็บไว้ใน iterating_var หลังจากนั้นจะเริ่มทาคาสั่งใน
statement(s) เมื่อคาสั่งในstatement(s) หมดแล้ว การควบคุมจะกลับไปเริ่มต้นใหม่ที่ for แล้วดึงข้อมูลในลิสต์ลาดับถัดไปมาทางานการ
ทางานจะเป็นไปในลักษณะเช่นนี้ไปเรื่อยๆจนกว่าข้อมูลในลิสต์จะหมด for จึงจะยุติการทางานสาหรับแผนผังจาลองการทางานของfor และตัวอย่าง
การดึงข้อมูลสมาชิกในรายการ
for iterating_var insequence:
statements(s)
47.
48. ตัวอย่างโปรแกรม
• 1 # Testing for loop
2 for letter in 'Python': # First Example
3 print('Current Letter :', letter)
4 fruits = ['banana', 'apple', 'mango']
5 for fruit in fruits: # Second Example
6 print('Current fruit :', fruit)
7 print("Good bye!")
49. การอ้างถึงข้อมูลสมาชิกโดยการชี้ตาแหน่งของ for loop
• คาสั่ง range เป็นคาสั่งที่ช่วยสร้างช่วงของข้อมูลเช่น เมื่อใช้คาสั่ง range(5) ช่วงข้อมูลที่ได้คือ 0, 1, 2,3, 4 ดังนั้นเราสามารถนา range มา
ประยุกต์ใช้กับ for ได้โดยข้อมูลที่สร้างโดย range จะถูกนาไปใช้เป็นตัวชี้ตาแหน่งของรายการข้อมูลได้ดังตัวอย่างโปรแกรม
50. ตัวอย่างโปรแกรม
• 1 # for loop and index
2 fruits = ['banana', 'apple', 'mango']
3 for index in range(len(fruits)):
4 print('Current fruit :', fruits[index])
5 print("Good bye!")
51. ฟังก์ชัน range
• จากที่กล่าวไปแล้วว่า for นั้นนิยมใช้งานกับคาสั่ง range เสมอ ดังนั้นในย่อหน้านีจะกล่าวถึงคาสั่งrange
เพิ่มเติมอีกเล็กน้อยเพื่อให้การใช้คาสั่ง range ร่วมกับ for ได้ดีขึ้น โดยปกตคาสั่ง range จะมีรูปแบบ
คาสั่ง 4 แบบดังนี้ range (x), range (x, y), range (x, y, i), range (y, x, -
i)range (x) แบบที่ จะสร้างชุดของข้อมูลเริ่มต้นจาก0 ถึง (x -1) โดยเพิ่มขึ้นครั้งละ 1 เช่นเมื่อเรียกใช้
ฟังชัน range(6) ข้อมูลที่ถูกสร้างขึ้นคือ [0, 1, 2, 3, 4, 5]range (x, y) แบบที่ จะสร้างชุดของข้อมูล
เริ่มต้นจาก x ถึง (y -1) โดยเพิ่มขึ้นครั้งละ 1 เช่นเมื่อเรียกใช้ฟังชัน range(3, 10) ข้อมูลที่ถูกสร้างขึ้นคือ
[3, 4, 5, 6, 7, 8, 9]range (x, y, i) แบบที่ จะสร้างชุดของข้อมูลเริ่มต้นจากx ถึง (y -1) โดยเพิ่มขึ้นครั้ง
ละ iเช่น เมื่อเรียกใช้ฟังชันrange(3, 15, 2) ข้อมูลที่ถูกสร้างขึ้นคือ [3, 5, 7, 9, 11, 13] มีข้อสังเกตสาหรับ
ค่า y ตัวสุดท้าย คือ 15 จะไม่ถูกนามาใส่ไว้ในรายการด้วย เนื่องจากติดเงื่อนไขที่ค่า y = y – 1 ดังนั้นค่าy ที่
ได้คือ 14 โปรแกรมจึงตัดทั้ง 14 และ 15 ทิ้งไปด้วย เพราะไม่อยู่ในเงื่อนไขทั้งคู่
52. การใช้else statement กับ for loop
• ไพธอนอนุญาตให้ใช้else กับ for loop ได้ซึ่งแตกต่างจากภาษาอื่นๆโดยทั่วไป เช่นภาษาซีหรือจาวา เป้าหมายสาคัญของ
การใช้else กับ for นั้นเพื่ออานวยความสะดวกให้กับผู้เขียนโปรแกรมในกรณีที่เงื่อนไขใน for เป็นเท็จ โดยปกติจะออกจาก
คาสั่ง for ไปโดยอัตโนมัติ บางครั้งผู้เขียนโปรแกรมไม่ทราบเลยว่าเกิดข้อผิดพลาดอะไรขึ้นในลูป for ดังนั้นคาสั่ง else จึงช่วย
ให้ผู้เขียนโปรแกรมสามารถตรวจสอบความผิดปกติใน for ได้อีกทางหนึ่งหรือผู้เขียนโปรแกรมต้องการทางานบางอย่างหลังจาก
จบการท างานใน for เรียบร้อยแล้ว สาหรับการใช้else กับ for และ while นั้นมีข้อพิจารณาดังนี้1) คาสั่ง else เมื่อถูกใช้
กับ for loop: คาสั่ง else จะถูกประมวลผลเมื่อ คาสั่งใน for ถูกประมวลผลครบหมดแล้ว2) คาสั่ง else เมื่อถูกใช้กับ
while loop: คาสั่ง else จะถูกประมวลผลเมื่อ เงื่อนไขใน whileเป็นเท็จพิจารณาตัวอย่างการใช้else กับ for ดัง
โปรแกรมที่ 6.21 โดยโปรแกรมดังกล่าวจะหาค่าจานวนเฉพาะ (prime number) คือเลขจานวนที่ไม่มีเลขอะไรมาหารมันได้
ลงตัว นอกจากตัวของมันเอและ1 เช่น 2, 3, 5, 7, 11, 13 และ 17 เป็นต้น
53. ลูปซ้อน (Nested loops)
• ไพธอนอนุญาตให้ผู้เขียนโปรแกรมสามารถใช้ลูปซ้อนได้ (การวาง for loop ไว้ภายใน for loop)มีรูปแบบคาสั่งดังนี้
• ลูปซ้อนของ for
• ลูปซ้อนของ while
for iterating_var insequence:
for iterating_var insequence:
statements(s)
statements(s)
whileexpression:
whileexpression:
statement(s)
statement(s)
54. ลูปซ้อน (Nested loops)
• ลูปซ้อนของ for กับ while
for iterating_var insequence:
whileexpression:
statement(s)
statement(s)