首页 > 解决方案 > 在python中超时

问题描述

关于python中队列的任务

学院给了我一个任务,我完成了。但是当我开始在大学平台上进行测试时,它给了我一个错误。这是条件:

排队任务。仅使用数组实现队列。通过文件进行数据的输入输出。输入和输出文件的名称通过命令行参数(分别为第一个和第二个)指定。输入数据格式 输入文件包含一系列命令。空白行被忽略。第一行始终包含“set_size N”,其中 N 是最大队列大小,一个整数。随后的每一行只包含一个命令:push X、pop 或 print,其中 X 是没有空格的任意字符串。

结果格式 print 命令将队列的内容(从头到尾)打印在一行上,用空格分隔。如果队列为空,则输出“empty”。如果队列已满,则输出“溢出”。如果队列为空,pop 命令显示项目或“下溢”。调用“set_size”命令时,必须为队列分配不超过一次的内存。在任何不可理解的情况下,任何命令的结果都会是“错误”。

import sys
class Queue:
    def __init__(self, size):
        self.queue = []
        self.size = size
    def push(self, value):
        if len(self.queue) < self.size:
            return self.queue.append(value)
        else:
            return 'overflow'
    def pop(self):
        if self.queue:
            first = self.queue[0]
            del self.queue[0]
            return first
        else:
            return 'underflow'
    def print(self):
        global text
        if len(self.queue) > 0:
            for i, element in enumerate(self.queue):
                if i + 1 < len(self.queue):
                    text += element + ' '
                else:
                    text += element
        else:
            text += 'empty'
        text += '\n'
        return
names = []
if __name__ == "__main__":
    for args in sys.argv[1:]:
        names.append(args)
in_file = names[0]
out_file = names[1]
f = open(in_file)
defined = False
text = ''
for i in f:
    com = i.strip('\n')
    if com.split(' ')[0] == 'set_size' and not defined:
        size = int(com.split(' ')[1])
        q = Queue(size)
        defined = True
    elif com == 'pop' and defined:
        text += q.pop() + '\n'
    elif com.split(' ')[0] == 'push' and len(com.split(' ')) == 2 and defined:
        value = com.split(' ')[1]
        pt = q.push(value)
        if pt is not None:
            text += pt + '\n'
    elif com == 'print' and defined:
        q.print()
    elif com == '':
        continue
    else:
        text += 'error\n'
f.close()
f = open(out_file, 'w')
f.write(text)
f.close()

在test 13上传到测试平台时,由于超出处理时间而收到错误 在此处输入图像描述


这里是本次receive测试提交的文件上传的git所在的,应该是的文件,但是我的程序由于处理时间超过了,被测试平台自己强行停止了 https://github.com /RoyalGoose/testrepos


可能是什么问题呢?如何编辑代码以使其更快地工作?

标签: pythonqueue

解决方案


以这种形式实现。最终平台接受了结果

class Queue:
    def __init__(self, file_in, file_out):
        self.size = None
        self.queue = []
        self.file_in = file_in
        self.file_out = file_out
        return

    def set_size(self, size):
        try:
            assert self.size is None
        finally:
            self.size = int(size)
            self.queue.clear()

    def push(self, value):
        self.queue.append(value if len(self.queue) < self.size else 'overflow')

    def pop(self):
        return (self.queue.pop(0) if self.queue else 'underflow') + '\n'

    def print(self):
        return (' '.join(self.queue) if self.queue else 'empty') + '\n'

    def work(self):
        with open(self.file_in) as f, open(self.file_out, 'w') as f2:
            fr = filter(bool, map(str.rstrip, f))
            for line in fr:
                try:
                    try:
                        (cmd, arg) = line.split(' ', 1)
                    except ValueError:
                        f2.write(getattr(self, line)())
                    except Exception:
                        raise
                    else:
                        getattr(self, cmd)(arg)
                except Exception as e:
                    f2.write('error\n')
                continue
        return


if __name__ == '__main__':
    q = Queue('input', 'outfile')
    q.work()

推荐阅读