当前位置: 首页 > 科技观察

Python代码可以有多简洁,来看看它是如何实现数组的极值的

时间:2023-03-14 19:39:36 科技观察

背景Python最大的优点就是不需要编译,代码简洁。初学Python的时候,就被它的简洁震惊了,尤其是文件操作和数组操作。读取文件只需要一行代码。同样的功能,Java的IO操作基本上需要十行代码。所以,偶尔我会用Python做一些小事情。今天整理一道Python练习题。需求描述如下:程序一:接收用户输入的姓名和年级。等级介于1和100之间,最多保留两位小数。按Q结束输入并将有效的输入数据写入文件。程序2:读取程序1输出的文件,然后计算得分的平均值,输出最高分和最低分以及姓名。实现并分析本例中用到的知识点:文件操作需要try-except-finally来处理文件异常;判断结果的规律性:^[0-9]{1,2}(\.[0-9]{1,2})?$,结果可以是小数点后两位小数;while循环条件,Python的逻辑运算是and/or/not等关键字,而不是逻辑运算符号;使用pd.read_csv将CVS文件转换为DataFrame数据集;使用DataFrame的max、min、avg、idmax、idmin等函数完成计算操作。收集分数信息,编写一个score_writer.py脚本文件,内容如下:importretry:#definefilereaderf1=open('E:/score.log','w',encoding='utf-8')f1.write('name,score\r\n')#apatterncheckscoreinputpattern="^[0-9]{1,2}(\.[0-9]{1,2})?$"print('请输入姓名和考试成绩,按Q结束,成绩范围[1-100],最多允许两位小数。')#receivenamename=input("Name:")whilename!='Q'andname!='q':score=input("Score:").strip()whire.match(pattern,score)==Noneandscore!='100':score=input("分数无效,请重新输入:").strip()print(name,':',score)f1.write(name+','+score+'\r\n')name=input("Name:")print('输入结束,存储数据')exceptIOError:print("操作异常")finally:f1.close()操作结果:分数数据计算写一个score_reader.py脚本文件,内容如下:frompandasimportDataFrameimportpandasaspd#arraytoloadscoretry:#definefilereaderdata=pd.read_csv('E:/score.log')print(data)print('average',data['score'].mean(axis=0))print(data['name'][data['score'].idxmax()],'最高分:',data['score'].max(axis=0))print(data['name'][data['score'].idxmin()],'最低分:',data['score'].min(axis=0))exceptIOError:print("文件不存在")Since存储为cvs文件,标题为name,scroe,转换为DataFrame,计算最有价值的索引下标,然后取name列对应的元素,输出最有价值的name。改成一个不存在的文件路径,程序捕获异常:ProgrammingApocalypsePython读写文件真的很简单,两行代码搞定,而Java要写几十行,真是两个极端。记得前两天看到一个语言对比图: