Conditions (Control Structure 1)
in operatorif, if-else, if-elif-elseผังงาน — เครื่องมืออธิบายลำดับความคิดและตรรกะของโปรแกรม
Tip
ในการพัฒนาโปรแกรมควรมี Flowchart ก่อนลงมือเขียนโปรแกรม โดยเฉพาะเมื่อโปรแกรมมีความซับซ้อน หรือมีผู้ร่วมพัฒนาหลายคน
| Symbol | Meaning |
|---|---|
|
Terminal — จุดเริ่มต้น หรือจุดสิ้นสุดของโปรแกรม |
|
Process — การประมวลผลทั่วไป เช่น การคำนวณ หรือการกำหนดค่า |
|
Input/Output — การรับค่าเข้าสู่โปรแกรม หรือการแสดงผลลัพธ์ |
|
Decision — คำสั่งที่ต้องตัดสินใจ มีทางเลือกสองทาง (True / False) |
|
Connector — แสดงจุดเชื่อมของโปรแกรม |
| Symbol | Meaning |
|---|---|
|
Link — เชื่อมต่อระหว่างส่วนของโปรแกรม (เช่น ข้ามหน้ากระดาษ) |
|
Function — ส่วนของ Function ที่เรียกใช้ (รายละเอียดอยู่ที่อื่น) |
|
Flow line — ทิศทางการทำงาน เรียงจากบนลงล่าง |
|
Loop arrow — ลูกศรล่างขึ้นบน แสดงการทำซ้ำ/วนลูป |
การนำรถยนต์เข้าศูนย์บริการ
Age) และระยะทางที่รถวิ่งมาแล้ว (Mileage)
Selection & Condition
เงื่อนไข สร้างขึ้นจากคำสั่ง 2 ลักษณะประกอบกัน
การประเมิน (Evaluate) ความสัมพันธ์เชิงเปรียบเทียบ (comparison) ว่าเป็นไปตามที่กำหนดหรือไม่
| Relational Operator | ความหมาย |
|---|---|
< |
น้อยกว่า |
> |
มากกว่า |
<= |
น้อยกว่าหรือเท่ากับ |
>= |
มากกว่าหรือเท่ากับ |
== |
เท่ากับ |
!= |
ไม่เท่ากับ |
ผลลัพธ์ของการเปรียบเทียบเป็นค่า bool (True / False)
รับค่า age แล้วตรวจสอบว่าน้อยกว่า 18 หรือไม่ แสดงผลด้วย f-string
Warning
ระวังการเขียน Relational Operator ผิดรูปแบบ
in และ not in Operatorใช้ in และ not in ตรวจสอบความเป็นสมาชิก (membership test) ว่าข้อมูลอยู่ภายใน collection หรือไม่
Note
กำหนดลิสต์ Blackpinks แล้วตรวจสอบว่าชื่อที่รับเข้ามาเป็นสมาชิกหรือไม่
ลองใช้ in กับ string เพื่อตรวจสอบ substring ด้วย
การประเมินความสัมพันธ์ทาง ตรรกะ (Logic) โดยอาศัย Logical Operators
| Logical Operator | ความหมาย |
|---|---|
not |
ค่าตรงกันข้าม |
and |
เป็นจริง ถ้าค่าทั้งสองเป็นจริง |
or |
เป็นจริง ถ้าอย่างน้อยค่าใดค่าหนึ่งเป็นจริง |
Note
ทบทวน: Logical Operators (Module 3)
การประเมินค่าทางตรรกะของ and, or, not
| A | B | A and B | A or B | not A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
แต่ละนิพจน์จะได้ True หรือ False?
การเขียน เงื่อนไข ก็เหมือนเลือกทางเดินให้โปรแกรม 🛣️

ภาพ: Fork in the road · Public Domain (CC0 1.0)
การสร้างทางเลือกด้วยเงื่อนไข


if อย่างง่ายที่สุด จะประเมินชุดคำสั่งที่เป็น conditionTrue จึงเข้าไปทำงานที่ statement แล้วทำงานต่อที่ next-statementFalse จะข้ามไปทำงานที่ next-statement ทันทีstatement ต้อง ย่อหน้าโปรแกรมคำนวณหา ค่าสัมบูรณ์ (Absolute value) ของจำนวนเต็ม (ห้ามใช้คำสั่ง abs())
คิดก่อน: ต้องตรวจเงื่อนไขใด แล้วทำอะไรเมื่อเงื่อนไขเป็นจริง?
ใช้ if ร่วมกับ in เพื่อทำงานเมื่อข้อมูลเป็นสมาชิกของ collection


condition เป็น True จะทำงานในทุก ๆ statement แล้วจึงไปทำงานที่ next-statementFalse จะข้ามไปทำงานที่ next-statementจากโจทย์ 4 — หากอินพุตน้อยกว่าศูนย์ ให้คำนวณค่าสัมบูรณ์ และเพิ่มค่าขึ้นไปอีก 10
\[\mathsf{number} = \begin{cases} \lvert \mathsf{number} \rvert + 10, & \text{if } \mathsf{number} < 0 \\ \mathsf{number}, & \text{if } \mathsf{number} \geq 0 \end{cases}\]
สองทางเลือก


