社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  python开源

Python写法求解华为2016笔试真题第二题,

夏天 • 6 年前 • 990 次点击  

空间限制:65536K

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。

处理:

1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)

2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)

3.输入的文件可能带路径,记录文件名称不能带路径

最近开始整理python的资料,会陆续放到博客中存档。找了几个qq群,其中有一个QQ群302521268。后面就没怎么加群了,还是需要看官方文档为主

输入描述:

一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

文件路径为windows格式



如:E:\V1R2\product\fpgadrive.c 1325

输出描述:

将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1

结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。



如果超过8条记录,则只输出前8条记录.



如果文件名的长度超过16个字符,则只输出后16个字符

输入例子1:

E:\V1R2\product\fpgadrive.c 1325

输出例子1:

fpgadrive.c 1325 1

1 import sys

2 import collections

3 index = collections.OrderedDict()

4 while True:

5 try:

6 s = sys.stdin.readline().split()

7 key_name = s[0].split('\')[-1] + '@' + s[1] # 把文件名和行号作为key

8 if index.get(key_name, 0) == 0:

9 index[key_name] = 1

10 else:

11 # 相同的文件名和行号合并

12 index[key_name] = index.get(key_name, 0) + 1

13 except Exception as e:

14 break

15 # 对dict排序,按照值从大到小排序

16 idx = sorted(index.items(), key=lambda x: x[1], reverse=True)

17 for i in range(len(idx)):

18 # 判断是否大于16个字符

19 d = idx[i][0].split('@')

20 file_name = d[0]

21 line = d[1]

22 if len(file_name)>16:

23 file_name = file_name[-16:]

24

25 print('%s %s %s' %(file_name, line, idx[i][1]))

26 if i == 7:

27 break

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31820
 
990 次点击