Python123第七周作业+练习题

  • Post author:
  • Post category:python


作业程序题


一、文本的平均列数

题目描述:打印输出附件文件的平均列数,计算方法如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(1)有效行指包含至少一个字符的行,不计算空行;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(2)每行的列数为其有效字符数;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。

t = open("latex.log",encoding='utf-8')
l=0
c=0
for line in t:
    line = line.strip("\n")
    if line=="":
        continue
    l+=1
    c+=len(line)
print(round(c/l))

注意点:①Python3.8版本中round()函数五舍六入。

②每一行中都有换行字符“\n”,先去掉换行字符再判断是否为空行。


二、CSV格式清洗与转换

题目描述:附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(1)按行进行倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(2)每行数据倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(3)使用分号(;)代替逗号(,)分割数据,无空格;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

按照上述要求转换后将数据输出。

输入 输出

示例

1,2,3

4,5,6

7,8,9

9;8;7

6;5;4

3;2;1

f=open("data.csv")
line=f.readlines()
line.reverse()
for i in line:
    i=i.replace('\n','')
    a=i.split(",")
    a.reverse()
    print(";".join(a))

参考链接:


https://blog.csdn.net/weixin_44521703/article/details/91128714?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159667452619724835856936%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159667452619724835856936&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-2-91128714.first_rank_ecpm_v3_pc_rank_v2&utm_term=CSV%E6%A0%BC%E5%BC%8F%E6%B8%85%E6%B4%97%E4%B8%8E%E8%BD%AC%E6%8D%A2&spm=1018.2118.3001.4187

练习程序题

一、

文件行数

描述:打印输出附件文件的有效行数,注意:空行不计算为有效行数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

这个题目比较容易这里直接给出代码。

t = open("latex.log","rt",encoding='utf-8')
s=0
for i in t:
    i=i.replace("\n","")
    if i=="":
        continue
    s+=1
print("共{}行".format(s))


二、文件字符分布

描述:统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

同时请输出文件一共包含的字符数量。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

注意输出格式,各元素之间用英文逗号(,)分隔。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。

解题思路:


①遍历文件中的每一个字符


②判断小写字母



③输出格式控制

对于我来说,其中第三点是最难想到的!

t = open("latex.log","rt",encoding='utf-8')
t=t.read()
s=0
t=list(t)
counts ={}
for i in t:
    if i<='z' and i>='a':
        counts[i]=counts.get(i,0)+1
    s+=1
print("共{}字符".format(s),end="")
for i in range(97,123):
    print(",{}:{}".format(chr(i),counts[chr(i)]),end="")

第一点:用for in 语句遍历文件

第二点:字符之间的大小比较,判断小写字母

第三点:字典存储小写字母及其个数(文本词频统计里面提到过)

第四点:for in range(97,123)控制输出97是a的Unicode,122是z的Unicode。

第四点参考链接:


https://blog.csdn.net/weixin_43429677/article/details/107429749?biz_id=102&utm_term=%E6%96%87%E4%BB%B6%E5%AD%97%E7%AC%A6%E5%88%86%E5%B8%83python&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-107429749&spm=1018.2118.3001.4187


三、文件独特行数

描述:统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。

f = open("latex.log")
ls = f.readlines()
s = set(ls)
for i in s:
    ls.remove(i)
t = set(ls)
print("共{}独特行".format(len(s)-len(t)))

这个题目比较有意思!

代码解释:一个文件内容为2,2,3,3,4,执行s=set(ls)操作之后,得到

独特元素个数+非独特元素个数

,只剩下2,3,4,现在从文件中剔除s中出现的元素



这里只剔除出现在s中的元素一遍





此时文件中所有的独特元素被剔除,

因此对文件元素再执行set()操作,之后执行len()操作,得到

非独特元素的个数,

和上面的(独特元素个数+非独特元素个数)相减,即为

独特元素的个数

以上是对单个字符的举例解释,此题类比到行即可。


四、CSV格式列变换

描述:附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入输出示例:这是一个格式示例,不是正确结果。

输入 输出
示例

1,2,3,4

a,b,c,d

4,3,2,1

d,c,b,a

f=open("data.csv")
line=f.readlines()
for i in line:
    i=i.replace('\n','')
    a=i.split(",")
    a.reverse()
    print(",".join(a))

此题和作业题第二题相似,此处不再赘述。


五、CSV格式数据清洗

描述:附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

(2)清洗后打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入输出示例:这是一个格式示例,不是正确结果。

输入 输出
示例

(在文件中)

1, 2, 3, 4, 5

‘a’, ‘b’ , ‘c’ , ‘d’,’e’

1,2,3,4,5

‘a’,’b’,’c’,’d’,’e’

f=open("data.csv")
line=f.readlines()
for i in line:
    i=i.replace('\n','')
    i=i.replace(" ",'')
    a=i.split(",")
    print(",".join(a))

与上题类似,不再展开解释。



版权声明:本文为ybxnp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。