condition เป็น True จะทำงาน statement 1, 2, …condition เป็น False จะทำงาน statement 3, 4, …next-statementโปรแกรมแปลงอุณหภูมิระหว่างเซลเซียสและฟาเรนไฮต์ ตามหน่วยที่ผู้ใช้เลือก
คิดก่อน: ถ้าผู้ใช้พิมพ์ "f" กับ "F" จะให้ผลเหมือนกันหรือไม่?
temp = float(input("Enter temperature: ")) # สมมติ 100
temp_type = input("Enter f (Fahrenheit) or c (Celsius): ") # สมมติ f
if temp_type == "f":
c = (5.0/9) * (temp - 32)
print(f"The equivalent Celsius temp is {c:.2f}")
else:
f = (9.0/5) * temp + 32
print(f"The equivalent Fahrenheit temp is {f:.2f}")
print('end-of-script')Note
มากกว่าสองทางเลือก


conditionelif (ย่อจาก else if) ในการตรวจสอบ condition ต่อ ๆ มา ทำให้สร้างทางเลือกได้มากกว่า 2 ทางelse ต้องอยู่สุดท้ายเท่านั้น และสามารถละไม่มี else ก็ได้จงเขียนโปรแกรมแสดงข้อความตามชั้นปีของนักศึกษา
FreshmanSophomoreJuniorSeniorSuperจงเขียนโปรแกรมแสดงข้อความตามชั้นปีของนักศึกษา
if-elif-else ทำงานเหมือน การกรองเป็นชั้น ๆ — ข้อมูลไหลผ่านลงมา ตรวจทีละชั้นจนกว่าจะถูก “ดัก” ไว้
else คือ ตาข่ายชั้นล่างสุด ที่รับทุกกรณีซึ่งไม่เข้าชั้นใดด้านบนTip
ถ้าเขียน if แยกหลายอัน โปรแกรมจะตรวจ ทุกเงื่อนไข; แต่ if-elif-else จะ หยุดทันที ที่เจอเงื่อนไขจริง — สื่อความหมาย “เลือกทางเดียว” และทำงานน้อยขั้นกว่า
if แยกกัน vs if-elif: ต่างกันมาก!score = 85 — เขียนต่างกันนิดเดียว แต่ผลลัพธ์ grade ต่างกัน!
if แยก 3 อัน — ตรวจครบทุกอัน
ตรวจครบ 3 อัน → ทับค่าจนเหลือ 'C' (ผิด!)
if-elif-else — หยุดที่เจอตัวแรก
เจอ ≥80 ก่อน → 'A' แล้ว ข้ามที่เหลือ (ถูก!)
Important
if แยกกัน = ตรวจ ทุกเงื่อนไข (อาจทำหลายอัน/ทับค่า) · if-elif = หยุดทันทีที่เจอจริง → เลือกทางเดียว
เงื่อนไขซ้อนเงื่อนไข


if ซ้อนกันหลายชั้น เพื่อแสดงการกระทำแบบเงื่อนไขซ้อนเป็นชั้น ๆif, if-else, หรือ if-elif-else ที่อยู่ภายใน เป็น 1 statementรับเลขจำนวนเต็ม 2 จำนวน (คั่นด้วยช่องว่าง) แล้วตรวจสอบว่า
0-910-99คิดก่อน: ต้องใช้ if ซ้อนกันกี่ชั้น เพื่อครอบคลุมทุกกรณี?
Note
print("Check if num1 is in [0-9] and num2 is in [10-99].")
num1, num2 = input("num1 and num2: ").split() # สมมติป้อน 5 42
num1 = int(num1); num2 = int(num2)
if num1 >= 0 and num1 <= 9:
if num2 >= 10 and num2 <= 99:
print("Both numbers are entered correctly.")
else:
print("Only num1 is entered correctly.")
else:
if num2 >= 10 and num2 <= 99:
print("Only num2 is entered correctly.")
else:
print("Both numbers are NOT entered correctly.")วิเคราะห์รหัสนักศึกษา CMU: คำนวณชั้นปีจาก 630610xxx (ปกติ) หรือ 630615xxx (อินเตอร์)
คิดก่อน: ต้องใช้ if กี่ที่ดี ใช้ elif หรือ else ด้วยไหม?
คิดก่อน: การ slice string เช่น id[0:2], id[2:4], id[4:6] ดึงข้อมูลส่วนใดบ้าง?
id = '630610123' — ใช้ slice แยกส่วนต่าง ๆ ของรหัสออกมา (แต่ละส่วนคือ substring)
id = input('Enter CMU student id: ') # สมมติป้อน 630610123
invalid_id = False
year = 69 - int(id[0:2])
if year > 0 and year <= 8:
if id[2:4] == "06":
if id[4:6] == "10":
program = "Engineering"
elif id[4:6] == "15":
program = "international Engineering"
else:
invalid_id = True
else:
invalid_id = True
if invalid_id:
print('Your student ID is NOT valid.')
else:
print(f'You are a {year}-year student of {program} program.')Flowchart
เงื่อนไข (Condition)
< > <= >= == !=and or notin / not in — membership testคำสั่งสร้างทางเลือก
if — ทำเมื่อเงื่อนไขจริงif-else — สองทางเลือกif-elif-else — มากกว่าสองทางเลือกTip
อาศัยการย่อหน้า (Indent) กำหนดขอบเขตของ Compound Statement
จงหาค่าความจริงของนิพจน์ต่อไปนี้ (True / False) เมื่อ
คิดก่อน: ลองคำนวณในใจก่อน แล้วตรวจคำตอบใน Live Code
Note
🏠 259201 — Module 5 | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่