ทำความเข้าใจและใช้งาน divmod() ใน Python

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

Sakana
PHP Super Member
PHP Super Member
โพสต์: 307
ลงทะเบียนเมื่อ: 16/06/2025 9:38 am

ทำความเข้าใจและใช้งาน divmod() ใน Python

โพสต์ที่ยังไม่ได้อ่าน โดย Sakana »

ในการเขียนโปรแกรม เรามักจะต้องคำนวณทั้งผลหารและเศษส่วนจากการหารตัวเลขหนึ่งด้วยอีกตัวเลขหนึ่ง ฟังก์ชันพื้นฐานอย่าง // (Integer Division) และ % (Modulo Operator) ช่วยให้เราทำสิ่งเหล่านี้ได้ แต่ Python มีฟังก์ชันในตัวที่ทรงพลังกว่านั้น นั่นคือ divmod() ซึ่งช่วยให้เราได้ผลลัพธ์ทั้งสองอย่างในคำสั่งเดียว
บทความนี้จะพาคุณไปทำความเข้าใจว่า divmod() คืออะไร, ทำไมถึงมีประโยชน์, และวิธีการใช้งานในสถานการณ์ต่างๆ โดยเราจะอธิบายการใช้ // และ % แยกกัน เพื่อให้เห็นความแตกต่างที่ชัดเจน รวมถึงยกตัวอย่างการใช้งานจริง เช่น การแปลงวินาทีเป็นนาทีและวินาที หรือการคำนวณเงินทอนเป็นเหรียญต่าง ๆ อย่างเป็นระบบ

divmod() คืออะไร?
divmod() เป็นฟังก์ชัน Built-in ของ Python ที่รับอาร์กิวเมนต์สองตัว คือตัวตั้งหาร (x) และตัวหาร (y) และจะคืนค่าเป็น tuple ที่ประกอบด้วยสองค่า:
  • ผลหารแบบจำนวนเต็ม (Quotient): หรือ x // y
    เศษส่วน (Remainder): หรือ x % y
ไวยากรณ์ (Syntax):

โค้ด: เลือกทั้งหมด

divmod(x, y)
ตัวอย่าง:

โค้ด: เลือกทั้งหมด

result = divmod(10, 3)
print(result) # Output: (3, 1)
# นั่นคือ 10 หาร 3 ได้ 3 เหลือเศษ 1

ทำไมต้องใช้ divmod() แทน // และ % แยกกัน?
แม้ว่าคุณจะสามารถใช้ // และ % เพื่อให้ได้ผลลัพธ์เดียวกันได้ แต่ divmod() มีข้อดีบางประการ:
  • -ความกระชับของโค้ด (Conciseness): คุณได้ผลลัพธ์ทั้งสองในบรรทัดเดียว ทำให้โค้ดสั้นลงและอ่านง่ายขึ้น
    - ประสิทธิภาพ (Efficiency): โดยทั่วไปแล้ว divmod() อาจมีประสิทธิภาพที่ดีกว่าเล็กน้อย เนื่องจากมันทำการคำนวณการหารเพียงครั้งเดียวในระดับพื้นฐาน แล้วจึงคืนค่าผลลัพธ์ทั้งสองออกมา แทนที่จะทำการคำนวณสองครั้งแยกกัน (ครั้งหนึ่งสำหรับผลหาร และอีกครั้งสำหรับเศษ)
    - ความชัดเจน (Clarity): บ่งบอกเจตนาของโค้ดชัดเจนว่าคุณต้องการทั้งผลหารและเศษพร้อมกัน
ตัวอย่างการใช้งาน divmod() ในสถานการณ์ต่างๆ
มาดูตัวอย่างการใช้งาน 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
ผลลัพธ์
Python Knowledge-1.png
Python Knowledge-1.png (2.32 KiB) Viewed 93 times
จะเห็นว่าโค้ดที่ใช้ divmod() นั้นกระชับกว่ามาก

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} บาท (ถ้ามี)")
ผลลัพธ์
Python Knowledge-1.png
Python Knowledge-1.png (5.01 KiB) Viewed 93 times
สรุป
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
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 6