ข้อสอบวัดผลปลายภาค Python

120 นาที
30 คะแนน
6 ข้อ
สรุปเนื้อหาทั้งหมด

ข้อ 1: เครื่องคำนวณแคลอรี่

3 คะแนน ง่าย สุขภาพ
เขียนโปรแกรมรับเป้าหมายแคลอรี่ต่อวัน และแคลอรี่ของอาหาร 3 มื้อ (เช้า, กลางวัน, เย็น) แล้วคำนวณผลรวมพร้อมประเมินผล

สิ่งที่ต้องทำ:

  • รับค่าเป้าหมายแคลอรี่ (จำนวนเต็ม)
  • รับค่าแคลอรี่มื้อเช้า, กลางวัน, และเย็น (จำนวนเต็ม)
  • คำนวณแคลอรี่รวมของทั้ง 3 มื้อ
  • เปรียบเทียบผลรวมกับเป้าหมาย และแสดงผลว่า "ทำได้ตามเป้าหมาย", "เกินเป้าหมาย", หรือ "ต่ำกว่าเป้าหมาย"
  • ตั้งชื่อไฟล์ว่า final1.py

ตัวอย่างหลัก

Input:
2000
500
700
800
Output:
แคลอรี่รวม: 2000 kcal
ผลลัพธ์: ทำได้ตามเป้าหมาย

Test Cases เพิ่มเติม

Input:
1800
650
800
550
Output:
แคลอรี่รวม: 2000 kcal
ผลลัพธ์: เกินเป้าหมาย
Input:
2200
700
900
500
Output:
แคลอรี่รวม: 2100 kcal
ผลลัพธ์: ต่ำกว่าเป้าหมาย

แนวคิดในการแก้ปัญหา

  1. การรับข้อมูล (Sequential): ใช้ `input()` 4 ครั้งเพื่อรับค่าทั้งหมด และแปลงเป็น `int()`
  2. การประมวลผล (Sequential): สร้างตัวแปรเพื่อเก็บผลรวมของแคลอรี่ 3 มื้อ
  3. การตัดสินใจ (Conditional): ใช้โครงสร้าง `if/elif/else` เพื่อเปรียบเทียบค่าผลรวมกับค่าเป้าหมาย
    • ถ้า `total == goal` ...
    • ถ้า `total > goal` ...
    • นอกเหนือจากนั้น ...

ข้อ 2: ระบบ ATM เบื้องต้น

4 คะแนน ปานกลาง การเงิน
เขียนโปรแกรมจำลองการทำงานของตู้ ATM แบบง่าย โดยมีฟังก์ชันฝาก, ถอน, และตรวจสอบยอดเงิน

สิ่งที่ต้องทำ:

  • กำหนดให้มียอดเงินเริ่มต้นที่ 10,000 บาท
  • รับ "ประเภทธุรกรรม" จากผู้ใช้ (deposit, withdraw, check)
  • **ถ้าเป็น deposit:** รับจำนวนเงินที่ต้องการฝากและอัปเดตยอดเงิน
  • **ถ้าเป็น withdraw:** รับจำนวนเงินที่ต้องการถอน และตรวจสอบว่ายอดเงินเพียงพอหรือไม่ ถ้าไม่พอให้แสดงข้อความเตือน
  • **ถ้าเป็น check:** ให้แสดงยอดเงินคงเหลือ
  • สุดท้าย ให้แสดงยอดเงินคงเหลือล่าสุดเสมอ (ยกเว้นกรณีถอนเงินไม่สำเร็จ)
  • ตั้งชื่อไฟล์ว่า final2.py

ตัวอย่างหลัก

Input:
withdraw
5000
Output:
ทำรายการถอนสำเร็จ
ยอดเงินคงเหลือ: 5000.00 บาท

Test Cases เพิ่มเติม

Input:
deposit
2500
Output:
ทำรายการฝากสำเร็จ
ยอดเงินคงเหลือ: 12500.00 บาท
Input:
withdraw
15000
Output:
ยอดเงินในบัญชีไม่เพียงพอ
Input:
check
Output:
ยอดเงินคงเหลือ: 10000.00 บาท

