日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

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

背景

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)容如下:

 
 
 
  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ǐng)輸入姓名和考試成績(jī),按 Q 結(jié)束,成績(jī)范圍 [1-100],最多允許兩位小數(shù)。') 
  10.  
  11.     # receive name 
  12.     name = input("姓名:") 
  13.     while name != 'Q' and name != 'q' : 
  14.         score = input("成績(jī):").strip() 
  15.         while re.match(pattern,score)==None and score != '100': 
  16.             score = input("成績(jī)不合法,請(qǐng)重新輸入:").strip() 
  17.  
  18.         print(name,':',score) 
  19.         f1.write(name+','+score+'\r\n') 
  20.         name = input("姓名:") 
  21.     print('輸入結(jié)束,存儲(chǔ)數(shù)據(jù)') 
  22. except IOError: 
  23.      print("操作異常") 
  24. finally: 
  25.     f1.close() 

運(yùn)行結(jié)果:

成績(jī)數(shù)據(jù)計(jì)算

編寫一個(gè) score_reader.py 腳本文件,內(nèi)容如下:

 
 
 
  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()],' 分?jǐn)?shù)最高:',data['score'].max(axis = 0)) 
  11.     print(data['name'][data['score'].idxmin()],' 分?jǐn)?shù)最低:',data['score'].min(axis = 0)) 
  12. except IOError: 
  13.      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