(1) ทบทวนความรู้เดิม
- โครงสร้างควบคุมแบบเลือกทำ: ทบทวนคำสั่ง
if,elif,elseและการสร้างเงื่อนไข - นิพจน์เงื่อนไข (Boolean Expressions): การใช้ตัวดำเนินการเปรียบเทียบ (
==,!=,>,<,>=,<=) และตัวดำเนินการตรรกะ (and,or,not) ที่ให้ผลลัพธ์เป็นTrueหรือFalseซึ่งสำคัญต่อการควบคุมwhileloop
(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(), สตริง, ลิสต์, ทูเพิล ฯลฯ - การใช้
forloop กับฟังก์ชัน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
- ตัวอย่าง 1 (เพิ่ม):
- การใช้
forloop กับลำดับข้อมูลอื่นๆ:- สตริง (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) ของ
forloop (แบบง่ายสำหรับrange):

(4) โครงสร้างควบคุมแบบวนซ้ำประเภทมีเงื่อนไข (while loop – Indefinite Loop)
- หลักการ: ใช้เมื่อต้องการให้โปรแกรมทำงานซ้ำตราบใดที่เงื่อนไขที่กำหนดยังคงเป็นจริง โดยไม่จำเป็นต้องทราบจำนวนรอบที่แน่นอนล่วงหน้า
- ไวยากรณ์ (Syntax):
Python
while <เงื่อนไข (condition)>:
# ชุดคำสั่งที่จะทำงานซ้ำ (ต้องมีการเยื้อง)
statement_1
statement_2
# ...ต้องมีคำสั่งที่ทำให้เงื่อนไขมีโอกาสเป็นเท็จ...
# ชุดคำสั่งต่อไป (อยู่นอกบล็อก while)- ส่วนประกอบสำคัญของ
whileloop ที่ต้องพิจารณา:- การกำหนดค่าเริ่มต้น (Initialization): การกำหนดค่าเริ่มต้นให้กับตัวแปรที่ใช้ใน
<เงื่อนไข>ก่อนที่ loop จะเริ่มทำงาน - เงื่อนไข (Condition): นิพจน์ที่ให้ค่าเป็น Boolean (
TrueหรือFalse) จะถูกตรวจสอบก่อนเข้าทำงานในแต่ละรอบ - การปรับปรุงค่า (Update/Modification): คำสั่งภายใน loop ที่จะปรับปรุงค่าของตัวแปรที่ใช้ใน
<เงื่อนไข>เพื่อให้เงื่อนไขนั้นมีโอกาสกลายเป็นFalseและ loop สามารถจบการทำงานได้
- การกำหนดค่าเริ่มต้น (Initialization): การกำหนดค่าเริ่มต้นให้กับตัวแปรที่ใช้ใน
- Infinite Loop (การวนซ้ำไม่รู้จบ):
- เกิดขึ้นเมื่อ
<เงื่อนไข>ของwhileloop เป็นTrueเสมอ และไม่มีการปรับปรุงค่าที่ทำให้เงื่อนไขเป็นFalseได้ - วิธีหยุดโปรแกรมที่ติด Infinite Loop ใน Terminal/Console ส่วนใหญ่คือการกด
Ctrl+C - ตัวอย่าง Infinite Loop (ที่ควรหลีกเลี่ยง):
- เกิดขึ้นเมื่อ
Python
# count = 1
# while count <= 5: # ไม่มี count += 1 ใน loop
# print("Looping...")- ผังงาน (Flowchart) ของ
whileloop:

- ตัวอย่างโค้ด:
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 นาที)
breakstatement:- หลักการ: ใช้เพื่อสั่งให้ออกจาก loop (ทั้ง
forและwhile) ทันที โดยไม่สนใจว่าเงื่อนไขของ loop จะยังเป็นจริงอยู่หรือไม่ หรือยังวนไม่ครบรอบ - มักใช้ร่วมกับคำสั่ง
ifเพื่อตรวจสอบเงื่อนไขพิเศษบางอย่างภายใน loop - ตัวอย่าง:
- หลักการ: ใช้เพื่อสั่งให้ออกจาก 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 loopcontinuestatement:- หลักการ: ใช้เพื่อสั่งให้ข้ามการทำงานของคำสั่งที่เหลือทั้งหมดในรอบปัจจุบันของ 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:ต่อท้ายโครงสร้างforloop หรือwhileloop ได้ - การทำงาน: บล็อกคำสั่งในส่วน
elseจะถูกทำงานก็ต่อเมื่อ loop นั้นทำงานจนจบครบทุกรอบตามปกติ (คือ ไม่ได้ ถูกสั่งให้ออกจาก loop ด้วยคำสั่งbreak) - ตัวอย่างกับ
forloop:
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!- ตัวอย่างกับ
whileloop:
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
- โจทย์ 1.1: แสดงตัวเลข 1 ถึง 10:
- ปฏิบัติการที่ 2: วนกับสตริงด้วย
for- โจทย์ 2.1: แสดงอักขระในสตริง:
- คำสั่ง: เขียนโปรแกรมรับข้อความ (สตริง) จากผู้ใช้ แล้วแสดงอักขระแต่ละตัวในข้อความนั้นออกมาทางหน้าจอ บรรทัดละหนึ่งอักขระ
- โจทย์ 2.2: นับจำนวนสระ:
- คำสั่ง: เขียนโปรแกรมรับข้อความ (สตริง) จากผู้ใช้ แล้วนับและแสดงจำนวนสระ (a, e, i, o, u ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ที่มีอยู่ในข้อความนั้น
- ตัวอย่าง Input: “Hello World”
- ตัวอย่าง Output: จำนวนสระในข้อความคือ 3
- โจทย์ 2.1: แสดงอักขระในสตริง:
- ปฏิบัติการที่ 3: วนด้วย
whileอย่างมีสติ- โจทย์ 3.1:
whileนับเลข 1 ถึง 5:- คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลข 1 ถึง 5 โดยใช้
whileloop
- คำสั่ง: เขียนโปรแกรมเพื่อแสดงตัวเลข 1 ถึง 5 โดยใช้
- โจทย์ 3.2: บวกเลขไปเรื่อยๆ จนกว่าจะป้อน 0:
- คำสั่ง: เขียนโปรแกรมรับตัวเลขจำนวนเต็มจากผู้ใช้ไปเรื่อยๆ และทำการบวกสะสมค่าเหล่านั้น จนกว่าผู้ใช้จะป้อนเลข 0 ให้หยุดรับค่าแล้วแสดงผลบวกสะสมทั้งหมด (ไม่รวมเลข 0 ที่ใช้หยุด)
- โจทย์ 3.3 (เกมทายตัวเลข):
- คำสั่ง: ให้โปรแกรมสุ่มตัวเลขจำนวนเต็มระหว่าง 1 ถึง 10 ขึ้นมาหนึ่งตัว (ใช้โค้ดนี้ในการสุ่ม:
import random; secret_number = random.randint(1, 10)) จากนั้นให้ผู้ใช้ทายตัวเลขไปเรื่อยๆ จนกว่าจะทายถูก - ในแต่ละครั้งที่ผู้ใช้ทายผิด ให้โปรแกรมบอกใบ้ว่าตัวเลขที่ทายนั้น “มากไป” หรือ “น้อยไป”
- เมื่อผู้ใช้ทายถูก ให้แสดงข้อความยินดีและจำนวนครั้งที่ผู้ใช้ทาย
- ตัวอย่างการเล่น:
- คำสั่ง: ให้โปรแกรมสุ่มตัวเลขจำนวนเต็มระหว่าง 1 ถึง 10 ขึ้นมาหนึ่งตัว (ใช้โค้ดนี้ในการสุ่ม:
- โจทย์ 3.1:
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 แต่ให้ข้าม (ไม่แสดงผล) ตัวเลขที่เป็นเลขคู่
- โจทย์ 4.1 (ใช้
- (เสริม) ปฏิบัติการที่ 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
forloops): ตารางสูตรคูณ:- คำสั่ง: เขียนโปรแกรมเพื่อแสดงตารางสูตรคูณตั้งแต่แม่ 2 ถึง แม่ 5 โดยแต่ละแม่ให้คูณถึง 12
- ตัวอย่าง Output (บางส่วน):
- โจทย์ 5.1 (ใช้
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:
- คำสั่ง: เขียนโปรแกรมรับจำนวนแถว (rows) จากผู้ใช้ แล้วแสดงผลเป็นรูปสามเหลี่ยมมุมฉากที่สร้างจากเครื่องหมายดอกจัน (
- โจทย์ประยุกต์ 1: คำนวณค่าเฉลี่ยของคะแนน N วิชา:
Python
*
**
***
****- คำใบ้: อาจจะต้องใช้ Nested loops โดย loop นอกควบคุมจำนวนแถว และ loop ในควบคุมจำนวนดอกจันในแต่ละแถว