แนวคิดในการแก้ปัญหา

  1. กำหนดค่าเริ่มต้น (Sequential): สร้างตัวแปร `balance = 10000.0`
  2. รับประเภทธุรกรรม:** ใช้ `input()` เพื่อรับข้อความ "deposit", "withdraw", หรือ "check"
  3. สร้างเงื่อนไขหลัก (Conditional):** ใช้ `if/elif/else` เพื่อแยกการทำงานตามประเภทธุรกรรมที่รับมา
  4. เงื่อนไขซ้อน (Conditional):** ในบล็อกของ "withdraw" จะต้องมี `if` ซ้อนอีกชั้นเพื่อตรวจสอบว่า `amount <= balance` หรือไม่
  5. การอัปเดตค่า (Sequential):** ใช้ `balance = balance + amount` หรือ `balance = balance - amount` เพื่อเปลี่ยนแปลงค่า

ข้อ 3: พิมพ์รูปสามเหลี่ยมดาว

4 คะแนน ปานกลาง CS Fundamentals
เขียนโปรแกรมรับจำนวนเต็ม `height` แล้วพิมพ์รูปสามเหลี่ยมหน้าจั่วที่ประกอบด้วยเครื่องหมาย `*` ที่มีความสูงตามที่กำหนด

สิ่งที่ต้องทำ:

  • รับค่า `height` เป็นจำนวนเต็ม
  • ใช้ **Loop ซ้อน Loop (Nested Loops)** ในการสร้างรูปทรง
  • **Loop นอก** จะควบคุมจำนวนแถว (ความสูง)
  • **Loop ใน** จะควบคุมการพิมพ์เว้นวรรค (` `) และดาว (`*`) ในแต่ละแถว
  • ตั้งชื่อไฟล์ว่า final3.py

ตัวอย่างหลัก

Input:
                                    5
                                    Output:
                                    *
                                    ***
                                    *****
                                    *******
                                    *********

Test Cases เพิ่มเติม

Input: 3
Output:
  *
 ***
*****
Input: 1
Output:
*

แนวคิดในการแก้ปัญหา

  1. Loop นอก (ควบคุมแถว): สร้าง `for` loop ที่วนซ้ำตั้งแต่ 1 ถึง `height` (เช่น `for i in range(1, height + 1):`)
  2. คำนวณส่วนประกอบในแถว: ในแต่ละแถว `i` จะมีจำนวนดาว `2*i - 1` ดวง และมีเว้นวรรคข้างหน้า `height - i` ตัว
  3. Loop ใน (ควบคุมการพิมพ์):** สามารถใช้ Loop ซ้อนกันเพื่อพิมพ์เว้นวรรคและดาวตามจำนวนที่คำนวณได้ หรือใช้วิธีที่ง่ายกว่าคือการคูณสตริง เช่น `spaces = " " * (height - i)` และ `stars = "*" * (2*i - 1)`
  4. รวมและพิมพ์:** นำสตริง `spaces` และ `stars` มาต่อกันแล้วพิมพ์ออกมาในแต่ละรอบของ Loop นอก

ข้อ 4: โปรแกรมวิเคราะห์คะแนน

5 คะแนน ยาก สถิติ
เขียนโปรแกรมรับจำนวนนักเรียน N คน, รับคะแนนสอบของแต่ละคน, จากนั้นหาคะแนนสูงสุด, ต่ำสุด, ค่าเฉลี่ย, และจำนวนนักเรียนที่สอบผ่าน (คะแนน >= 50)

