Python代码可以有多简洁,看看它如何实现数组求极值
背景
Python 最大的代码多简优势是不需编译,而且代码简洁。可有看何我初学 Python 时,实现数组被它的求极简洁震惊到了,尤其是代码多简文件操作和数组操作,只需要一行代码搞定文件读入,可有看何相同功能,实现数组 Java 的求极 IO 操作基本上是十行代码量。所以,代码多简偶尔也会用 Python 做一些小事情。可有看何
今天来整理一个 Python 的实现数组练习题,需求描述如下:
程序一: 接收用户输入的求极名字和成绩,成绩是代码多简1-100 间、最多两位小数。可有看何按Q结束输入,实现数组并将合法输入的服务器租用数据写入到一个文件。
程序二:读取程序一输出的文件,然后对成绩计算平均值,并输出最高分和最低分值及姓名。实现分析
本例用到的知识点:
文件操作,需要 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 脚本文件,内容如下:
import re try: # define file reader f1 = open(E:/score.log,w,encoding=utf-8) f1.write(name,score\r\n) # a pattern check score input pattern = "^[0-9]{ 1,2}(\.[0-9]{ 1,2})?$" print(请输入姓名和考试成绩,云服务器提供商按 Q 结束,成绩范围 [1-100],最多允许两位小数。) # receive name name = input("姓名:") while name != Q and name != q : score = input("成绩:").strip() while re.match(pattern,score)==None and score != 100: score = input("成绩不合法,请重新输入:").strip() print(name,:,score) f1.write(name+,+score+\r\n) name = input("姓名:") print(输入结束,存储数据) except IOError: print("操作异常") finally: f1.close()运行结果:

成绩数据计算
编写一个 score_reader.py 脚本文件,内容如下:
from pandas import DataFrame import pandas as pd # array to load score try: # define file reader data = pd.read_csv(E:/score.log) print(data) print(平均值,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)) except IOError: print("文件不存在")由于存储成的是 CVS 文件,标题是 name,scroe ,转换成 DataFrame 后计算最值的索引小标后取名字列对应的元素就能输出最值的姓名了。

换一个不存在的文件路径,程序捕获异常:

编程启示录
Python 读写文件真是简洁呀,两行代码搞定,而 Java 要写几十行,真是两个极端。
想起前两天看到一个语言对比图:
