首先,我需要实现一个Deque函数。
push_front在deque的头部添加了一个键。
push_back在deque的尾部添加了一个键。
pop_front从deque的头部提取一个键并返回它。
pop_back从deque的尾部提取密钥并返回它。
前沿返回head元素而不移除它
back返回尾元素而不移除它
size返回deque中元素的数目
清除从deque中移除所有元素。
使用此方法和错误处理实现Deque类。对于pop_frontpop_front、pop_backpop_back、前端、背面的方法,必须检查deque中是否有元素。如果它是空的,则该方法必须返回字符串"error“,而不是返回一个数值。
push_front、push_back、clear方法必须返回字符串"ok“。
最后,实现process_deque(命令),它接受命令列表并返回每个命令的答案列表。
class Deque:
def __init__(self, max_len = 60000):
self.max_len = max_len + 1
self.queue = [0] * self.max_len
self.head = 0
self.tail = 0
def push_front(self, key):
self.queue[self.head] = key
self.head= (self.head - 1) % self.max_len
return "ok"
def push_back(self, key):
self.queue[self.tail] = key
self.tail = (self.tail + 1) % self.max_len
return "ok"
def pop_front(self):
if self.head == self.tail:
return "error"
else:
res = self.queue[self.head]
self.head = (self.head + 1) % self.max_len
return res
def pop_back(self):
res = self.queue[self.tail]
self.tail = (self.tail - 1) % self.max_len
return res
def front(self):
if self.head == self.tail:
return "error"
else:
return self.queue[self.head]
def back(self):
if self.head == self.tail:
return "error"
else:
return self.queue[self.tail]
def clear(self):
self.queue = []
return "ok"
def size(self):
return len(self.queue)
def process_deque(commands):
if __name__ == "__main__": # ***This is the 3 test case***
test_cmd = ["push_front 1", "push_front 2", "push_back 6", "front", "back", "clear", "size", "back"]
# should print ["ok", "ok", "ok", 2, 6, "ok", 0, "error"]
print(process_deque(test_cmd))
test_cmd = ["pop_front", "back", "push_back 2", "size"]
# should print ["error", "error", "ok", 1]
print(process_deque(test_cmd))
test_cmd = ["push_back 1", "push_front 10", "push_front 4", "push_front 5", "back", "pop_back", "pop_back", "back"]
# should print ["ok", "ok", "ok", "ok", 1, 1, 10, 4]
print(process_deque(test_cmd))我不知道如何实现process_deque(命令)来测试这种情况。
谢谢。
我只是调整了我的Deque函数,下面的代码更加清晰,因为我不知道如何实现process_deque(命令),所以我根本没有测试它。
class Deque:
def __init__(self):
self.item = []
def push_front(self, key):
self.item.append(key)
return "ok"
def push_back(self, key):
self.items.insert(0,key)
return "ok"
def pop_front(self):
if self.head == self.tail:
return "error"
else:
self.items.pop()
def pop_back(self):
return self.items.pop(0)
def front(self):
if self.head == self.tail:
return "error"
else:
return self.item[0]
def back(self):
if self.head == self.tail:
return "error"
else:
return self.item[-1]
def clear(self):
self.queue = []
return "ok"
def size(self):
return len(self.queue)发布于 2021-01-26 06:35:09
您可以使用getattr方法获得所述的here方法
def process_deque(commands):
d = Deque()
output = []
for each_command in commands:
splitted = each_command.split(" ")
method_name = splitted[0]
arg = splitted[1] if len(splitted)==2 else None
method = getattr(d, method_name)
if(arg):
output.append(method(arg))
else:
output.append(method())
return output但是您的deque类方法实现是不正确的。这不属于这个问题的范围,因此为了证明上述方法是正确的,我使用的是pythondeque,它本身可以充当一个deque。
class Deque:
def __init__(self, max_len = 60000):
# self.max_len = max_len + 1
# self.queue = [0] * self.max_len
# self.head = 0
# self.tail = 0
self.queue = []
def push_front(self, key):
# self.queue[self.head] = key
# self.head= (self.head - 1) % self.max_len
self.queue.insert(0, key)
return "ok"
def push_back(self, key):
# self.queue[self.tail] = key
# self.tail = (self.tail + 1) % self.max_len
self.queue.append(key)
return "ok"
def pop_front(self):
# if self.head == self.tail:
# return "error"
# else:
# res = self.queue[self.head]
# self.head = (self.head + 1) % self.max_len
# return res
if len(self.queue) == 0:
return "error"
else:
res = self.queue.pop(0)
return res
def pop_back(self):
# res = self.queue[self.tail]
# self.tail = (self.tail - 1) % self.max_len
if len(self.queue) == 0:
return "error"
else:
res = self.queue.pop()
return res
return res
def front(self):
if len(self.queue) == 0:
return "error"
else:
return self.queue[0]
def back(self):
if len(self.queue) == 0:
return "error"
else:
return self.queue[-1]
def clear(self):
self.queue.clear()
return "ok"
def size(self):
return len(self.queue)
def process_deque(commands):
d = Deque()
output = []
for each_command in commands:
splitted = each_command.split(" ")
method_name = splitted[0]
arg = splitted[1] if len(splitted)==2 else None
method = getattr(d, method_name)
if(arg):
output.append(method(arg))
else:
output.append(method())
return output
if __name__ == "__main__": # ***This is the 3 test case***
test_cmd = ["push_front 1", "push_front 2", "push_back 6", "front", "back", "clear", "size", "back"]
# should print ["ok", "ok", "ok", 2, 6, "ok", 0, "error"]
print(process_deque(test_cmd))
test_cmd = ["pop_front", "back", "push_back 2", "size"]
# should print ["error", "error", "ok", 1]
print(process_deque(test_cmd))
test_cmd = ["push_back 1", "push_front 10", "push_front 4", "push_front 5", "back", "pop_back", "pop_back", "back"]
# should print ["ok", "ok", "ok", "ok", 1, 1, 10, 4]
print(process_deque(test_cmd))输出
['ok', 'ok', 'ok', '2', '6', 'ok', 0, 'error']
['error', 'error', 'ok', 1]
['ok', 'ok', 'ok', 'ok', '1', '1', '10', '4']https://stackoverflow.com/questions/65896656
复制相似问题