บทความนี้จะพาคุณไปทำความเข้าใจว่า divmod() คืออะไร, ทำไมถึงมีประโยชน์, และวิธีการใช้งานในสถานการณ์ต่างๆ โดยเราจะอธิบายการใช้ // และ % แยกกัน เพื่อให้เห็นความแตกต่างที่ชัดเจน รวมถึงยกตัวอย่างการใช้งานจริง เช่น การแปลงวินาทีเป็นนาทีและวินาที หรือการคำนวณเงินทอนเป็นเหรียญต่าง ๆ อย่างเป็นระบบ
divmod() คืออะไร?
divmod() เป็นฟังก์ชัน Built-in ของ Python ที่รับอาร์กิวเมนต์สองตัว คือตัวตั้งหาร (x) และตัวหาร (y) และจะคืนค่าเป็น tuple ที่ประกอบด้วยสองค่า:
- ผลหารแบบจำนวนเต็ม (Quotient): หรือ x // y
เศษส่วน (Remainder): หรือ x % y
โค้ด: เลือกทั้งหมด
divmod(x, y)
โค้ด: เลือกทั้งหมด
result = divmod(10, 3)
print(result) # Output: (3, 1)
# นั่นคือ 10 หาร 3 ได้ 3 เหลือเศษ 1
ทำไมต้องใช้ divmod() แทน // และ % แยกกัน?
แม้ว่าคุณจะสามารถใช้ // และ % เพื่อให้ได้ผลลัพธ์เดียวกันได้ แต่ divmod() มีข้อดีบางประการ:
- -ความกระชับของโค้ด (Conciseness): คุณได้ผลลัพธ์ทั้งสองในบรรทัดเดียว ทำให้โค้ดสั้นลงและอ่านง่ายขึ้น
- ประสิทธิภาพ (Efficiency): โดยทั่วไปแล้ว divmod() อาจมีประสิทธิภาพที่ดีกว่าเล็กน้อย เนื่องจากมันทำการคำนวณการหารเพียงครั้งเดียวในระดับพื้นฐาน แล้วจึงคืนค่าผลลัพธ์ทั้งสองออกมา แทนที่จะทำการคำนวณสองครั้งแยกกัน (ครั้งหนึ่งสำหรับผลหาร และอีกครั้งสำหรับเศษ)
- ความชัดเจน (Clarity): บ่งบอกเจตนาของโค้ดชัดเจนว่าคุณต้องการทั้งผลหารและเศษพร้อมกัน
มาดูตัวอย่างการใช้งาน divmod() ในสถานการณ์จริงเพื่อทำความเข้าใจประโยชน์ของมัน:
1. การแปลงหน่วยเวลา (เช่น วินาทีเป็นนาที/วินาที)
นี่เป็นกรณีคลาสสิกที่ divmod() ส่องประกาย
โค้ด: เลือกทั้งหมด
total_seconds = 200
# หากใช้ // และ % แยกกัน
minutes_sep = total_seconds // 60
seconds_sep = total_seconds % 60
print(f"Separate: {minutes_sep} minutes, {seconds_sep} seconds") # Output: Separate: 3 minutes, 20 seconds
# ใช้ divmod()
minutes, seconds = divmod(total_seconds, 60)
print(f"Using divmod(): {minutes} minutes, {seconds} seconds") # Output: Using divmod(): 3 minutes, 20 seconds
2. การแยกตัวเลขเป็นหลักต่างๆ
คุณสามารถใช้ divmod() เพื่อแยกตัวเลขออกเป็นหลักต่างๆ ได้ เช่น หลักสิบ, หลักหน่วย
โค้ด: เลือกทั้งหมด
number = 78
tens, units = divmod(number, 10)
print(f"{number} มี {tens} สิบ {units} บาท.")
# ตัวอย่างการแปลงเงินบาทเป็นธนบัตรและเหรียญ
amount = 1350 # 1350 บาท
num_1000, remainder = divmod(amount, 1000)
num_500, remainder = divmod(remainder, 500)
num_100, remainder = divmod(remainder, 100)
num_50, remainder = divmod(remainder, 50)
num_20, remainder = divmod(remainder, 20)
num_10, remainder = divmod(remainder, 10)
print(f"{amount} บาท แบ่งได้:")
print(f"- ธนบัตร 1000 บาท: {num_1000} ใบ")
print(f"- ธนบัตร 500 บาท: {num_500} ใบ")
print(f"- ธนบัตร 100 บาท: {num_100} ใบ")
print(f"- ธนบัตร 50 บาท: {num_50} ใบ")
print(f"- ธนบัตร 20 บาท: {num_20} ใบ")
print(f"- เหรียญ 10 บาท: {num_10} เหรียญ")
print(f"- เศษที่เหลือ: {remainder} บาท (ถ้ามี)")
divmod() เป็นฟังก์ชัน Built-in ของ Python ที่เรียบง่ายแต่มีประสิทธิภาพอย่างน่าประหลาดใจ ด้วยความสามารถในการคืนค่าทั้งผลหารและเศษส่วนจากการดำเนินการหารเพียงครั้งเดียว มันช่วยให้โค้ดของคุณกระชับขึ้น อ่านง่ายขึ้น และอาจมีประสิทธิภาพที่ดีขึ้นเล็กน้อยในบางสถานการณ์
ไม่ว่าจะเป็นการแปลงหน่วยเวลา, การแยกตัวเลขออกเป็นหลักต่างๆ, หรือการจัดการกับสถานการณ์ใดก็ตามที่ต้องการทั้งผลหารและเศษส่วนในคราวเดียว divmod() คือเครื่องมือที่คุณควรมีติดคลังแสงไว้ใช้งานครับ
อ้างอิง
- https://www.mindphp.com/บทเรียนออนไลน์/ ... ython.html
- https://www.mindphp.com/บทเรียนออนไลน์/ ... iable.html
- viewtopic.php?t=90492
- https://www.geeksforgeeks.org/division-operators-in-python/
- https://www.w3schools.com/python/ref_func_divmod.asp