分类:字符串
知识点:
-
分割字符串 my_str.split('\\')
-
字符串只保留最后16位字符 my_str[-16:]
-
列表可以作为队列、栈
添加元素到第一个位置 my_list.insert(0, elem)
增加元素到最后一个位置 my_list.append(elem)
删除第一个 my_list.pop(0)
删除最后一个 my_list.pop()
题目来自【牛客】
import sys
class ErrorLogger:
def __init__(self):
self.records = [] # 用于存储错误记录
self.ignore = [] # 排除的记录
def log_error(self, filename, line_number):
# 去除文件名中的路径,只保留文件名
filename = filename.split('\\')[-1]
# 如果文件名超过16个字符,只保留最后16个字符
if len(filename) > 16:
filename = filename[-16:]
if (filename + "_" + line_number) in self.ignore:
return
# 检查是否已经记录过相同的错误
for index, record in enumerate(self.records):
if record['filename'][-16:] == filename and record['line_number'] == line_number:
self.records[index]['count'] += 1
return
# 如果没有记录过相同的错误,添加新的记录
self.records.append({'filename': filename, 'line_number': line_number, 'count': 1})
# 保持记录列表最多8条记录
if len(self.records) > 8:
# print(self.records)
deleted_record = self.records.pop(0) # 移除最早的记录
self.ignore.append(deleted_record['filename'] + "_" + deleted_record['line_number'])
def print_records(self):
# print(self.records)
for record in self.records:
print(f"{record['filename']} {record['line_number']} {record['count']}")
if __name__ == "__main__":
# 创建ErrorLogger实例
logger = ErrorLogger()
# 输入错误信息,每行一个错误信息,包括带路径的文件名和行号,以空格隔开
for line in sys.stdin:
error_msg = line.split('\n')[0]
filename, line_number = error_msg.split(' ') # 分割文件名和行号
logger.log_error(filename, line_number) # 记录错误信息
logger.print_records() # 打印最新的8条错误记录
by 软件工程小施同学