Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมตรวจสอบว่าการดำเนินการจัดส่งทั้งหมดถูกต้องหรือไม่ใน Python

สมมติว่าเรามีรายการสตริงชื่อ orders แต่ละสมาชิกเริ่มต้นด้วย "P" หรือ "D" โดย "P" หมายถึงรับออเดอร์ (pickup) และ "D" หมายถึงส่งมอบ (delivery) ตัวอักษรตามด้วยหมายเลขออเดอร์ เช่น "P6" แสดงรับออเดอร์ 6 เราต้องตรวจสอบว่า orders ถูกต้องตามกฎ:

  • ไม่สามารถส่งมอบออเดอร์ก่อนรับได้
  • ทุกการรับต้องมีการส่งมอบ
  • ออเดอร์ที่รับและส่งมอบแล้ว ไม่สามารถรับหรือส่งซ้ำได้

เช่น ถ้าอินพุตคือ orders = ["P1", "D1", "P2", "P3", "D3", "D2"] ผลลัพธ์จะเป็น True เพราะออเดอร์แรกส่งหลังรับ และออเดอร์ที่ 2-3 รับพร้อมกันและส่งมอบทีหลัง

ขั้นตอนการแก้ปัญหา

  1. a := แมปใหม่
  2. ถ้า orders มีรายการซ้ำ คืนค่า False
  3. สำหรับแต่ละ i ใน orders:
    • ถ้า i เริ่มด้วย "P" ให้ a[หมายเลขออเดอร์] = 1
    • มิฉะนั้นถ้า i เริ่มด้วย "D":
      • ถ้า หมายเลขออเดอร์ ไม่อยู่ใน a คืนค่า False
      • มิฉะนั้น a[หมายเลขออเดอร์] -= 1
  4. คืนค่า True ถ้า sum(a.values()) == 0 มิฉะนั้น False

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

def solve(orders):
    a = {}
    if len(set(orders)) != len(orders):
        return False
    for i in orders:
        if i[0] == "P":
            a[i[1:]] = 1
        elif i[0] == "D":
            if i[1:] not in a:
                return False
            else:
                a[i[1:]] -= 1
    return sum(a.values()) == 0

orders = ["P1", "D1", "P2", "P3", "D3", "D2"]
print(solve(orders))

อินพุต

["P1", "D1", "P2", "P3", "D3", "D2"]

เอาต์พุต

True