สิ่งที่ต้องทำ:

  • รับจำนวนนักเรียน `n`
  • ใช้ `for` loop เพื่อรับคะแนนของนักเรียน `n` คน และเก็บไว้ใน List
  • **ใช้ Loop อีกครั้ง (หรือทำไปพร้อมกัน):** เพื่อหาค่าต่างๆ
    • หาผลรวมของคะแนนทั้งหมด (เพื่อใช้คำนวณค่าเฉลี่ย)
    • หาคะแนนสูงสุดและต่ำสุด
    • นับจำนวนคนที่ได้คะแนนตั้งแต่ 50 ขึ้นไป
  • แสดงผลลัพธ์ทั้งหมด
  • ตั้งชื่อไฟล์ว่า final4.py

ตัวอย่างหลัก

Input:
                                    5
                                    75
                                    45
                                    88
                                    92
                                    49
                                    Output:
                                    คะแนนสูงสุด: 92
                                    คะแนนต่ำสุด: 45
                                    ค่าเฉลี่ย: 69.80
                                    จำนวนผู้สอบผ่าน: 3

แนวคิดในการแก้ปัญหา

  1. การรับข้อมูล (Loop): สร้าง list ว่างๆ ขึ้นมาก่อน จากนั้นใช้ `for` loop ที่วนซ้ำ `n` ครั้ง เพื่อรับคะแนนและ `append` เข้าไปใน list
  2. การเตรียมตัวแปร (Sequential): สร้างตัวแปรสำหรับเก็บค่าต่างๆ เช่น `total_score = 0`, `pass_count = 0`, และตั้งค่า `max_score` และ `min_score` เป็นคะแนนของคนแรกใน list
  3. การประมวลผล (Loop + Conditional):** สร้าง `for` loop อันที่สองเพื่อวนใน list ของคะแนน
    • บวกคะแนนเข้า `total_score`
    • ใช้ `if` เพื่อเปรียบเทียบหา `max_score` และ `min_score` ใหม่
    • ใช้ `if` เพื่อตรวจสอบว่าคะแนนผ่านเกณฑ์หรือไม่ แล้วเพิ่มค่า `pass_count`
  4. การคำนวณสุดท้าย (Sequential):** คำนวณค่าเฉลี่ยจาก `total_score / n`
  5. ทางลัด:** คุณสามารถใช้ฟังก์ชันสำเร็จรูปอย่าง `sum()`, `max()`, `min()` กับ list เพื่อให้โค้ดสั้นลงได้

ข้อ 5: เกมทายตัวเลข

5 คะแนน ยาก ตรรกะ
เขียนโปรแกรมเกมทายตัวเลข โดยโปรแกรมจะสุ่มตัวเลข 1-100 ขึ้นมาหนึ่งตัว แล้วให้ผู้ใช้ทายไปเรื่อยๆ พร้อมบอกใบ้ว่า "มากกว่า" หรือ "น้อยกว่า" จนกว่าจะทายถูก

สิ่งที่ต้องทำ:

  • ใช้ `import random` และ `random.randint(1, 100)` เพื่อสุ่มตัวเลขคำตอบ
  • ใช้ `while True` loop เพื่อสร้างเกมที่เล่นไปได้เรื่อยๆ จนกว่าจะทายถูก
  • ใน loop: รับค่าการทายจากผู้ใช้
  • ใช้ `if/elif/else` เพื่อเปรียบเทียบค่าที่ทายกับคำตอบ:
    • ถ้าทายถูก: แสดงความยินดีและใช้ `break` เพื่อจบเกม
    • ถ้าทายผิด: บอกใบ้ว่า "น้อยไป" หรือ "มากไป"
  • เพิ่มตัวแปรนับจำนวนครั้งที่ทาย และแสดงผลเมื่อจบเกม
  • ตั้งชื่อไฟล์ว่า final5.py

ตัวอย่างการเล่น (สมมติตัวเลขที่สุ่มได้คือ 42)

ทายตัวเลข 1-100: 50
มากไป! ลองอีกครั้ง
ทายตัวเลข 1-100: 25
น้อยไป! ลองอีกครั้ง
ทายตัวเลข 1-100: 40
น้อยไป! ลองอีกครั้ง
ทายตัวเลข 1-100: 42
ถูกต้อง! คุณทายถูกใน 4 ครั้ง

