我們學習了關於撰寫程式的相關觀念
目前為止我們已經能夠撰寫基本的程式邏輯來處理簡單的資料。
在這章我們將學習如何從磁碟讀取資料並處理多個資料。
請先開啟文字編輯器,並且輸入以下文字後另存為 "result.txt" 檔案。
功能需求:衝浪比賽開始囉,主辦單位將每個參賽選手的成績都記錄下來,並存在"result.txt",請撰寫一個程式將最高分數找出來。
分析:得先讀取檔案"result.txt",然後將名字與分數抽離出來,最後在把最高分的分數取出來。
利用 Python 內建的函式 open() 將硬碟中的"result.txt"檔案讀取進來。
open() 函式如果讀取檔案成功,便會回傳檔案柄碼(file handle),利用 for 迴圈將檔案一行一行讀出來,最後記得用 close() 將檔案關閉。
程式碼:
result_f = open("result.txt")
for line in result_f:
print(line)
result_f.close
執行結果:
可以從上述的執行結果看到現在每一行字串都包含名字與分數,這兩個中間有一個空格,因此利用 Python內建的函式 split() 利用空格將字串分割開來。
程式碼:
result_f = open("result.txt")
for line in result_f:
line_split = line.split()
score = line_split[1]
print(score)
result_f.close
執行結果:
最後一步了,創建一個變數名為"max_score"紀錄目前最高的分數值,每次取得分數後都跟這個值做比較,如果大於則將目前最高分更新,如果小於目前最高分則不動。
程式碼:
result_f = open("result.txt")
max_score = 0
for line in result_f:
line_split = line.split()
score = float(line_split[1])
if(score > max_score):
max_score = score
print(max_score)
result_f.close
執行結果:
功能需求變更:參賽者希望可以最高看到前三名的成績。
分析:最直覺的想法就是新增另外兩個變數來分別存放第二名和第三名的分數,可是如果等下參賽者又想要看所有的成績排名,難道就要再次修正程式然後創建多個變數分別存下分數嗎?當然不是!這時候我們得使用陣列。
使用 陣列變數名稱 = [ ] 來創建陣列,接著將檔案中讀取的分數加入到陣列當中。
Python 內建的 append() 方法可以將元素加入到陣列中。
在上述程式中,我們使用 if 判斷邏輯來找出最大值,不過要如何找出第二、第三名的分數呢?利用排序把陣列中的資料從大排到小,即可得出第二名與第三名的分數。使用Python 內建的 sort()可以將陣列中的資料從小排到大,reverse() 則可以將陣列的排序反過來。
程式碼:
result_f = open("result.txt")
scores = []
for line in result_f:
line_split = line.split()
score = float(line_split[1])
scores.append(score)
scores.sort()
scores.reverse()
print(scores[0])
print(scores[1])
print(scores[2])
result_f.close
執行結果: