第一题 无空隙回声输出
描述
获得用户输入,去掉其中全部空格,将其他字符按收入顺序打印输出。
输入输出示例
解答代码
思路:清洗字符串的空格,用replace()方法。
s = input()s = s.replace(' ', '')print(s)
第二题 文件关键行数
描述
关键行指一个文件中包含的不重复行。关键行数指一个文件中包含的不重复行的数量。
统计附件文件中与关键行的数量。
输入输出示例
此处仅示例输出格式。
解答代码
思路:我的思路是,遍历文件,将第一次出现的行全都存到一个set()中,当相同的行第二次出现时(即有重复的)存储到另一个set中,然后用第一个set的长度-第二个set的长度就得到关键行数。
我还试了包括有重复行的行数,也是没有通过。
此外我还尝试了空行计算入内和不计算入内的情况。也都没有通过。
感谢qq_40674586的解答,使得这题有了测试通过的答案。从答案解释,这题就是计算总共有多少行(之后重复的行,不计算在内),空行也要计算入内。
# 版本一with open('latex.log', 'r', encoding='utf-8') as f:rows = set()ex = set()s = 0for line in f:if line not in rows:rows.add(line)else:ex.add(line)print('共{}关键行'.format(len(rows) - len(ex)))# 试的另外一种包含重复的行的with open('latex.log', 'r', encoding='utf-8') as f:rows = set()s = 0for line in f:if line not in rows:rows.add(line)s += 1print(s)# 正确答案版本1with open('latex.log', 'r', encoding='utf-8') as f:rows = set()s = 0for line in f:if line not in rows:rows.add(line)s += 1print('共{}关键行'.format(s))# 最简洁的答案with open('latex.log', 'r', encoding='utf-8') as f:rows_set = set(f.readlines())print('共{}关键行'.format(len(rows_set)))
第三题 字典翻转输出
描述
读入一个字典类型的字符串,反转其中键值对输出。
即,读入字典key:value模式,输出value:key模式。
输入格式
用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。
输出格式
给定字典d,按照print(d)方式输出。
输入输出示例
用户输入的字典格式的字符串,如果输入不正确,提示:输入错误。
解答代码
思路:主要用try…except来控制输入,通过isinstance()方法判断是否是字典,通过zip()来实现key和value互换,注意存在value不可hash的情况,所以需要try…except来监控处理。感谢评论区的小伙伴给出了更简洁的答案。
# 通过测试的版本,这个版本虽然可以通过测试,但是是有问题的,比如输入'abc’就会导致程序报错s = input()dict_1 = eval(s)if isinstance(dict_1, dict):dict_2 = dict(zip(dict_1.values(), dict_1.keys()))print(dict_2)else:print('输入错误')# 更推荐这个版本s = input()try:dict_1 = eval(s)if isinstance(dict_1, dict):dict_2 = dict(zip(dict_1.values(), dict_1.keys()))print(dict_2)else:print('输入错误')except:print('输入错误')# 更简洁的答案s = input()try:dict_1 = eval(s)dict_2 = dict(zip(dict_1.values(), dict_1.keys()))print(dict_2)except:print('输入错误')
第四题 《沉默的羔羊》之最多单词
描述
附件是《沉默的羔羊》中文版内容,请读入内容,分词后输出长度大于2且最多的单词。
如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词
输入格式
文件
输出格式
字符串
输入输出示例
仅提供一个输出示范样例。
解答代码
思路:利用jieba库进行分词,然后主要用到了字典的get方法和列表的sort()方法。不过这题中按照Unicode排序这一步没有做,也通过了测试。评论区有小伙伴给出了解答,所以代码也相应进行了更新。
import jiebawith open('沉默的羔羊.txt', 'r', encoding='utf-8') as f:txt = f.read()words = jieba.lcut(txt)counts = {}for word in words:# 过滤长度为1的单词if len(word) == 1:continueelse:counts[word] = counts.get(word, 0) + 1# 对词语根据出现的频率进行排序wordlst = list(counts.items())wordlst.sort(key=lambda x:x[1], reverse=True)maxfreq = wordlst[0][1] # 确定最大的频率maxfreqwords = [] # 新建一个最大频率单词的列表(假设存在多个单词频率相同,且频率最大)for i in wordlst:if i[1] == maxfreq:maxfreqwords.append(i) else:break # 一旦遍历至频率值小于最大频率值时,跳出,不必继续遍历,节约计算时间maxfreqwords.sort(key=lambda x:x[0], reverse=True) # 按照Unicode排序print(maxfreqwords[0][0])
说明:题目来自北理嵩天老师【Python语言程序设计 (第8期)】课程,如有侵权,立删。
后记:
我从本硕药学零基础转行计算机,自学路上,走过很多弯路,也庆幸自己喜欢记笔记,把知识点进行总结,帮助自己成功实现转行。
下半年进入职场,深感自己的不足,所以给自己定了个计划,每日学一技,日积月累,厚积薄发。
如果你想和我一起交流学习,欢迎大家关注我的微信公众号每日学一技
,扫描下方二维码或者搜索每日学一技
关注。
这个公众号主要是分享和记录自己每日的技术学习,不定期整理子类分享,主要涉及 C – > Python – > Java,计算机基础知识,机器学习,职场技能等,简单说就是一句话,成长的见证!