考前综合练习-第七章
1、县区查询
类型:文件
描述
附件中的文本文件里包含河北省的地区信息,
文件第一行为省名和地级市名,其他每行的第一个地名为地级市名,后面地名为该地区的下辖区、县和县级市的名称,如下所示:
河北,石家庄,唐山,秦皇岛,邯郸,邢台,保定,张家口,承德,沧州,廊坊,衡水 石家庄,长安区,桥东区,…,藁城市,鹿泉市 唐山,路南区,路北区,…,遵化县,迁安县 秦皇岛,海港区,三海关区…,抚宁县,卢龙县 邯郸,邯山区,丛台区,…,曲周县,武安县 邢台,桥东区,桥西区,…,南宫市,沙河西 保定,新市区,北市区,…,安国市,高碑店市 张家口,桥东区,桥西区,…,赤城县,崇礼县 承德,双桥区,双滦区,…,围场蒙古做自治县 沧州,新华区,运河区,…,河间市,黄骅市 廊坊,安次区,广阳区,…,三河市,霸州市 衡水,桃城区,枣强县,…,深州市,冀州县
下面代码可以将该文件的内容读到列表中,运行这段代码,查看输出的列表内容,完成要求的操作:
with open(‘hebei.txt’, ‘r’, encoding=‘utf-8’) as file: district_ls = [x.split(‘,’) for x in file] print(district_ls)
(1)如果用户输入的是地级市名,以列表形式输出其下辖所有下辖区、县和县级市名称。
(2)如果用户输入的是市辖区、县或县级市名,则输出其上一级的地级市名,若有的市辖区名在不同地级市中同时存在时,输出全部地级市名。
输入格式
输入一个地区或县区名
输出格式
输出其下辖所有区县名称或其上一级的地级区名(有的县区名或能在不同地级区中同时存在,则分多行打印几个上级地区名。)
示例1
输入:唐山
输出:['路南区', '路北区', '古治区', '开平区', '丰南区', '丰润区', '曹妃甸区', '滦县', '滦南县', '乐亭县', '迁西县', '玉田县', '遵化县', '迁安县']
示例2
输入:鸡泽县
输出:邯郸
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':# 读取hebei.txt文件数据district_ls = []with open('hebei.txt', 'r', encoding='utf-8') as file:for line in file.readlines():# 进行分割每行数据并存储到列表中district_ls.append(line.strip().split(','))district_ls_new = {}# 根据题目要求处理数据存储格式,遍历每一行数据for row in district_ls:# print(row)# 创建一个新的列表来存储该地区的数据data_li = []for index in range(1, len(row)):# print(row[index])# 添加数据到data_li列表中data_li.append(row[index])# 存储到字典中,键为地区名,值为data_li列表:data = {'地区名': ['xxx', 'xxx'], '地区名': ['xxx', 'xxx']}district_ls_new[row[0]] = data_li# 获取用户输入的一个地区或县区名district = input()# 判断用户输入的是否是地区名if district in district_ls_new:# 如果输入的是地区名,输出该地区包含的县区名列表print(district_ls_new.get(district))else:# 如果输入的不是地区名,则遍历字典的值列表,判断输入的县区名是否在任何一个地区名的值列表中for city, districts in district_ls_new.items():if district in districts:print(city)
2、查询高校名
类型:文件处理
描述
#以下代码的作用是:
#打开文件,创建一个名为Uname的对象,Uname.readlines()的作用是将文件内容逐行读取到列表中
#文件的每行为一个以‘\n’结尾的字符串,做为列表ls的一个元素
#列表ls的第一个元素ls[0]的内容是:'序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n'with open('university.csv','r',encoding='utf-8') as Uname:ls = Uname.readlines()#print(ls)
#输出:['序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n',
# '1,北京大学,4111010001,教育部,北京市,本科,\n',
# '2,中国人民大学,4111010002,教育部,北京市,本科,\n',
# '3,清华大学,4111010003,教育部,北京市,本科,\n',
# ……
# ]
附件’university.csv’中包含北京主要高校的序号、学校名称、学校标识码、主管部门、所在地、办学层次、备注等信息,以逗号分隔符。 参考提示代码,将文件内容逐行读取到列表中,根据用户输入一个关键字,查询学校名称包含用户输入关键字的学校名并输出。
输入格式
输入一个关键字
输出格式
包含关键字的全部学校名
示例
输入:
中央
输出:
中央财经大学
中央音乐学院
中央美术学院
中央戏剧学院
中央民族大学
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':# 读取university.csv文件数据with open('university.csv', 'r', encoding='utf-8') as Uname:ls = Uname.readlines()# 获取用户输入的关键字keyword = input()# 存在包含关键字的学校名称matching_schools = []# 遍历每一行数据(从第二行开始,因为第一行是表头)for line in ls[1:]:# 将每行数据按逗号分割columns = line.strip().split(',')# 学校名称在第二列(索引为1)school_name = columns[1]# 判断学校名称是否包含用户输入的关键字if keyword in school_name:# 如果包含,添加到结果列表matching_schools.append(school_name)# 输出所有匹配的学校名称for school in matching_schools:print(school)
3、求温度平均值(1)
下面是一个传感器采集数据文件sensor-data.txt的一部分: 2018-02-28 01:03:16.33393 19.3024 38.4629 45.08 2.68742 2018-02-28 01:06:16.013453 19.1652 38.8039 45.08 2.68742 2018-02-28 01:06:46.778088 19.175 38.8379 45.08 2.69964 …… 其中,每行是一个读数,空格分隔多个含义,分别包括日期、时间、温度、湿度、光照和电压。其中,光照处于第5列。
请编写程序,统计并输出传感器采集数据中温度部分的平均值,所有值保留小数点后2位。报错输出用异常处理机制(try-except)。输出中冒号为中文符号。
输入
sensor-data.txt输出
平均的温度值是:20.09输入
s-data.txt输出
文件打开错误
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':# 获取输入文件名filename = input()# 根据题目要求捕获异常try:# 打开文件,使用 utf-8 编码方式读取with open(filename, 'r', encoding='utf-8') as file:# 读取文件的所有行到列表中lines = file.readlines()# 初始化总温度和计数器total_temperature = 0.0count = 0# 遍历每一行数据for line in lines:# 分割每行数据为一个列表,以空格分隔parts = line.strip().split(' ')# 如果分割后的列表长度大于等于3,说明至少包含日期、时间和温度信息if len(parts) >= 3:# 提取温度部分并转换为浮点数temperature = float(parts[2])# 累加温度值到总温度total_temperature += temperature# 计数加1count += 1# 如果有有效的温度数据if count > 0:# 计算平均温度average_temperature = total_temperature / count# 输出平均温度值,保留两位小数print(f'平均的温度值是:{average_temperature:.2f}')except FileNotFoundError:# 捕获文件未找到错误print("文件打开错误")except Exception as e:# 捕获其他异常并输出异常信息print(f"发生异常:{str(e)}")
4、求温度平均值(2)
下面是一个传感器采集数据文件sensor-data.csv的一部分:
2018-02-28 01:03:16.33393 19.3024 38.4629 45.08 2.687422018-02-28 01:06:16.013453 19.1652 38.8039 45.08 2.687422018-02-28 01:06:46.778088 19.175 38.8379 45.08 2.69964……
其中,每行是一个读数,空格分隔多个含义,分别包括日期、时间、温度、湿度、光照和电压。其中,温度处于第3列。
请编写程序,用户输入文件名,统计并输出传感器采集数据中光照部分的最大值,最小值,平均值,所有值保留小数点后2位。读取文件不用指定编码方式。
输入为:sensor-data.csv输出为:(符号为中文)最大值、最小值、平均值分别是:49.08, 40.08, 44.37输入为:x.csv输出为:文件打开错误
代码:
# -*- coding = utf-8 -*-
# @Author:为一道彩虹if __name__ == '__main__':# 获取输入文件名filename = input()try:# 打开文件,使用 utf-8 编码方式读取with open(filename, 'r', encoding='utf-8') as file:# 读取文件的所有行到列表中lines = file.readlines()# 存储光照数据light_values = []# 遍历每一行数据for line in lines:# 分割每行数据为一个列表,以逗号分隔parts = line.strip().split(',')# 提取光照数据light_values.append(float(parts[4]))# 如果有有效的光照数据if len(light_values) > 0:max_light = max(light_values)min_light = min(light_values)avg_light = sum(light_values) / len(light_values)print(f'最大值、最小值、平均值分别是:{max_light:.2f}, {min_light:.2f}, {avg_light:.2f}')except FileNotFoundError:# 捕获文件未找到错误print("文件打开错误")
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!