แนวคิดในการแก้ปัญหา

  1. การเตรียมการ (Sequential):** `import random`, สุ่มตัวเลขคำตอบ, สร้างตัวแปรนับจำนวนครั้ง `attempts = 0`
  2. Loop หลัก:** ใช้ `while True:` เพื่อให้โปรแกรมทำงานไปเรื่อยๆ จนกว่าเราจะสั่งหยุดด้วย `break`
  3. ภายใน Loop:**
    • เพิ่มค่า `attempts` ขึ้น 1
    • รับค่า `guess` จากผู้ใช้
    • **การเปรียบเทียบ (Conditional):** ใช้ `if guess == answer:`, `elif guess < answer:`, `else:` เพื่อตรวจสอบและให้คำใบ้
    • ในเงื่อนไขที่ทายถูก ให้ `print()` ข้อความแสดงความยินดีแล้วตามด้วย `break` เพื่อออกจาก `while` loop

ข้อ 6: ระบบคิดเงินร้านค้า

5 คะแนน ยาก E-Commerce
เขียนโปรแกรมจำลองระบบคิดเงินในร้านค้า โดยรับรหัสสินค้าไปเรื่อยๆ จนกว่าผู้ใช้จะพิมพ์ "done", จากนั้นคำนวณยอดรวมและส่วนลด

สิ่งที่ต้องทำ:

  • กำหนดราคาสินค้า: A=20, B=40, C=50
  • ใช้ `while` loop เพื่อรับรหัสสินค้า (A, B, หรือ C) ไปเรื่อยๆ และบวกราคาเข้ายอดรวม
  • Loop จะสิ้นสุดเมื่อผู้ใช้ป้อนคำว่า "done"
  • หากผู้ใช้ป้อนรหัสที่ไม่ถูกต้อง ให้แสดงข้อความเตือนและข้ามไปรับรหัสใหม่
  • **เงื่อนไขส่วนลด:**
    • ถ้ายอดรวม > 200 บาท, ลด 10%
    • ถ้ายอดรวม > 100 บาท, ลด 5%
  • แสดงยอดรวมก่อนลด, ส่วนลด, และยอดสุทธิที่ต้องชำระ
  • ตั้งชื่อไฟล์ว่า final6.py

ตัวอย่างการใช้งาน

ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: A
ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: C
ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: B
ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: C
ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: D
รหัสสินค้าไม่ถูกต้อง
ป้อนรหัสสินค้า (A, B, C) หรือพิมพ์ 'done' เพื่อจบ: done

--- สรุปรายการ ---
ยอดรวม: 160.00 บาท
ส่วนลด 5%: 8.00 บาท
ยอดสุทธิ: 152.00 บาท

แนวคิดในการแก้ปัญหา

  1. เตรียมข้อมูล:** อาจใช้ `if/elif/else` หรือ Dictionary เพื่อเก็บราคาสินค้า สร้างตัวแปร `total = 0`
  2. Loop รับสินค้า:** ใช้ `while True:` และรับ `item_code` ใน loop. ตรวจสอบ `if item_code == 'done': break` เพื่อจบการทำงาน
  3. ตรวจสอบรหัส (Conditional):** ใน loop ใช้ `if/elif/else` เพื่อตรวจสอบรหัสสินค้า
    • ถ้า `item_code` คือ 'A', 'B', หรือ 'C' ให้บวกราคาเข้า `total`
    • ถ้าเป็นอย่างอื่น (`else`) ให้ `print` ข้อความเตือนแล้วใช้ `continue` เพื่อข้ามไปรอบถัดไป
  4. คำนวณส่วนลด (Conditional):** หลังจากออกจาก loop แล้ว ให้ใช้ `if/elif/else` เพื่อตรวจสอบ `total` และคำนวณส่วนลด
  5. แสดงผล:** พิมพ์สรุปยอดทั้งหมดออกมา

พื้นที่ทดลองเขียนโค้ด (Code Playground)