第一题 文本的平均列数
描述
打印输出附件文件的平均列数,计算方法如下:
(1)有效行指包含至少一个字符的行,不计算空行;
(2)每行的列数为其有效字符数;
(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。
输入输出示例
仅给出输出格式示例,非正确答案。
输入
输出
无
6123
解答代码
思路:用rows去累计非空行数,用columns去累计有效字符数(即每行的列数),然后计算columns/rows + 0.5再用int()方法即可实现四舍五入。
# 文本的平均列数
with open('latex.log') as f:
for line in f:
# 判断非空行
if not len(line) ==1 and line[-1] == '\n':
rows += 1
# 去掉最后一个换行符'/n'
columns += len(line) -1
print(int(columns/rows + 0.5))
第二题 CSV格式清洗与转换
描述
附件是一个CSV格式文件,提取数据进行如下格式转换:
(1)按行进行倒序排列;
(2)每行数据倒序排列;
(3)使用分号(;)代替逗号(,)分割数据,无空格;
按照上述要求转换后将数据输出。
输入输出示例
以下是一个格式示例,不是最终结
输入
输出
(以下内容在文件中)
1;2;3
9;8;7
4;5;6
6;5;4
7;8;9
3;2;1
解答代码
思路:使用replace()或者strip()方法去掉每行最后的回车,再用replace去掉每行中的空格,用split()和join()方法实现字符串和列表的转换。
with open('data.csv', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 按行进行倒序排列
lines.reverse() # 原地转换
# lines = lines[::-1] # 利用切片进行倒序
for line in lines:
# 用分号(;)代替逗号(,)分割数据,无空格
line = line.strip('\n')
# line = line.replace('\n', '')
line = line.replace(' ', '')
# 每行数据倒序排列
t = line.split(',')
t.reverse() # 原地倒序
# t = t[::-1] # 切片倒序
# 输出转换后的数据
print(';'.join(t))
说明:题目来自北理嵩天老师【Python语言程序设计 (第8期)】课程,如有侵权,立删。