【问题标题】:How to create a queue of dictionaries per customer?如何为每个客户创建字典队列?
【发布时间】:2023-01-09 22:32:02
【问题描述】:

我是 python 的初学者。我们有一个任务要求我们创建一个字典队列。我不确定如何在列表中执行此操作。这是我的代码(顺便说一句,这是播放代码,未在功能上使用)我的主要目标是更好地理解这一点。代码:

class Queue:
    def __init__(self):
        self.items = []
        
    def size(self):
        return len(self.items)

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if self.size() == 0:
            return None
        return self.items.pop(0)

    def show_queue(self):
        print(self.items)  


# CODE CHALLENGE
class IceCreamShop:
    order = {
        "customer" : "",
        "flavor" : "",
        "scoops" : "",
    }
    def __init__(self, flavors):
        self.flavors = flavors
        order = Queue()
        
        
    def take_order(self, customer, flavor, scoops):
        if flavor in self.flavors and scoops in range(1, 4):
            for orders in self.order:
                self.order["customer"] = customer
                self.order["flavor"] = flavor
                self.order["scoops"] = scoops
                print("Order Created!")
                print(self.order)
                return self.order         
        else:
            print("Sorry, we don't have that flavor.\n Pick another flavor or less scoops.")
            
            
    def show_all_orders(self):
        for orders in self.order.values():
            print(self.order)
            
    def next_order(self):
        # show next order in queue
        print("Next Order...")
           
            
shop = IceCreamShop(["rocky road", "mint chip", "pistachio"])
shop.take_order("Zachary", "pistachio", 3)
shop.take_order("Marcy", "mint chip", 1)
shop.take_order("Leopold", "vanilla", 2)
shop.take_order("Bruce", "rocky road", 0)
shop.show_all_orders()
shop.next_order()
shop.show_all_orders()

我不明白的是,

  1. 如何为队列中的每个客户保存字典?
  2. 我将如何为每个客户“出列”和“入列”字典
  3. 在“take_orders”函数中,它确实返回了 2 个不同的客户,Zach 和 Marcy
  4. 但是在“show_all_orders”函数中,它只打印出 Marcy?为什么是这样?

【问题讨论】:

    标签: python dictionary queue


    【解决方案1】:
    1. 让我们在 IceCreamShop 类的 __init__ 中创建队列来存储订单

      self.orders = Queue()
      
    2. 您不需要在 IceCreamShop 类中有一个 order 空白模板。因为你可以在函数take_order中创建局部变量order,然后将这个order添加到队列self.orders

      def take_order(self, customer, flavor, scoops):
          if flavor in self.flavors and scoops in range(1, 4):
              order = dict()
              order["customer"] = customer
              order["flavor"] = flavor
              order["scoops"] = scoops
              self.orders.enqueue(order)
      
              print("Order Created!")
              print(order)
              # return self.order
          else:
              print("Sorry, we don't have that flavor.
       Pick another flavor or less scoops.")
      
    3. 让我们改变功能show_all_orders

      def show_all_orders(self):
          self.orders.show_queue()
      
    4. 在这里我们可以给客户下一个订单并从队列中删除

      def next_order(self):
          # show next order in queue
          print("Next Order...")
          return self.orders.dequeue()
      

    【讨论】:

    • 这太完美了,我完全理解它是如何工作的。太感谢了。
    猜你喜欢
    • 2015-06-03
    • 2016-05-27
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多