(1) ทบทวนความรู้เดิม
โครงสร้างควบคุมแบบเลือกทำ: ทบทวนคำสั่ง if
, elif
, else
และการสร้างเงื่อนไข
นิพจน์เงื่อนไข (Boolean Expressions): การใช้ตัวดำเนินการเปรียบเทียบ (==
, !=
, >
, <
, >=
, <=
) และตัวดำเนินการตรรกะ (and
, or
, not
) ที่ให้ผลลัพธ์เป็น True
หรือ False
ซึ่งสำคัญต่อการควบคุม while
loop
(2) แนวคิดเรื่องการวนซ้ำ (Iteration/Repetition)
ทำไมต้องใช้ Loop?
ประสิทธิภาพ: ลดการเขียนโค้ดที่ซ้ำซ้อนเมื่อต้องการทำงานอย่างเดียวกันหลายๆ ครั้ง
การประมวลผลข้อมูลชุดใหญ่: สามารถทำงานกับข้อมูลจำนวนมากทีละรายการได้ เช่น การอ่านข้อมูลนักเรียนทุกคนในห้อง
การสร้างรูปแบบซ้ำๆ: เช่น การวาดตาราง, การแสดงผลเป็นชุด
อุปมาอุปมัยในชีวิตประจำวัน:
การแปรงฟัน (ทำซ้ำจนกว่าจะสะอาด)
การรับประทานอาหาร (ตักอาหารเข้าปากซ้ำๆ จนกว่าจะอิ่มหรือหมดจาน)
การนับเลข 1 ถึง 10
(3) โครงสร้างควบคุมแบบวนซ้ำประเภทกำหนดจำนวนรอบ (for
loop – Definite Loop)
หลักการ: ใช้เมื่อทราบจำนวนครั้งที่ต้องการให้โปรแกรมทำงานซ้ำ หรือเมื่อต้องการวนซ้ำกับสมาชิกทุกตัวในกลุ่มข้อมูล (sequence)
ไวยากรณ์ (Syntax):
Python for < ตัวแปรควบคุม ( loop variable ) > in < กลุ่มข้อมูล ( sequence ) > :
# ชุดคำสั่งที่จะทำงานซ้ำ (ต้องมีการเยื้อง)
statement_1
statement_2
...
# ชุดคำสั่งต่อไป (อยู่นอกบล็อก for)
ตัวแปรควบคุม (loop variable): จะรับค่าสมาชิกแต่ละตัวจากกลุ่มข้อมูลมาทีละตัวในแต่ละรอบ
กลุ่มข้อมูล (sequence): อาจเป็น range()
, สตริง, ลิสต์, ทูเพิล ฯลฯ
การใช้ for
loop กับฟังก์ชัน range()
:
range(stop)
: สร้างลำดับตัวเลขตั้งแต่ 0 จนถึง stop-1
ตัวอย่าง: for i in range(5): print(i)
จะแสดงผล 0, 1, 2, 3, 4
range(start, stop)
: สร้างลำดับตัวเลขตั้งแต่ start
จนถึง stop-1
ตัวอย่าง: for i in range(1, 6): print(i)
จะแสดงผล 1, 2, 3, 4, 5
range(start, stop, step)
: สร้างลำดับตัวเลขตั้งแต่ start
จนถึง stop-1
โดยเพิ่ม/ลดทีละ step
ตัวอย่าง 1 (เพิ่ม): for i in range(2, 11, 2): print(i)
จะแสดงผล 2, 4, 6, 8, 10
ตัวอย่าง 2 (ลด): for i in range(5, 0, -1): print(i)
จะแสดงผล 5, 4, 3, 2, 1
การใช้ for
loop กับลำดับข้อมูลอื่นๆ:
สตริง (String): วนซ้ำเพื่อเข้าถึงอักขระแต่ละตัวในสตริง
Python message = " Hello "
for char in message :
print ( char )
# Output:
# H
# e
# l
# l
# o
(เกริ่นนำ) ลิสต์ (List), ทูเพิล (Tuple): (จะเรียนละเอียดในหน่วยถัดไป) สามารถวนซ้ำเพื่อเข้าถึงสมาชิกแต่ละตัวได้เช่นกัน
Python # ตัวอย่างกับลิสต์ (จะเรียนในหน่วยที่ 6)
# numbers = [10, 20, 30]
# for num in numbers:
# print(num)
ผังงาน (Flowchart) ของ for
loop (แบบง่ายสำหรับ range
):
(4) โครงสร้างควบคุมแบบวนซ้ำประเภทมีเงื่อนไข (while
loop – Indefinite Loop)
หลักการ: ใช้เมื่อต้องการให้โปรแกรมทำงานซ้ำตราบใดที่เงื่อนไขที่กำหนดยังคงเป็นจริง โดยไม่จำเป็นต้องทราบจำนวนรอบที่แน่นอนล่วงหน้า
ไวยากรณ์ (Syntax):
Python while < เงื่อนไข ( condition ) > :
# ชุดคำสั่งที่จะทำงานซ้ำ (ต้องมีการเยื้อง)
statement_1
statement_2
# ...ต้องมีคำสั่งที่ทำให้เงื่อนไขมีโอกาสเป็นเท็จ...
# ชุดคำสั่งต่อไป (อยู่นอกบล็อก while)
ส่วนประกอบสำคัญของ while
loop ที่ต้องพิจารณา:
การกำหนดค่าเริ่มต้น (Initialization): การกำหนดค่าเริ่มต้นให้กับตัวแปรที่ใช้ใน <เงื่อนไข>
ก่อนที่ loop จะเริ่มทำงาน
เงื่อนไข (Condition): นิพจน์ที่ให้ค่าเป็น Boolean (True
หรือ False
) จะถูกตรวจสอบก่อนเข้าทำงานในแต่ละรอบ
การปรับปรุงค่า (Update/Modification): คำสั่งภายใน loop ที่จะปรับปรุงค่าของตัวแปรที่ใช้ใน <เงื่อนไข>
เพื่อให้เงื่อนไขนั้นมีโอกาสกลายเป็น False
และ loop สามารถจบการทำงานได้
Infinite Loop (การวนซ้ำไม่รู้จบ):
เกิดขึ้นเมื่อ <เงื่อนไข>
ของ while
loop เป็น True
เสมอ และไม่มีการปรับปรุงค่าที่ทำให้เงื่อนไขเป็น False
ได้
วิธีหยุดโปรแกรมที่ติด Infinite Loop ใน Terminal/Console ส่วนใหญ่คือการกด Ctrl+C
ตัวอย่าง Infinite Loop (ที่ควรหลีกเลี่ยง):
Python # count = 1
# while count <= 5: # ไม่มี count += 1 ใน loop
# print("Looping...")
ผังงาน (Flowchart) ของ while
loop:
Python # ตัวอย่างที่ 1: นับเลข 1 ถึง 5
count = 1 # Initialization
while count <= 5 : # Condition
print ( count )
count += 1 # Update
print ( " Loop finished " )
# ตัวอย่างที่ 2: รอรับ input จนกว่าผู้ใช้จะพิมพ์ 'exit'
command = ""
while command . lower () != " exit " :
command = input ( " Enter command (type 'exit' to quit): " )
if command . lower () != " exit " :
print ( f "Executing: { command } " )
print ( " Exiting program. " )
(5) คำสั่งควบคุมการทำงานภายใน Loop (Loop Control Statements) (ประมาณ 15-20 นาที)
break
statement:
หลักการ: ใช้เพื่อสั่งให้ออกจาก loop (ทั้ง for
และ while
) ทันที โดยไม่สนใจว่าเงื่อนไขของ loop จะยังเป็นจริงอยู่หรือไม่ หรือยังวนไม่ครบรอบ
มักใช้ร่วมกับคำสั่ง if
เพื่อตรวจสอบเงื่อนไขพิเศษบางอย่างภายใน loop
ตัวอย่าง:
Python for i in range ( 1 , 11 ): # วน 1 ถึง 10
if i == 5 :
print ( " Found 5, breaking loop! " )
break # ออกจาก for loop ทันที
print ( i )
print ( " After loop " )
# Output: 1, 2, 3, 4, Found 5, breaking loop!, After loop
continue
statement:
หลักการ: ใช้เพื่อสั่งให้ข้ามการทำงานของคำสั่งที่เหลือทั้งหมดในรอบปัจจุบันของ loop และเริ่มการทำงานของ loop ในรอบถัดไปทันที
มักใช้ร่วมกับคำสั่ง if
เพื่อข้ามบางกรณีที่ไม่ต้องการประมวลผล
ตัวอย่าง:
Python for i in range ( 1 , 6 ): # วน 1 ถึง 5
if i == 3 :
print ( " Skipping 3 " )
continue # ข้ามไปรอบถัดไป ไม่ print(i) สำหรับ i=3
print ( i )
print ( " After loop " )
# Output: 1, 2, Skipping 3, 4, 5, After loop
(6) (เสริม) else
clause ใน Loop (ประมาณ 5-10 นาที)
หลักการ: สามารถใช้ else:
ต่อท้ายโครงสร้าง for
loop หรือ while
loop ได้
การทำงาน: บล็อกคำสั่งในส่วน else
จะถูกทำงานก็ต่อเมื่อ loop นั้นทำงานจนจบครบทุกรอบตามปกติ (คือ ไม่ได้ ถูกสั่งให้ออกจาก loop ด้วยคำสั่ง break
)
ตัวอย่างกับ for
loop:
Python numbers = [ 1 , 3 , 7 , 9 ]
search_value = 5
for num in numbers :
if num == search_value :
print ( f "Found { search_value } !" )
break
else : # ทำงานเมื่อ for loop จบปกติ (ไม่เจอ break)
print ( f " { search_value } not found in the list." )
# Output: 5 not found in the list.
search_value = 7
for num in numbers :
if num == search_value :
print ( f "Found { search_value } !" )
break
else :
print ( f " { search_value } not found in the list." )
# Output: Found 7!
Python count = 0
while count < 3 :
print ( f "Count is { count } " )
count += 1
# if count == 2: break # ลอง uncomment บรรทัดนี้ดู
else :
print ( " Loop finished normally. " )
# Output (ไม่มี break): Count is 0, Count is 1, Count is 2, Loop finished normally.
# Output (มี break ตอน count == 2): Count is 0, Count is 1 (แล้วหลุดจาก loop, else ไม่ทำงาน)
(7) (เสริม) Loop ซ้อน Loop (Nested Loops) (ประมาณ 10 นาที)
แนวคิด: การมีโครงสร้าง loop หนึ่ง (เรียกว่า Inner loop ) อยู่ภายในบล็อกคำสั่งของ loop อีกตัวหนึ่ง (เรียกว่า Outer loop )
การทำงาน: ในแต่ละรอบของ Outer loop, Inner loop จะทำงานซ้ำจนครบทุกรอบของมัน
ตัวอย่างการใช้งาน:
การสร้างตาราง (เช่น ตารางสูตรคูณ)
การประมวลผลข้อมูลที่มีลักษณะเป็นสองมิติ (เช่น pixel ในภาพ, ช่องในตาราง)
การสร้างรูปแบบต่างๆ
ตัวอย่างโค้ด (ตารางสูตรคูณ):
Python for i in range ( 1 , 4 ): # Outer loop (แม่สูตรคูณ)
print ( f "--- Multiplication Table for { i } ---" )
for j in range ( 1 , 6 ): # Inner loop (ตัวคูณ)
print ( f " { i } x { j } = { i * j } " )
print ( " - " * 20 ) # เส้นคั่น
ปฏิบัติการที่ 1: วนด้วย for
และ range()
โจทย์ 1.1: แสดงตัวเลข 1 ถึง 10:
คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลขตั้งแต่ 1 ถึง 10 ออกทางหน้าจอ โดยแต่ละตัวเลขอยู่คนละบรรทัด
โจทย์ 1.2: แสดงเลขคู่ตั้งแต่ 2 ถึง 20:
คำสั่ง: เขียนโปรแกรมเพื่อแสดงเลขคู่ตั้งแต่ 2 ถึง 20 (รวม 20) ออกทางหน้าจอ
โจทย์ 1.3: แสดงตัวเลข 5 ถึง 1 (นับถอยหลัง):
คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลขนับถอยหลังจาก 5 ลงไปจนถึง 1
โจทย์ 1.4: ผลบวกของตัวเลข 1 ถึง N:
คำสั่ง: เขียนโปรแกรมรับค่าตัวเลขจำนวนเต็ม N จากผู้ใช้ จากนั้นคำนวณและแสดงผลบวกของตัวเลขทั้งหมดตั้งแต่ 1 จนถึง N
ตัวอย่าง Input: N = 5
ตัวอย่าง Output: ผลบวกตั้งแต่ 1 ถึง 5 คือ 15
ปฏิบัติการที่ 2: วนกับสตริงด้วย for
โจทย์ 2.1: แสดงอักขระในสตริง:
คำสั่ง: เขียนโปรแกรมรับข้อความ (สตริง) จากผู้ใช้ แล้วแสดงอักขระแต่ละตัวในข้อความนั้นออกมาทางหน้าจอ บรรทัดละหนึ่งอักขระ
โจทย์ 2.2: นับจำนวนสระ:
คำสั่ง: เขียนโปรแกรมรับข้อความ (สตริง) จากผู้ใช้ แล้วนับและแสดงจำนวนสระ (a, e, i, o, u ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ที่มีอยู่ในข้อความนั้น
ตัวอย่าง Input: “Hello World”
ตัวอย่าง Output: จำนวนสระในข้อความคือ 3
ปฏิบัติการที่ 3: วนด้วย while
อย่างมีสติ
โจทย์ 3.1: while
นับเลข 1 ถึง 5:
คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลข 1 ถึง 5 โดยใช้ while
loop
โจทย์ 3.2: บวกเลขไปเรื่อยๆ จนกว่าจะป้อน 0:
คำสั่ง: เขียนโปรแกรมรับตัวเลขจำนวนเต็มจากผู้ใช้ไปเรื่อยๆ และทำการบวกสะสมค่าเหล่านั้น จนกว่าผู้ใช้จะป้อนเลข 0 ให้หยุดรับค่าแล้วแสดงผลบวกสะสมทั้งหมด (ไม่รวมเลข 0 ที่ใช้หยุด)
โจทย์ 3.3 (เกมทายตัวเลข):
คำสั่ง: ให้โปรแกรมสุ่มตัวเลขจำนวนเต็มระหว่าง 1 ถึง 10 ขึ้นมาหนึ่งตัว (ใช้โค้ดนี้ในการสุ่ม: import random; secret_number = random.randint(1, 10)
) จากนั้นให้ผู้ใช้ทายตัวเลขไปเรื่อยๆ จนกว่าจะทายถูก
ในแต่ละครั้งที่ผู้ใช้ทายผิด ให้โปรแกรมบอกใบ้ว่าตัวเลขที่ทายนั้น “มากไป” หรือ “น้อยไป”
เมื่อผู้ใช้ทายถูก ให้แสดงข้อความยินดีและจำนวนครั้งที่ผู้ใช้ทาย
ตัวอย่างการเล่น:
Python ( โปรแกรมสุ่มได้เลข 7 )
ทายตัวเลข ( 1 - 10 ): 5
น้อยไป!
ทายตัวเลข ( 1 - 10 ): 8
มากไป!
ทายตัวเลข ( 1 - 10 ): 7
ถูกต้อง! คุณทายไปทั้งหมด 3 ครั้ง
ปฏิบัติการที่ 4: ควบคุม Loop ด้วย break
และ continue
โจทย์ 4.1 (ใช้ break
): ผลรวมเลขบวก (หยุดเมื่อเจอเลขลบ):
คำสั่ง: เขียนโปรแกรมรับตัวเลขจำนวนเต็ม 5 จำนวนจากผู้ใช้เพื่อหาผลรวม แต่ถ้าผู้ใช้ป้อนตัวเลขที่เป็นค่าลบ ให้หยุดการรับข้อมูลทันที (แม้จะยังไม่ครบ 5 จำนวน) แล้วแสดงผลรวมของตัวเลขบวกที่ป้อนเข้ามาก่อนหน้านั้น
โจทย์ 4.2 (ใช้ continue
): แสดงเฉพาะเลขคี่:
คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลขจำนวนเต็มตั้งแต่ 1 ถึง 10 แต่ให้ข้าม (ไม่แสดงผล) ตัวเลขที่เป็นเลขคู่
(เสริม) ปฏิบัติการที่ 5: else
ใน Loop และ Nested Loops
โจทย์ 5.1 (ใช้ else
กับ for
): ค้นหาตัวเลข:
คำสั่ง: กำหนดลิสต์ของตัวเลขไว้ในโปรแกรม เช่น my_numbers = [11, 23, 8, 42, 17, 5]
เขียนโปรแกรมรับตัวเลขหนึ่งตัวจากผู้ใช้เพื่อค้นหาในลิสต์
ถ้าเจอตัวเลขนั้นในลิสต์ ให้แสดงข้อความ “เจอตัวเลข [เลขที่ค้นหา] ในลิสต์!” แล้วออกจาก loop (ใช้ break
)
ถ้าวน loop จนจบแล้วไม่เจอตัวเลขนั้น ให้ (ในบล็อก else
ของ loop) แสดงข้อความ “ไม่เจอตัวเลข [เลขที่ค้นหา] ในลิสต์”
โจทย์ 5.2 (ใช้ Nested for
loops): ตารางสูตรคูณ:
คำสั่ง: เขียนโปรแกรมเพื่อแสดงตารางสูตรคูณตั้งแต่แม่ 2 ถึง แม่ 5 โดยแต่ละแม่ให้คูณถึง 12
ตัวอย่าง Output (บางส่วน):
Python -- - สูตรคูณแม่ 2 -- -
2 x 1 = 2
2 x 2 = 4
...
2 x 12 = 24
--------------------
-- - สูตรคูณแม่ 3 -- -
3 x 1 = 3
...
แบบฝึกหัดประยุกต์ (เลือกทำ 1-2 ข้อ หรือเป็นการบ้าน)
โจทย์ประยุกต์ 1: คำนวณค่าเฉลี่ยของคะแนน N วิชา:
คำสั่ง: เขียนโปรแกรมรับจำนวนวิชา (N) จากผู้ใช้ จากนั้นให้ผู้ใช้ป้อนคะแนนของแต่ละวิชาทีละวิชาจนครบ N วิชา แล้วคำนวณและแสดงค่าเฉลี่ยของคะแนนทั้งหมด
โจทย์ประยุกต์ 2: วาดรูปสามเหลี่ยมมุมฉากด้วยดอกจัน:
คำสั่ง: เขียนโปรแกรมรับจำนวนแถว (rows) จากผู้ใช้ แล้วแสดงผลเป็นรูปสามเหลี่ยมมุมฉากที่สร้างจากเครื่องหมายดอกจัน (*
)
ตัวอย่าง Input: rows = 4
ตัวอย่าง Output:
คำใบ้: อาจจะต้องใช้ Nested loops โดย loop นอกควบคุมจำนวนแถว และ loop ในควบคุมจำนวนดอกจันในแต่ละแถว