新聞中心
背景

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


咨詢
建站咨詢
