Python练习(三)

目录

传感器日志光照统计

文本字符分布

《白鹿原》词频统计

习题


传感器日志光照统计

本题目附件提供了一个传感器日志文件,为文本类型,共 1 千行,每行包含了日期、时间和 4 种传感器读数值。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

其中,4 种传感器读数值分别是:温度、湿度、光照和电压。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

在 Python123 中读取文件请假设题目对应文件在当前目录下,文件打开函数参考如下:

f=open("sensor-data-1k.txt", "r")

编写程序,统计日志反应的光照平均值,保留小数点后 2 位。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

示例1:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入:无
输出:"43.24"
注意:示例1 是一个输入输出示范样例,不是正确结果。

with open("sensor-data-1k.txt","r") as f:
    sum, cnt = 0, 0
    for line in f:
        ls = line.split()
        cnt += 1
        sum += eval(ls[4])
    print(f"{sum / cnt:.2f}")

文本字符分布

分析附件 data.txt 文件的字符分布,即每个字符对应的数量。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

按照 字符:数量 显示,每行一个结果,如果没有出现该字节则不显示输出,字符采用 Unicode 编码升序排列。

示例1:

输入:无
输出:"

a:1
b:2
c:3
"

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪注意:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

  • 示例1 是一个输入输出示范样例,不是正确结果;
  • 字符:数量,其中,字符表示为可打印字符,按照升序。
with open('data.txt','r') as f:
    d = {}
    for line in f:
        for s in line:
            d[s] = d.get(s, 0) + 1
    res = sorted(d)
    for i in res:
        print(i + ':' + str(d[i]))

《白鹿原》词频统计

附件是《白鹿原》原著内容,请读入内容,分词后输出长度大于 2 且最多的单词。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

如果存在多个单词出现频率一致,请输出按照 Unicode 排序后最大的单词。

示例1:

输入:无
输出:"白鹿原"‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

注意:示例1 是一个输入输出示范样例,不是正确结果

import jieba
with open("白鹿原.txt","r",encoding='utf-8') as f:
    words = jieba.lcut(f.read())
    counts = {}
    for word in words:
        if len(word) >= 2:
            counts[word] = counts.get(word, 0) + 1
    print(list(max(counts.items(), key=lambda x: x[1]))[0])

习题

1.文本的平均列数 

打印输出附件文件latex.txt的平均列数,计算方法如下:

1)有效行指包含至少一个字符的行,不计算空行;

2)每行的列数为其有效字符数;

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

with open('latex.log','r') as f:
    cnt, s = 0, 0
    for line in f.readlines():
        if not len(line) == 1 and line[-1] == '\n':
            cnt += 1
            s += len(line) - 1
    print(int(round(s / cnt, 0)))

2.图像文件压缩。使用PIL库对图片进行等比例压缩,无论压缩前文件大小如何,压缩后文件小于10KB

from PIL import Image
import os
img=Image.open("picture.jpg")
size=os.path.getsize("picture.jpg")/1024 #单位是B,装换为KB
width,height=img.size
while True:
    if size>10:
        width, height = round(width * 0.9), round(height * 0.9)
        cimg = img.resize((int(width), int(height)), Image.Resampling.LANCZOS)
        cimg.save("cpicture.jpg")
        size = os.path.getsize("cpicture.jpg") / 1024
    else:
        break

pillow库中的resize()

resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)

size:元组参数 (width,height),图片缩放后的尺寸

resample:可选参数,指图像重采样滤波器,可选的采样类型包括:

Image.NEAREST :低质量

Image.BILINEAR:双线性

Image.BICUBIC :三次样条插值(默认)

Image.ANTIALIAS:高质量

box:对指定图片区域进行缩放,box的参数值是长度为4的像素坐标元组,即 (左,上,右,下)

ps:被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;

reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有3.0和5.0

你可能感兴趣的:(Python,python,开发语言)