0
所以我的老師讓我們實現一個使用我的數據結構類的堆棧鏈表的隊列。我想出了下面的代碼,我似乎不明白,蟒蛇給我,當我跑我的單元測試的錯誤...Python的隊列鏈接列表
這裏是我的代碼`
class QueueLinked:
def __init__(self,capacity):
self.capacity = capacity # a capacity
self.num_items = 0
self.front = None
self.rear = None
def is_empty(self): # This function will retrun a bool if the number of items is = to 0
return self.num_items == 0
def is_full(self):
return self.num_items == self.capacity
def enqueue(self, item):
if self.num_items == self.capacity:
raise IndexError('Can\'t enqueue into full queue.')
else:
self.num_items +=1
temp = Node() # this creates a temporary node
oldrear = self.rear
self.rear = temp
oldrear.set_next(self.rear)
def dequeue(self):
if self.num_items == 0: # this will through an exception because if there are no items we cant pop
raise IndexError('Can\'t dequeue from empty queue.')
else:
self.num_items -=1
oldfront = self.front
self.front = self.front.get_next()
return oldfront.get_data()
def num_in_queue(self):
return self.num_items
class Node:
def __init__(self):
self.next = None # this initializes a node with next pointing to none
def set_data(self, data): # this passes the parameter data to the data portion of the node
self.data = data # this constructs that data portion of a node everytime we create a node
def get_data(self): # get data from the node that was previous newwest
return self.data # returns the data from that node
def set_next(self, newNext): # this will set a new next to point as in after the head
self.next = newNext # this constructs the next portion of the 2 part portion from the node
def get_next(self): # this will retrieve the next value from the node
return self.next`
這裏是我的單位測試用例
import unittest
from queues import *
class TestCase(unittest.TestCase):
# testing an empty Array
def test_if_empty(self): # we will test if the array is empty using is_empty
q = QueueLinked(3) # [none,none,none]
self.assertTrue(q.is_empty()) # Should be True
def test_if_full(self):
q = QueueLinked(3)
q.enqueue(4)
q.enqueue(5)
q.enqueue(8)
self.assertTrue(q.is_empty())
if (__name__ == '__main__'):
,這是我一直在接受我的Pycharm錯誤..
Ran 2 tests in 0.000s
FAILED (errors=1)
Launching unittests with arguments python -m unittest test_queues.TestCase in C:\Users\M\Documents\CSC 202\Labs\Lab3
Error
Traceback (most recent call last):
File "C:\Users\M\AppData\Local\Programs\Python\Python36-32\lib\unittest\case.py", line 59, in testPartExecutor
yield
File "C:\Users\M\AppData\Local\Programs\Python\Python36-32\lib\unittest\case.py", line 605, in run
testMethod()
File "C:\Users\M\Documents\CSC 202\Labs\Lab3\test_queues.py", line 17, in test_if_full
q.enqueue(4)
File "C:\Users\M\Documents\CSC 202\Labs\Lab3\queues.py", line 63, in enqueue
oldrear.set_data(self.rear)
AttributeError: 'NoneType' object has no attribute 'set_data'
我不明白什麼?
第一次通過'self.rear == None',所以當你設置'oldrear'時你試圖調用'None.set_data' – jmunsch
你是否包含正確的代碼?我在'Queue()。enqueue()'中看不到'oldrear.set_data()' –