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

开发 后端
Python 最大的优势是不需编译,而且代码简洁。我初学 Python 时,被它的简洁震惊到了,尤其是文件操作和数组操作,只需要一行代码搞定文件读入,相同功能, Java 的 IO 操作基本上是十行代码量。所以,偶尔也会用 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 脚本文件,内容如下:

 

  1. import re 
  2.  
  3. try: 
  4.     # define file reader 
  5.     f1 = open('E:/score.log','w',encoding='utf-8'
  6.     f1.write('name,score\r\n'
  7.     # a pattern check score input 
  8.     pattern = "^[0-9]{1,2}(\.[0-9]{1,2})?$" 
  9.     print('请输入姓名和考试成绩,按 Q 结束,成绩范围 [1-100],最多允许两位小数。'
  10.  
  11.     # receive name 
  12.     name = input("姓名:"
  13.     while name != 'Q' and name != 'q' : 
  14.         score = input("成绩:").strip() 
  15.         while re.match(pattern,score)==None and score != '100'
  16.             score = input("成绩不合法,请重新输入:").strip() 
  17.  
  18.         print(name,':',score) 
  19.         f1.write(name+','+score+'\r\n'
  20.         name = input("姓名:"
  21.     print('输入结束,存储数据'
  22. except IOError: 
  23.      print("操作异常"
  24. finally: 
  25.     f1.close() 

运行结果:

 

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

成绩数据计算

编写一个 score_reader.py 脚本文件,内容如下:

 

  1. from pandas import DataFrame 
  2. import pandas as pd 
  3.  
  4. # array to load score 
  5. try: 
  6.     # define file reader 
  7.     data = pd.read_csv('E:/score.log'
  8.     print(data) 
  9.     print('平均值',data['score'].mean(axis = 0)) 
  10.     print(data['name'][data['score'].idxmax()],' 分数最高:',data['score'].max(axis = 0)) 
  11.     print(data['name'][data['score'].idxmin()],' 分数最低:',data['score'].min(axis = 0)) 
  12. except IOError: 
  13.      print("文件不存在"

由于存储成的是 CVS 文件,标题是 name,scroe ,转换成 DataFrame 后计算最值的索引小标后取名字列对应的元素就能输出最值的姓名了。

 

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

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

 

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

编程启示录

Python 读写文件真是简洁呀,两行代码搞定,而 Java 要写几十行,真是两个极端。

想起前两天看到一个语言对比图:

 

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

 

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2022-06-27 06:23:23

代码编程

2022-12-15 10:52:26

代码开发

2020-05-11 15:23:58

CQRS代码命令

2017-04-01 16:10:49

OpenStack组件部署

2021-12-13 07:28:34

Java漏洞复现

2023-05-04 16:00:48

ChatGPTPHPWordPress

2009-08-26 15:09:57

C# Hook

2017-08-21 17:39:34

微型机

2009-11-16 16:17:45

PHP数组排序

2017-12-26 09:35:33

2019-08-06 10:35:25

Python时间序列可视化

2020-08-06 16:34:48

Python开发工具

2018-01-05 13:01:38

Python项目代码

2019-08-07 17:17:54

华为

2021-12-15 06:58:27

Go多版本管理

2022-02-17 16:44:19

函数Go 语言高阶函数

2021-04-25 11:31:45

React代码整洁代码的实践

2021-02-20 20:27:44

数组前缀性能

2022-03-11 10:31:49

Go语音

2017-10-24 15:28:27

PHP代码简洁SOLID原则
点赞
收藏

51CTO技术栈公众号