一、前言
在本期实验中我们将利用之前学习的相关Python文件操作来进行题目代码练习,巩固知识。
二、我的环境
- 电脑系统:Windows 11
- 语言版本:Python 3.10.4
- 编译器:VSCode
三、实验目的与要求
- 熟练掌握文件的打开、关闭和读写
- 理解数据组织的维度、掌握一维数据和二维数据的处理方法
- 掌握采用CSV格式对一二维数据文件进行读写的方法
四、实验任务
1、程序填空
【填空12-1】编写程序,根据用户输入的星座名称,输出此星座的出生日期范围及对应的星座符号。程序不完整,请完善代码。
星座及出生日期范围已存于文件SunSign.csv中,文件内容如下图所示。首先读入CSV文件中数据到一个列表中,然后获得用户输入,则输出此星座信息,直至用户输入“exit”程序结束。
fo=open(".\填空题\SunSign.csv", "r", encoding="GB18030") ls= [] forlineinfo: line=line.replace("\n","") ls.append(line.split(",")) fo.close() whileTrue: InputStr=input() InputStr.strip() flag=FalseifInputStr=='exit': breakforlineinls: ifInputStr==line[0]: print("{}座的生日位于{}-{}之间".format(chr(eval(line[3])), line[1], line[2])) flag=Trueifflag==False: print("输入星座名称有误!")
它运行的结果是:
白羊座♈座的生日位于321-419之间天蝎座♏座的生日位于1024-1122之间水瓶座♒座的生日位于120-218之间exit
【填空12-2】编写程序,统计并输出传感器采集数据中光照部分的最大值、最小值和平均值,所有值保留小数点后2位。程序不完整,请完善代码。
已知传感器采集数据文件为sensor-data.txt,如下图所示,其中每行是一个整体数据.分别包括"日期、时间、温度、湿度、光照和电压"等6个读数,光照数据处于第5列,在列表中表示光照数据时下标应为4。
f=open(".\填空题\sensor-data.txt", "r") avg, cnt=0, 0maxv, minv=0, 9999forlineinf: ls=line.split() cnt+=1val=eval(ls[4]) avg+=valifval>maxv: maxv=valifval<minv: minv=valprint("最大值、最小值、平均值分别是:{:.2f},{:.2f},{:.2f}".format(maxv, minv, avg/cnt)) f.close()
它运行的结果是:
最大值、最小值、平均值分别是:47.08,45.08,46.08
2、程序编程
【编程12-1】文件smartphone.txt 存放着部分公司手机年销量数据,每行为每家公司连续4年的销量数据,数据项间以制表符作为分隔,文件内容如下图所示。
编写程序,显示各公司年销量是否快速增长的情况(本题设年销量增长率均超过30%为快速增长),程序运行结果如下图所示。现给出部分程序代码,请根据题目要求进行编程。
rate=0.3defisBigGrowth(L, rate): foriinrange(0, len(L)-1): yearGrowth= (L[i+1]-L[i])/L[i] if(yearGrowth<rate): returnFalsereturnTrueprint("手机公司 是否快速增长?") data= [] withopen(".\编程题\smartPhone.txt",encoding="utf-8") asf: data=f.readlines() deldata[0] forcompanyindata: company=company.split() foriinrange(1, len(company)): company[i] =float(company[i]) ifisBigGrowth(company[1:], 30/100): print("%s\t\t%s"% (company[0], "快速")) else: print("%s\t\t%s"% (company[0], "否"))
它运行的结果是:
手机公司是否快速增长?Samsung否Apple否Huawei否OPPO快速Vivo快速ZTE否LG否Lenovo否Xiaomi否
五、最后我想说
本期有关文件和数据格式化的实验就到这里结束了,如果还对文件相关操作不熟悉的朋友可以去看看我前面更新的有关文件操作知识的博客。
另外,在本期实验中,如果出现编码报错,可以修改一下编码进行解决,如果出现无法找到文件的错误,可以尝试一下相对路径,看看文件是否跟代码放在同一文件目录下,或者使用绝对路径尝试一下。