EP03: ตัวดำเนินการ นิพจน์ และการแสดงผลข้อมูลใน Python
- ตัวดำเนินการใน Python (Operators in Python) – ส่วนที่ 1
- ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operators): ➕➖✖️➗
- ใช้สำหรับการคำนวณทางคณิตศาสตร์
+ (การบวก – Addition): นำค่าสองค่ามาบวกกัน เช่น 5 + 3 ได้ผลลัพธ์เป็น 8
- (การลบ – Subtraction): นำค่าแรกมาลบด้วยค่าที่สอง เช่น 10 - 4 ได้ผลลัพธ์เป็น 6
* (การคูณ – Multiplication): นำค่าสองค่ามาคูณกัน เช่น 7 * 3 ได้ผลลัพธ์เป็น 21
/ (การหาร – Division): นำค่าแรกมาหารด้วยค่าที่สอง ผลลัพธ์ที่ได้จะเป็นชนิดทศนิยม (float) เสมอ เช่น 10 / 3 ได้ 3.333..., 10 / 2 ได้ 5.0
// (การหารปัดเศษทิ้ง – Floor Division): นำค่าแรกมาหารด้วยค่าที่สอง และปัดเศษทิ้งให้เหลือแต่ส่วนที่เป็นจำนวนเต็ม (ปัดลงเสมอ) เช่น 10 // 3 ได้ 3, 9 // 2 ได้ 4, -7 // 2 ได้ -4
% (การหารเอาเศษ – Modulus): ให้ผลลัพธ์เป็นเศษเหลือจากการหาร เช่น 10 % 3 ได้ 1 (10 หาร 3 ได้ 3 ครั้ง เหลือเศษ 1), 9 % 2 ได้ 1 (มีประโยชน์ในการตรวจสอบเลขคู่/คี่)
** (การยกกำลัง – Exponentiation): นำค่าแรกไปยกกำลังด้วยค่าที่สอง เช่น 2 ** 3 หมายถึง 23 ได้ผลลัพธ์เป็น 8
- ตัวดำเนินการกำหนดค่า (Assignment Operators): ➡️
- ใช้สำหรับกำหนดค่าให้กับตัวแปร
= (กำหนดค่าพื้นฐาน – Basic Assignment): กำหนดค่าทางขวาให้กับตัวแปรทางซ้าย เช่น x = 10, name = "Python"
- ตัวดำเนินการกำหนดค่าแบบย่อ (Augmented Assignment Operators): เป็นการรวมการดำเนินการทางคณิตศาสตร์กับการกำหนดค่าเข้าด้วยกัน ทำให้โค้ดสั้นลง
+= (บวกแล้วกำหนดค่า): x += 5 มีความหมายเดียวกับ x = x + 5
-= (ลบแล้วกำหนดค่า): x -= 3 มีความหมายเดียวกับ x = x - 3
*= (คูณแล้วกำหนดค่า): x *= 2 มีความหมายเดียวกับ x = x * 2
/= (หารแล้วกำหนดค่า): x /= 4 มีความหมายเดียวกับ x = x / 4
//= (หารปัดเศษทิ้งแล้วกำหนดค่า): x //= 3 มีความหมายเดียวกับ x = x // 3
%= (หารเอาเศษแล้วกำหนดค่า): x %= 2 มีความหมายเดียวกับ x = x % 2
**= (ยกกำลังแล้วกำหนดค่า): x **= 3 มีความหมายเดียวกับ x = x ** 3
- ชี้ให้เห็นประโยชน์ในแง่ความกระชับของโค้ด
- นิพจน์ (Expressions) และลำดับความสำคัญของตัวดำเนินการ (Operator Precedence)
- นิพจน์ (Expression):
- นิยาม: การรวมกันของ ค่าข้อมูล (เช่น
5, "Hello"), ตัวแปร (เช่น age, price), และ ตัวดำเนินการ (เช่น +, *, >) ที่ Python สามารถประเมินค่า (evaluate) เพื่อให้ได้ผลลัพธ์เป็นค่าใหม่ค่าหนึ่ง
- ตัวอย่างที่หลากหลาย:
5 + 3 (ได้ผลลัพธ์เป็น 8), width * height, (score1 + score2) / 2, age >= 18 (ได้ผลลัพธ์เป็น True หรือ False)
- ลำดับความสำคัญของตัวดำเนินการ (Operator Precedence):
- Python มีกฎเกณฑ์ในการกำหนดว่าตัวดำเนินการใดจะถูกประมวลผลก่อนในนิพจน์ที่มีตัวดำเนินการหลายตัว คล้ายกับกฎทางคณิตศาสตร์ (เช่น PEMDAS/BODMAS)
- ลำดับโดยทั่วไป (จากสำคัญที่สุดไปน้อยที่สุด):
() (วงเล็บ – Parentheses): มีความสำคัญสูงสุด การดำเนินการภายในวงเล็บจะถูกทำก่อนเสมอ** (การยกกำลัง – Exponentiation)* (การคูณ – Multiplication), / (การหาร – Division), // (การหารปัดเศษทิ้ง – Floor Division), % (การหารเอาเศษ – Modulus): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา+ (การบวก – Addition), - (การลบ – Subtraction): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา
- (ตัวดำเนินการเปรียบเทียบและตรรกะจะมีการจัดลำดับในภายหลัง แต่ในขั้นนี้เน้นที่ตัวดำเนินการทางคณิตศาสตร์)
- เน้นความสำคัญของการใช้วงเล็บ
():
- เพื่อบังคับลำดับการประมวลผลให้เป็นไปตามต้องการ (เช่น
(5 + 3) * 2 จะให้ผลลัพธ์ต่างจาก 5 + 3 * 2)
- เพื่อทำให้นิพจน์ที่ซับซ้อนอ่านและเข้าใจได้ง่ายขึ้น แม้ว่าวงเล็บนั้นอาจจะไม่จำเป็นตามกฎลำดับความสำคัญก็ตาม
- ตัวดำเนินการใน Python (Operators in Python) – ส่วนที่ 2
- ตัวดำเนินการเปรียบเทียบ (Comparison Operators): 🤔
- ใช้สำหรับเปรียบเทียบค่าสองค่า และผลลัพธ์ที่ได้จากการเปรียบเทียบจะเป็นค่าความจริง (Boolean) คือ
True (จริง) หรือ False (เท็จ) เสมอ
== (เท่ากับ – Equal to): คืนค่า True ถ้าค่าทั้งสองข้างเท่ากัน เช่น 5 == 5 (เป็น True), 5 == 3 (เป็น False)
!= (ไม่เท่ากับ – Not equal to): คืนค่า True ถ้าค่าทั้งสองข้างไม่เท่ากัน เช่น 5 != 3 (เป็น True), 5 != 5 (เป็น False)
> (มากกว่า – Greater than): เช่น 10 > 5 (เป็น True)
< (น้อยกว่า – Less than): เช่น 5 < 10 (เป็น True)
>= (มากกว่าหรือเท่ากับ – Greater than or equal to): เช่น 10 >= 10 (เป็น True), 10 >= 5 (เป็น True)
<= (น้อยกว่าหรือเท่ากับ – Less than or equal to): เช่น 5 <= 5 (เป็น True), 5 <= 10 (เป็น True)
- ยกตัวอย่างการเปรียบเทียบข้อมูลต่างชนิดที่เหมาะสม (เช่น
5 == 5.0 ให้ผลเป็น True)
- ตัวดำเนินการตรรกะ (Logical Operators): 💡
- ใช้สำหรับเชื่อมโยงหรือปรับเปลี่ยนนิพจน์ที่เป็นค่าความจริง (Boolean expressions)
and (และ): ให้ผลลัพธ์เป็น True ก็ต่อเมื่อนิพจน์ (หรือค่า) ทั้งสองข้างเป็น True ทั้งคู่ กรณีอื่นๆ จะให้ผลลัพธ์เป็น False
- ตารางค่าความจริง (Truth Table):
True and True -> True
True and False -> False
False and True -> False
False and False-> False
or (หรือ): ให้ผลลัพธ์เป็น True ถ้ามีนิพจน์ (หรือค่า) ข้างใดข้างหนึ่ง (หรือทั้งสองข้าง) เป็น True จะให้ผลลัพธ์เป็น False ก็ต่อเมื่อทั้งสองข้างเป็น False ทั้งคู่
- ตารางค่าความจริง:
True or True -> True
True or False -> True
False or True -> True
False or False-> False
not (นิเสธ – Negation): ใช้กลับค่าความจริงของนิพจน์ (หรือค่า) ที่ตามหลัง
not True -> False
not False -> True
- ยกตัวอย่างการใช้งาน:
(age > 18) and (has_license == True), is_weekend or is_holiday, not is_raining
- อาจกล่าวถึงลำดับความสำคัญของตัวดำเนินการตรรกะสั้นๆ:
not จะถูกประมวลผลก่อน, ตามด้วย and, และสุดท้ายคือ or (แนะนำให้ใช้วงเล็บเพื่อความชัดเจน)
- การรับข้อมูล (Input) และการแสดงผลข้อมูล (Output) เบื้องต้น
- ความจำเป็นที่โปรแกรมจะต้องสามารถโต้ตอบกับผู้ใช้ได้ เพื่อรับข้อมูลนำเข้า (input) และแสดงผลลัพธ์หรือข้อมูลป้อนกลับ (output)
- การแสดงผลข้อมูล (Output): ฟังก์ชัน
print()
- ทบทวนการใช้งานพื้นฐาน:
print("ข้อความที่ต้องการแสดง"), print(ชื่อตัวแปร)
- การแสดงผลหลายรายการในคำสั่ง
print() เดียวกัน (จะถูกคั่นด้วยช่องว่างโดยอัตโนมัติ): print("ชื่อ:", name, "อายุ:", age)
- อาร์กิวเมนต์
sep เพื่อเปลี่ยนตัวคั่นระหว่างรายการ: print("Hello", "World", sep="-") ผลลัพธ์คือ Hello-World
- อาร์กิวเมนต์
end เพื่อเปลี่ยนสิ่งที่พิมพ์ต่อท้าย (ปกติคือการขึ้นบรรทัดใหม่ \n): print("Hello", end=" "); print("World") ผลลัพธ์คือ Hello World ในบรรทัดเดียว
- f-strings (Formatted String Literals): เน้นย้ำว่าเป็นวิธีที่ทันสมัยและแนะนำให้ใช้ เพื่อการจัดรูปแบบข้อความที่ง่ายและอ่านสะดวก
- ไวยากรณ์:
f"ข้อความ {ชื่อตัวแปร} ข้อความ {นิพจน์}"
- ตัวอย่าง:
name = "Alice"; age = 30; print(f"ฉันชื่อ {name} และฉันอายุ {age} ปี")
- สามารถใส่นิพจน์เข้าไปใน
{} ได้โดยตรง: print(f"ผลรวมของ 5 และ 3 คือ {5+3}")
- การจัดรูปแบบเบื้องต้น (อาจสอนเพิ่มเติมในอนาคต):
print(f"ราคา: {price:.2f}") (จัดรูปแบบตัวแปร price ให้แสดงทศนิยม 2 ตำแหน่ง)
- การรับข้อมูล (Input): ฟังก์ชัน
input()
- หน้าที่: รับข้อมูลที่ผู้ใช้พิมพ์ผ่านคีย์บอร์ด
- ไวยากรณ์:
ชื่อตัวแปรสำหรับเก็บข้อมูล = input("ข้อความแจ้งให้ผู้ใช้ป้อนข้อมูล (prompt): ")
- โปรแกรมจะหยุดรอจนกว่าผู้ใช้จะพิมพ์ข้อมูลแล้วกดปุ่ม Enter
- “ข้อความแจ้งให้ผู้ใช้ป้อนข้อมูล (prompt)” จะแสดงบนหน้าจอเพื่อบอกผู้ใช้ว่าควรป้อนอะไร
- ข้อควรจำที่สำคัญมาก: ค่าที่ได้จากฟังก์ชัน
input() จะมีชนิดข้อมูลเป็น สตริง (str) เสมอ ไม่ว่าผู้ใช้จะพิมพ์ตัวเลขหรือข้อความเข้ามาก็ตาม
- ตัวอย่าง:
age_str = input("กรุณาป้อนอายุของคุณ: ") ถ้าผู้ใช้พิมพ์ 25 ตัวแปร age_str จะเก็บค่าสตริง "25" ไม่ใช่เลขจำนวนเต็ม 25
- การแปลงชนิดข้อมูล (Type Conversion/Casting) สำหรับข้อมูลนำเข้า:
- เป็น: เมื่อต้องการนำข้อมูลที่รับจาก
input() (ซึ่งเป็นสตริง) มาคำนวณทางคณิตศาสตร์ จะต้องแปลงให้เป็นชนิดข้อมูลตัวเลข (int หรือ float) ก่อน
- ฟังก์ชัน
int(ค่าสตริง): แปลงค่าสตริง (ที่แทนจำนวนเต็ม) ให้เป็นชนิดข้อมูลจำนวนเต็ม (int)
- ตัวอย่าง:
num_str = "100"; num_int = int(num_str)
- ถ้าสตริงไม่สามารถแปลงเป็นจำนวนเต็มได้ (เช่น
"hello" หรือ "3.14") จะเกิดข้อผิดพลาด ValueError
- ฟังก์ชัน
float(ค่าสตริง): แปลงค่าสตริง (ที่แทนจำนวนเต็มหรือเลขทศนิยม) ให้เป็นชนิดข้อมูลจำนวนจริง (float)
- ตัวอย่าง:
pi_str = "3.14"; pi_float = float(pi_str)
- ตัวอย่าง:
count_str = "5"; count_float = float(count_str) (ผลลัพธ์คือ 5.0)
- ถ้าสตริงไม่สามารถแปลงเป็นจำนวนจริงได้ (เช่น
"world") จะเกิดข้อผิดพลาด ValueError
- ฟังก์ชัน
str(ค่าตัวเลข): แปลงค่าตัวเลข (int หรือ float) ให้เป็นชนิดข้อมูลสตริง (str) (มีประโยชน์เมื่อต้องการนำตัวเลขไปต่อกับข้อความโดยไม่ใช้ f-strings แต่โดยทั่วไป f-strings จะสะดวกกว่า)
- ตัวอย่าง:
count = 10; message = "จำนวนสินค้าทั้งหมด: " + str(count)
- แสดงรูปแบบที่ใช้บ่อย:
age = int(input("กรุณาป้อนอายุของคุณ: ")) เพื่อรับค่าและแปลงชนิดข้อมูลในบรรทัดเดียว
- การฝึกใช้ตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการกำหนดค่า
- กิจกรรม:
- การคำนวณพื้นฐาน: ให้ผู้เรียนเขียนโปรแกรมสั้นๆ เพื่อ:
- กำหนดค่าตัวแปรตัวเลข 2 ตัว (เช่น
num1 = 15, num2 = 4)
- คำนวณและแสดงผล: ผลบวก, ผลต่าง, ผลคูณ, ผลหาร (
/), ผลหารปัดเศษทิ้ง (//), และเศษเหลือจากการหาร (%) ของตัวแปรทั้งสอง
- การประยุกต์ใช้
// และ %:
- โจทย์: กำหนดจำนวนวินาทีทั้งหมด (เช่น
total_seconds = 125) ให้คำนวณและแสดงผลเป็นจำนวนนาทีเต็มและจำนวนวินาทีที่เหลือ (เช่น “125 วินาที คือ 2 นาที กับ 5 วินาที”)
- โจทย์: กำหนดตัวเลขหนึ่งจำนวน ให้ตรวจสอบว่าเป็นเลขคู่หรือเลขคี่โดยใช้
%
- การยกกำลัง: คำนวณและแสดงผล 53
- การใช้ตัวดำเนินการกำหนดค่าแบบย่อ:
- เริ่มต้นตัวแปร
counter = 0 จากนั้นใช้ += เพื่อเพิ่มค่าทีละ 1 หลายๆ ครั้ง และพิมพ์ค่า counter ทุกครั้งที่เปลี่ยนแปลง
- เริ่มต้น
balance = 1000 สมมติว่าได้ดอกเบี้ย 10% ให้ใช้ *= เพื่อคำนวณยอดเงินใหม่ (balance *= 1.10)
- การทำงานกับนิพจน์และลำดับความสำคัญของตัวดำเนินการ
- กิจกรรม:
- คาดการณ์และตรวจสอบผลลัพธ์:
- ให้ผู้เรียนดูนิพจน์ที่มีตัวดำเนินการผสมกันหลายตัว (เช่น
result = 10 + 5 * 2 - 8 / 4 + 2**3)
- ให้คาดการณ์ผลลัพธ์ด้วยตนเองก่อน โดยคำนึงถึงลำดับความสำคัญของตัวดำเนินการ
- จากนั้นให้เขียนโปรแกรม Python เพื่อคำนวณและแสดงผลลัพธ์จริง เพื่อเปรียบเทียบ
- การใช้วงเล็บ:
- ให้นำนิพจน์เดิมมาทดลองใส่วงเล็บ
() ในตำแหน่งต่างๆ เพื่อเปลี่ยนลำดับการทำงาน และสังเกตผลลัพธ์ที่เปลี่ยนแปลงไป
- การเขียนโปรแกรมตามสูตร (ประยุกต์):
- คำนวณพื้นที่สามเหลี่ยม: Area=0.5×base×height (กำหนดค่า
base และ height เป็นตัวแปร)
- แปลงอุณหภูมิ: รับค่าอุณหภูมิเป็นเซลเซียส (C) แล้วแปลงเป็นฟาเรนไฮต์ (F=(C×9/5)+32) (ในส่วนนี้อาจจะยังไม่ได้รับค่าจาก
input() แต่กำหนดค่า C ในโปรแกรมก่อน)
- คำนวณดัชนีมวลกาย (BMI): BMI=ส่วนสูง(เมตร)2น้ำหนัก(กิโลกรัม) (กำหนดค่า น้ำหนัก และ ส่วนสูง ในโปรแกรม)
- การฝึกใช้ตัวดำเนินการเปรียบเทียบและตัวดำเนินการตรรกะ
- กิจกรรม:
- การเปรียบเทียบ:
- กำหนดตัวแปรเก็บค่าต่างๆ เช่น
my_age = 20, voting_age = 18, friend_age = 20, score = 75
- ให้ผู้เรียนเขียนคำสั่ง
print() เพื่อแสดงผลลัพธ์ (True/False) ของการเปรียบเทียบต่างๆ เช่น:
print(f"ฉันอายุถึงเกณฑ์เลือกตั้งหรือไม่? {my_age >= voting_age}")
print(f"อายุของฉันกับเพื่อนต่างกันหรือไม่? {my_age != friend_age}")
print(f"คะแนนของฉันมากกว่า 50 หรือไม่? {score > 50}")
- การใช้ตัวดำเนินการตรรกะ:
- กำหนดตัวแปรเพิ่มเติม เช่น
has_id_card = True, is_member = False, purchase_amount = 1200
- ให้ผู้เรียนเขียนนิพจน์ที่ใช้
and, or, not เพื่อตรวจสอบเงื่อนไขซับซ้อน และพิมพ์ผลลัพธ์:
can_enter = (my_age >= 18) and has_id_card
get_discount = is_member or (purchase_amount > 1000)
is_not_member = not is_member
print(f"สามารถเข้างานได้: {can_enter}")
print(f"ได้รับส่วนลด: {get_discount}")
print(f"ไม่ได้เป็นสมาชิก: {is_not_member}")
- การรับข้อมูลด้วยฟังก์ชัน
input() และการแปลงชนิดข้อมูล
- กิจกรรม:
- รับชื่อและทักทาย:
user_name = input("กรุณาป้อนชื่อของคุณ: ")
print(f"สวัสดีครับ/ค่ะ, คุณ {user_name}!")
- รับอายุและสังเกตชนิดข้อมูล (พร้อมแสดงปัญหา):
age_str = input("กรุณาป้อนอายุของคุณ (เป็นตัวเลข): ")
print(f"ข้อมูลที่รับมาคือ '{age_str}' และมีชนิดข้อมูลคือ {type(age_str)}")
# ลองนำไปคำนวณ: future_age = age_str + 5 # จะเกิด TypeError!
# print(f"อีก 5 ปี คุณจะอายุ {future_age} ปี") # แสดงให้เห็น Error
- แก้ไขด้วยการแปลงชนิดข้อมูล:
age_int = int(age_str)
future_age_corrected = age_int + 5
print(f"อีก 5 ปี คุณจะอายุ {future_age_corrected} ปี (คำนวณถูกต้องแล้ว)")
- โปรแกรมรับตัวเลขสองจำนวนมาบวกกัน:
num1_str = input("ป้อนตัวเลขที่หนึ่ง: ")
num2_str = input("ป้อนตัวเลขที่สอง: ")
num1_float = float(num1_str) # สมมติว่าอาจเป็นทศนิยม
num2_float = float(num2_str)
sum_result = num1_float + num2_float
print(f"ผลรวมของ {num1_float} และ {num2_float} คือ {sum_result}")
- แบบฝึกหัดประยุกต์: เขียนโปรแกรมรับข้อมูลที่จำเป็นเพื่อคำนวณพื้นที่สี่เหลี่ยมผืนผ้า (กว้าง, ยาว) จากผู้ใช้ แล้วแสดงผลพื้นที่
- การแสดงผลข้อมูลด้วยฟังก์ชัน
print() อย่างมีประสิทธิภาพ
- กิจกรรม:
- ทบทวนและฝึกใช้ f-strings:
- นำโปรแกรมที่เขียนในกิจกรรมก่อนหน้า (เช่น คำนวณพื้นที่, แปลงอุณหภูมิ, ข้อมูลนักศึกษา) มาปรับปรุงการแสดงผลโดยใช้ f-strings ทั้งหมด
- ให้ผู้เรียนทดลองใส่ตัวแปรและนิพจน์ง่ายๆ เข้าไปใน f-strings
- การจัดรูปแบบตัวเลขทศนิยมใน f-strings:
average_score = 78.56789
print(f"คะแนนเฉลี่ยของคุณคือ: {average_score:.2f}") (แสดงผลทศนิยม 2 ตำแหน่ง)
product_price = 1250.759
print(f"ราคาสินค้า: {product_price:,.2f} บาท") (แสดงผลทศนิยม 2 ตำแหน่ง พร้อมเครื่องหมายจุลภาคคั่นหลักพัน)
- โครงงานย่อย (Mini-Project): โปรแกรมคำนวณค่าสินค้าอย่างง่าย
- ให้ผู้ใช้ป้อนชื่อสินค้า 1 ชนิด
- ให้ผู้ใช้ป้อนราคาต่อชิ้นของสินค้านั้น
- ให้ผู้ใช้ป้อนจำนวนชิ้นที่ซื้อ
- คำนวณราคารวม (ราคาต่อชิ้น * จำนวนชิ้น)
- แสดงผลสรุปรายการสั่งซื้อให้สวยงาม โดยใช้ f-strings (เช่น ชื่อสินค้า, จำนวน, ราคาต่อชิ้น, ราคารวมของรายการนี้)