新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python代碼可以有多簡潔,看看它如何實(shí)現(xiàn)數(shù)組求極值
背景

Python 最大的優(yōu)勢是不需編譯,而且代碼簡潔。我初學(xué) Python 時,被它的簡潔震驚到了,尤其是文件操作和數(shù)組操作,只需要一行代碼搞定文件讀入,相同功能, Java 的 IO 操作基本上是十行代碼量。所以,偶爾也會用 Python 做一些小事情。
今天來整理一個 Python 的練習(xí)題,需求描述如下:
- 程序一: 接收用戶輸入的名字和成績,成績是1-100 間、最多兩位小數(shù)。
按Q結(jié)束輸入,并將合法輸入的數(shù)據(jù)寫入到一個文件。
- 程序二:讀取程序一輸出的文件,然后對成績計算平均值,并輸出最高分和最低分值及姓名。
實(shí)現(xiàn)分析
本例用到的知識點(diǎn):
- 文件操作,需要 try-except-finally ,處理文件異常;
- 判斷成績的正則:^[0-9]{1,2}(\.[0-9]{1,2})?$ ,成績可以是小數(shù)點(diǎn)后兩位小數(shù);
- while 循環(huán)條件, Python 的邏輯運(yùn)算是 and / or / not 等關(guān)鍵字,而不是邏輯操作符號;
- 使用 pd.read_csv 將 CVS 文件轉(zhuǎn)換成 DataFrame 數(shù)據(jù)集;
- 使用 DataFrame 的 max 、min、avg 、idmax、idmin 等函數(shù)完成計算操作。
成績信息收集
編寫一個 score_writer.py 腳本文件,內(nèi)容如下:
- 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 結(jié)束,成績范圍 [1-100],最多允許兩位小數(shù)。')
- # 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('輸入結(jié)束,存儲數(shù)據(jù)')
- except IOError:
- print("操作異常")
- finally:
- f1.close()
運(yùn)行結(jié)果:
成績數(shù)據(jù)計算
編寫一個 score_reader.py 腳本文件,內(nèi)容如下:
- 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()],' 分?jǐn)?shù)最高:',data['score'].max(axis = 0))
- print(data['name'][data['score'].idxmin()],' 分?jǐn)?shù)最低:',data['score'].min(axis = 0))
- except IOError:
- print("文件不存在")
由于存儲成的是 CVS 文件,標(biāo)題是 name,scroe ,轉(zhuǎn)換成 DataFrame 后計算最值的索引小標(biāo)后取名字列對應(yīng)的元素就能輸出最值的姓名了。
換一個不存在的文件路徑,程序捕獲異常:
編程啟示錄
Python 讀寫文件真是簡潔呀,兩行代碼搞定,而 Java 要寫幾十行,真是兩個極端。
想起前兩天看到一個語言對比圖:
文章名稱:Python代碼可以有多簡潔,看看它如何實(shí)現(xiàn)數(shù)組求極值
文章鏈接:http://fisionsoft.com.cn/article/dhhsigs.html


咨詢
建站咨詢
