คำนวณน้ำหนักคนลงเรือ โดยใช้เงื่อนไข if-else และการวนแบบ while

 

โจทย์

เรือรับน้ำหนักคนลงเรือได้ไม่เกิน 1,000 กิโลกรัมให้นักเรียนออกแบบและเขียนโปรแกรมรับน้ำหนักคนลงเรือทีละคนแล้วตรวจสอบว่าน้ำหนักคนที่จะลงเรือร่วมกับคนที่อยู่ในเรือว่าเกินตามกำหนดหรือไม่

  • ถ้าไม่เกินแสดงข้อความว่า คุณสามารถลงเรือได้

  • แต่ถ้าน้ำหนักรวมเกินกำหนดแสดงข้อความว่า คุณไม่สามารถลงเรือได้

โปรแกรม

total_weight = 0
passengers = {}

while True:
    name = input("What is your name?")
    if not name:
        break
    weight = int(input("What is your weight?"))
    if total_weight + weight < 1000:
        passengers[name] = weight
        total_weight += weight
        print(f"Welcome {name}. You can board the ship.")
    else:
        print(f"Sorry {name}. You cannot board the ship.")
        break

print('All passengers are ', passengers)

คำอธิบายโปรแกรม

โปรแกรมนี้ทำงานตามขั้นตอนดังนี้

  1. สร้างตัวแปร total_weight เพื่อเก็บน้ำหนักรวมของผู้โดยสารทั้งหมด โดยเริ่มต้นที่ 0

  2. สร้างดิกชันนารี passengers เพื่อเก็บชื่อและน้ำหนักของผู้โดยสารแต่ละคน

  3. เริ่มลูป while True เพื่อรับข้อมูลผู้โดยสารไปเรื่อยๆ:

    • รับชื่อผู้โดยสารด้วยฟังก์ชัน input() และเก็บในตัวแปร name

    • ถ้าไม่มีการป้อนชื่อ (กด Enter โดยไม่ใส่ข้อมูล) จะออกจากลูปด้วยคำสั่ง break

    • รับน้ำหนักของผู้โดยสารด้วยฟังก์ชัน input() แปลงเป็นจำนวนเต็มด้วย int() และเก็บในตัวแปร weight

  4. ตรวจสอบว่าน้ำหนักรวมของผู้โดยสารทั้งหมด (total_weight) บวกกับน้ำหนักของผู้โดยสารคนใหม่ (weight) ไม่เกิน 1,000 กิโลกรัมหรือไม่:

    • ถ้าไม่เกิน:

      • เพิ่มชื่อและน้ำหนักของผู้โดยสารคนใหม่ลงในดิกชันนารี passengers

      • เพิ่มน้ำหนักของผู้โดยสารคนใหม่เข้าไปใน total_weight

      • แสดงข้อความต้อนรับผู้โดยสารคนใหม่

    • ถ้าเกิน:

      • แสดงข้อความว่าผู้โดยสารคนใหม่ไม่สามารถลงเรือได้

      • ออกจากลูปด้วยคำสั่ง break

  5. เมื่อออกจากลูป แสดงรายชื่อและน้ำหนักของผู้โดยสารทั้งหมดที่ลงเรือได้จากดิกชันนารี passengers

โปรแกรมนี้แสดงการใช้งานลูป while, การใช้เงื่อนไข if-else, การใช้ดิกชันนารี, และการใช้ f-string ในภาษาไพทอน เพื่อจำลองการรับผู้โดยสารลงเรือตามเงื่อนไขน้ำหนักที่กำหนด