EP03: ตัวดำเนินการ นิพจน์ และการแสดงผลข้อมูลใน Python

  1. ตัวดำเนินการใน 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
      • ชี้ให้เห็นประโยชน์ในแง่ความกระชับของโค้ด
  2. นิพจน์ (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)
      • ลำดับโดยทั่วไป (จากสำคัญที่สุดไปน้อยที่สุด):
        1. () (วงเล็บ – Parentheses): มีความสำคัญสูงสุด การดำเนินการภายในวงเล็บจะถูกทำก่อนเสมอ
        2. ** (การยกกำลัง – Exponentiation)
        3. * (การคูณ – Multiplication), / (การหาร – Division), // (การหารปัดเศษทิ้ง – Floor Division), % (การหารเอาเศษ – Modulus): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา
        4. + (การบวก – Addition), - (การลบ – Subtraction): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา
        • (ตัวดำเนินการเปรียบเทียบและตรรกะจะมีการจัดลำดับในภายหลัง แต่ในขั้นนี้เน้นที่ตัวดำเนินการทางคณิตศาสตร์)
      • เน้นความสำคัญของการใช้วงเล็บ ():
        • เพื่อบังคับลำดับการประมวลผลให้เป็นไปตามต้องการ (เช่น (5 + 3) * 2 จะให้ผลลัพธ์ต่างจาก 5 + 3 * 2)
        • เพื่อทำให้นิพจน์ที่ซับซ้อนอ่านและเข้าใจได้ง่ายขึ้น แม้ว่าวงเล็บนั้นอาจจะไม่จำเป็นตามกฎลำดับความสำคัญก็ตาม
  3. ตัวดำเนินการใน 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 (แนะนำให้ใช้วงเล็บเพื่อความชัดเจน)
  4. การรับข้อมูล (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("กรุณาป้อนอายุของคุณ: ")) เพื่อรับค่าและแปลงชนิดข้อมูลในบรรทัดเดียว

  1. การฝึกใช้ตัวดำเนินการทางคณิตศาสตร์และตัวดำเนินการกำหนดค่า
    • กิจกรรม:
      • การคำนวณพื้นฐาน: ให้ผู้เรียนเขียนโปรแกรมสั้นๆ เพื่อ:
        • กำหนดค่าตัวแปรตัวเลข 2 ตัว (เช่น num1 = 15, num2 = 4)
        • คำนวณและแสดงผล: ผลบวก, ผลต่าง, ผลคูณ, ผลหาร (/), ผลหารปัดเศษทิ้ง (//), และเศษเหลือจากการหาร (%) ของตัวแปรทั้งสอง
      • การประยุกต์ใช้ // และ %:
        • โจทย์: กำหนดจำนวนวินาทีทั้งหมด (เช่น total_seconds = 125) ให้คำนวณและแสดงผลเป็นจำนวนนาทีเต็มและจำนวนวินาทีที่เหลือ (เช่น “125 วินาที คือ 2 นาที กับ 5 วินาที”)
        • โจทย์: กำหนดตัวเลขหนึ่งจำนวน ให้ตรวจสอบว่าเป็นเลขคู่หรือเลขคี่โดยใช้ %
      • การยกกำลัง: คำนวณและแสดงผล 53
      • การใช้ตัวดำเนินการกำหนดค่าแบบย่อ:
        • เริ่มต้นตัวแปร counter = 0 จากนั้นใช้ += เพื่อเพิ่มค่าทีละ 1 หลายๆ ครั้ง และพิมพ์ค่า counter ทุกครั้งที่เปลี่ยนแปลง
        • เริ่มต้น balance = 1000 สมมติว่าได้ดอกเบี้ย 10% ให้ใช้ *= เพื่อคำนวณยอดเงินใหม่ (balance *= 1.10)
  2. การทำงานกับนิพจน์และลำดับความสำคัญของตัวดำเนินการ
    • กิจกรรม:
      • คาดการณ์และตรวจสอบผลลัพธ์:
        • ให้ผู้เรียนดูนิพจน์ที่มีตัวดำเนินการผสมกันหลายตัว (เช่น 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น้ำหนัก(กิโลกรัม)​ (กำหนดค่า น้ำหนัก และ ส่วนสูง ในโปรแกรม)
  3. การฝึกใช้ตัวดำเนินการเปรียบเทียบและตัวดำเนินการตรรกะ
    • กิจกรรม:
      • การเปรียบเทียบ:
        • กำหนดตัวแปรเก็บค่าต่างๆ เช่น 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}")
  4. การรับข้อมูลด้วยฟังก์ชัน 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}")
      • แบบฝึกหัดประยุกต์: เขียนโปรแกรมรับข้อมูลที่จำเป็นเพื่อคำนวณพื้นที่สี่เหลี่ยมผืนผ้า (กว้าง, ยาว) จากผู้ใช้ แล้วแสดงผลพื้นที่
  5. การแสดงผลข้อมูลด้วยฟังก์ชัน 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 (เช่น ชื่อสินค้า, จำนวน, ราคาต่อชิ้น, ราคารวมของรายการนี้)