筆記:深入淺出-程式設計(四)

閱讀時間約 5 分鐘

複習一下:

我們學習了關於撰寫程式的相關觀念

  • 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。
  • 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。
  • 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。
  • 函式(function) : 藉由函式重利用相同功能區塊的程式碼,讓程式的可讀性變高且容易維護。

目前為止我們已經能夠撰寫基本的程式邏輯來處理簡單的資料。

檔案與陣列:

在這章我們將學習如何從磁碟讀取資料並處理個資料。

  • 檔案:電腦中有兩個可以儲存資料的地方,一個就是硬碟,另一個就是記憶體。硬碟可以存的資料量遠遠大於記憶體,並且是永續性的(意即:如果把電腦電源關掉,資料還是會存在)但是缺點是在處理資料時速度慢;而資料存放在記憶體中,存取與變更的速度很快,但是是非永續性的(意即:當程式退出時記憶體的資料便會消失)。
  • 陣列:當程式需要一次處理一大筆資料時,這時候為了處理資料而為每一個資料創建獨立一個變數是沒有效益的(想像一下如果要處理的數據量有1000甚至更多呢?),並且程式碼也會因此變得複雜可讀性降低,比較好的作法就是利用陣列來處理。
  • 群集變數:陣列是一種群集變數(collection variable) 或稱為資料結構(data structure)。每個陣列可以包含多個變數,每一個變數稱為陣列元素(array element) 。

事前準備:

請先開啟文字編輯器,並且輸入以下文字後另存為 "result.txt" 檔案。

raw-image

先從一場衝浪比賽的計分程式開始:

功能需求:衝浪比賽開始囉,主辦單位將每個參賽選手的成績都記錄下來,並存在"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

執行結果:

raw-image

字串處理:

可以從上述的執行結果看到現在每一行字串都包含名字與分數,這兩個中間有一個空格,因此利用 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

執行結果:

raw-image

條件判斷:

最後一步了,創建一個變數名為"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

執行結果:

raw-image

可以列出前三名的分數?

功能需求變更:參賽者希望可以最高看到前三名的成績。

分析:最直覺的想法就是新增另外兩個變數來分別存放第二名和第三名的分數,可是如果等下參賽者又想要看所有的成績排名,難道就要再次修正程式然後創建多個變數分別存下分數嗎?當然不是!這時候我們得使用陣列。

創建陣列:

使用 陣列變數名稱 = [ ] 來創建陣列,接著將檔案中讀取的分數加入到陣列當中。

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

執行結果:

raw-image








5會員
8內容數
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
深入介紹卡片盒筆記深入介紹卡片盒筆記法 課程推薦: 課程網址:https://www.is79.com/知識管理整合線上課程/ 知識管理整合方案:卡片盒筆法+Obsidian+Notion 課程早鳥價6折+限量100名商品折扣碼:VBJSYMY5(2023/12/31止) 一、為什麼卡片盒筆記法這麼重要? 好的工
Thumbnail
avatar
Morgan
2023-10-27
《探索筆記卡片:從瞬間想法到深入的知識管理》6:保值與更新:確保筆記持續價值的秘訣隨著時間的推移,我們的筆記方法可能會改變。 不論是筆記的內容還是方法,都需要隨著學習的深入而進行調整。 持續的反思和嘗試是筆記進步的關鍵。 ▋我們的筆記方法為何會隨著時間而改變? 因為你寫筆記的目的也會換。
Thumbnail
avatar
王啟樺
2023-09-10
《探索筆記卡片:從瞬間想法到深入的知識管理》5:寫作的魔力:如何透過原創筆記改變自己對於筆記,有時我們會引用他人的段落,有時則用自己的話寫。 使用他人的句子可以作為學習的起點,但最終還是應該進行原創的寫作。 ▋你應該如何平衡引用和原創? 我的原則是,每引用一次,就原創五句話。 這五句話,其實可以用131寫作節奏來寫
Thumbnail
avatar
王啟樺
2023-09-09
《探索筆記卡片:從瞬間想法到深入的知識管理》4:Obsidian vs. Notion:哪款筆記軟體更適合你的輸入與輸出隨著筆記卡片的增加,某些軟體可能面臨效能問題。 例如,Obsidian軟體可能在卡片過多時讀取變慢。 但這些技術上的問題不應成為制約我們學習的障礙。
Thumbnail
avatar
王啟樺
2023-09-08
《探索筆記卡片:從瞬間想法到深入的知識管理》3:解密學術論文:用卡片化學習突破知識障礙學術論文的段落比網路文章更為複雜。 利用筆記卡片的方式來解析學術論文能夠提煉出更具價值的知識。 此外,卡片化的學習方法可能對學術研究特別有用。
Thumbnail
avatar
王啟樺
2023-09-07
《探索筆記卡片:從瞬間想法到深入的知識管理》2:鮮為人知的寫作秘訣:掌握段落解構術!每篇文章的段落都圍繞著特定的話題。 一個好的段落會圍繞著中心話題,且各句子間有很強的相關性。 通過拆解與分析段落,我們可以更深入地了解其核心意義。
Thumbnail
avatar
王啟樺
2023-09-06
《探索筆記卡片:從瞬間想法到深入的知識管理》1:讓學習更輕鬆:筆記卡片攻略大公開入門一個新知識時,筆記卡片的構造方式十分重要。 雖然我也曾經排斥直接引用他人的段落,但摳過來的內容可以為我們提供初步的了解。 利用筆記卡片建立自己的知識架構,可助於更深入地學習。
Thumbnail
avatar
王啟樺
2023-09-05
阿卡西紀錄解讀筆記(24)-深入內在每一次的阿卡西紀錄解讀都會改寫我們的能量網格,我們已經與開啟紀錄前的自己不一樣了,即將活出更有力量且擴展的自己,無需擔心自己沒有改變。
Thumbnail
avatar
煌語|阿卡西書籤與光的閱讀者
2023-07-11
深入了解區塊鏈(四) - Internal Txns? 真的有筆交易紀錄存在?今天我們會開始深入探討到EVM(以太坊虛擬機)上的一點點基礎知識。 若您是一個常常在etherscan.io上追蹤交易的朋友,一定對上面提到的各項資訊並不陌生。但我們觀察一筆交易時會發現,etherscan.io又額外提供了Internel Txns,這又是什麼呢?本篇將一同來探討。
Thumbnail
avatar
Steve Tsai
2023-05-23