【问题标题】:How to Print elements in a queue(Python)如何打印队列中的元素(Python)
【发布时间】:2018-02-14 03:58:35
【问题描述】:

我在 python 中有以下代码。在 LinkedQueue 类中,我创建了一个显示方法,用于打印队列中的所有元素。

class LinkedQueue :
    class _Node :

        def __init__(self, element, next):
            self._element = element
            self._next = next

        def get_elements(self):
            return self._element

        def set_elements(self, num):
            self._element = num        

    def __init__(self) :
        self._head = None
        self._tail = None
        self._size = 0

    def display(self):
        tmp = self._head
        while tmp != None :
            print(tmp.get_elements())
            tmp = tmp._next        

    def __len__(self) :
        return self._size

    def is_empty(self) :
        return self._size == 0

    def first(self) :
        if self.is_empty() :
            raise Empty('Queue is empty')
        return self._head._element

    def dequeue(self) :
        if self.is_empty():
            raise Empty('Queue is empty')
        answer = self._head._element
        self._head = self._head._next
        self._size -= 1
        if self.is_empty() :
            self._tail = None
        return answer

    def enqueue(self, e) :
        newest = self._Node(e,None)
        if self.is_empty() :
            self._head = newest
        else :
            self._tail._next = newest
        self._tail = newest
        self._size += 1

class Empty(Exception) :
    pass    

我还在类之外创建了一个菜单功能,它允许用户从两个选项中进行选择:将数字添加到队列或退出菜单。按“n”允许用户将号码添加到队列中。按“q”允许用户退出菜单。用户按下退出后,他们输入的数字将按照输入的顺序打印。我在打印数字时遇到问题,不确定如何解决。

def menu():
    queue = LinkedQueue()
    while True:
        print('n - to add a number')
        print('q - to quit')
        selection = input('Enter your selection: ')
        if selection == 'n':
            number = int(input("Enter a number: "))
            queue.enqueue(number)
        elif selection == 'q':
            break
    for item in queue.display():
        n = item

    counter = 0
    for i in range(len(queue)):
        counter += 1
        print('Entry # ', counter, '=', n)     

【问题讨论】:

  • 您应该更详细地描述您的“打印数字的问题”。你的预期结果是什么?你看到了什么?
  • 既然显示没有返回任何东西,你怎么能遍历它呢?调用 queue.display() 不够吗?
  • 您的 for i in range(len(queue)): 不会更新 n,因此您只会看到每个元素的相同值。
  • 请注意,您可以考虑将 is_empty 设为属性而不是可调用方法。

标签: python python-3.x class printing queue


【解决方案1】:

试试这个:

class LinkedQueue :
    class _Node :

        def __init__(self, element, next):
            self._element = element
            self._next = next

        def get_elements(self):
            return self._element

        def set_elements(self, num):
            self._element = num        

    def __init__(self) :
        self._head = None
        self._tail = None
        self._size = 0

    def display(self):
        tmp = self._head
        counter = 1
        while tmp != None :
            #print(tmp.get_elements())
            print('Entry # ', counter, '=', tmp.get_elements()) 
            tmp = tmp._next
            counter+=1

    def __len__(self) :
        return self._size

    def is_empty(self) :
        return self._size == 0

    def first(self) :
        if self.is_empty() :
            raise Empty('Queue is empty')
        return self._head._element

    def dequeue(self) :
        if self.is_empty():
            raise Empty('Queue is empty')
        answer = self._head._element
        self._head = self._head._next
        self._size -= 1
        if self.is_empty() :
            self._tail = None
        return answer

    def enqueue(self, e) :
        newest = self._Node(e,None)
        if self.is_empty() :
            self._head = newest
        else :
            self._tail._next = newest
        self._tail = newest
        self._size += 1

class Empty(Exception) :
    pass    



def menu():
    queue = LinkedQueue()
    while True:
        print('n - to add a number')
        print('q - to quit')
        selection = input('Enter your selection: ')
        if selection == 'n':
            number = int(input("Enter a number: "))
            queue.enqueue(number)
        elif selection == 'q':
            queue.display()
            break
    '''
        for item in queue.display():
        n = item

    counter = 0
    for i in range(len(q)):
        counter += 1
        print('Entry # ', counter, '=', n) 

    ''' 

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2013-07-26
    • 2014-04-12
    • 2023-04-02
    相关资源
    最近更新 更多