สมมติว่าเรามีรายการของจำนวนตรรกยะ (เศษส่วน) เราต้องการหาผลคูณของพวกมันโดยใช้ฟังก์ชัน reduce() ฟังก์ชัน reduce() จะนำฟังก์ชันที่รับอาร์กิวเมนต์สองตัวไปประยุกต์ใช้กับรายการวัตถุจากซ้ายไปขวาอย่างสะสม
ตัวอย่างเช่น หาก fractions = [(5,3),(2,8),(6,9),(5,12),(7,2)] ผลลัพธ์จะเป็น (175, 432) เพราะ 5/3 × 2/8 × 6/9 × 5/12 × 7/2 = (5×2×6×5×7)/(3×8×9×12×2) = 2100/5184 = 175/432
ขั้นตอนการแก้ปัญหา
- สร้างรายการ fracs ใหม่
- สำหรับแต่ละ f ใน frac:
- สร้างอ็อบเจ็กต์ Fraction จากคู่ (ตัวเศษ, ตัวส่วน) f แล้วเพิ่มเข้าไปใน fracs
- t := reduce(fracs ด้วยฟังก์ชัน func(x, y) คืนค่า x*y)
- คืนค่าคู่ของ (ตัวเศษของ t, ตัวส่วนของ t)
ตัวอย่างโค้ด
from fractions import Fraction
from functools import reduce
def solve(frac):
fracs = []
for f in frac:
fracs.append(Fraction(*f))
t = reduce(lambda x, y: x * y, fracs)
return t.numerator, t.denominator
frac = [(5,3),(2,8),(6,9),(5,12),(7,2)]
print(solve(frac))
อินพุต
[(5,3),(2,8),(6,9),(5,12),(7,2)]
เอาต์พุต
(175, 432)