华为机考入门python3--(19)牛客19- 简单错误记录

发布于:2024-05-09 ⋅ 阅读:(25) ⋅ 点赞:(0)

分类:字符串

知识点:

  1. 分割字符串    my_str.split('\\')

  2. 字符串只保留最后16位字符      my_str[-16:]

  3. 列表可以作为队列、栈

    添加元素到第一个位置 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 软件工程小施同学


网站公告

今日签到

点亮在社区的每一天
去签到