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

本文通过一个Python练习题展示了如何简洁地处理数组数据,包括读取CSV文件,计算平均值以及找到分数最高和最低的姓名。对比了Python与Java在文件操作上的简洁度差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

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 = “1{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 要写几十行,真是两个极端。

想起前两天看到一个语言对比图:在这里插入图片描述


  1. 0-9 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值