在Python中检查所有列出的交付操作是否有效的程序

在Python中检查所有列出的交付操作是否有效的程序

假设我们有一个名为orders的字符串列表。orders列表中的每个元素都以“P”或“D”开头。“P”表示已捡起,“D”表示“交付”。这些字母后面跟着订单编号。例如,“P6”表示捡起订单6。根据以下规则,我们必须检查订单列表是否有效−

  • 我们不能在取货前交付订单
  • 每个取货必须交付
  • 已经被拾起且已交付的订单不能再次被拾起或交付

因此,如果输入为orders = [“P1”, “D1”, “P2”, “P3”, “D3”, “D2”],则输出将为True,因为第一个订单在拾起后被交付,对于第二个和第三个订单,它们一次被拾起并最终也被交付。

要解决此问题,我们将按照以下步骤执行−

  • a:=新映射
  • 如果orders有任何重复条目,则
    • 返回False
  • 对于orders中的每个i,执行以下步骤−
    • 如果i以“P”开头,则
      • a[pick up order number] = 1
    • 否则,当i以“D”开头时,则
      • 如果订单编号不在a中,则
      • 返回False
      • 否则,
      • a[delivery order number]减1
  • 当a的所有值列表中的所有元素之和相同时返回true,否则返回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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程