python - 在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
可能是什么问题呢?如何编辑代码以使其更快地工作?
解决方案
以这种形式实现。最终平台接受了结果
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()
推荐阅读
- rest - 415-不支持的媒体类型
- javascript - 基于 JSON 数据的 React JS 动画
- powerbuilder - 如何在 PowerBuilder 中将函数作为参数传递
- java - java.lang.IllegalArgumentException: bound 必须是正数
- ruby-on-rails - Report only first event of of model for each item - Rails model/view
- javascript - ContentEditable 在 Ionic 中无法在 iOS 上运行
- javascript - 从 HTML 表/JSON 解析的对象数组中选择并存储元素
- powershell - 如何使用 powershell 安装多个证书?
- ios - 如何在视频流中间恢复视频?
- node.js - 使用 Cloudinary 上传图像时,Node js 应用程序不显示错误