首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现process_deque(命令)来测试我的Deque函数?

如何实现process_deque(命令)来测试我的Deque函数?
EN

Stack Overflow用户
提问于 2021-01-26 06:13:38
回答 1查看 177关注 0票数 0

首先,我需要实现一个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_frontpush_backclear方法必须返回字符串"ok“。

最后,实现process_deque(命令),它接受命令列表并返回每个命令的答案列表。

代码语言:javascript
复制
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(命令),所以我根本没有测试它。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 06:35:09

您可以使用getattr方法获得所述的here方法

代码语言:javascript
复制
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

代码语言:javascript
复制
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))

输出

代码语言:javascript
复制
['ok', 'ok', 'ok', '2', '6', 'ok', 0, 'error']
['error', 'error', 'ok', 1]
['ok', 'ok', 'ok', 'ok', '1', '1', '10', '4']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65896656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档