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

更新於 2024/10/29閱讀時間約 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








avatar-img
5會員
8內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Ivan的沙龍 的其他內容
函式 隨著程式功能越來越多,所撰寫的程式碼也會越來越龐大,此時要管理複雜的程式並不是很容易的事,此時可以利用函式來控制程式的複雜度。 提醒 本章節中原本有將訊息傳送給 Twitter 平台的範例,我將其修正為使用print()顯示訊息來模擬(為了不將時間花費在申請 Twitter 帳號)。
字串處理 每個程式都是在處理資料,就拿上一章的猜數字遊戲來說,程式處理的資料就是從使用者輸入的數值與亂數產生器所產生的數值做比較,而這章節主要著重於字串這個資料型態的說明。 字串就是一連串的字元。 字串的第一個字為起始位置(Start),從 0 開始。 字串其他位置的字元與起始字元的距離則
為什麼要學習撰寫程式? 使用別人所撰寫的軟體時,總是會受限於別人所提供的特定功能,但是當你遇到了一些工作是目前現有的軟體都幫不上忙的情況該怎麼辦? 如果你會撰寫程式,這時候就可以自己創造一個專為解決此工作的程式;換句話說,撰寫程式讓你擁有控制電腦的力量。 安裝 Python 首先必須在電腦
簡介: 這是一個關於程式設計的系列文章,或者準確的說是一系列的學習筆記,紀錄著我學習程式設計的筆記與心得。我決定從這本《深入淺出-程式設計》開始紀錄,原因是因為這本書在有限的篇幅中,僅可能的對於什麼是程式設計進行了生動的說明,內容著重於程式邏輯與現實編程中的所會遇到的實際問題,循序漸進且實際演練,
作者 稻盛和夫(1932/01/30 - 2022/08/24)。 1959年創立京都陶瓷股份有限公司(現稱京瓷),1984年創立第二電電(現稱KDDI)與成立稻盛財團,並創辦「京都賞」每年表彰對人類社會進步發展的有成人士,被譽為日本「經營之聖」。 簡介 作者回顧一路走來的人生與多年來的經營
作者 柳根榕,韓國最大閱讀論壇Awesome People 創辦人暨閱讀經營顧問CEO、 韓國知名自我開發部落格「超人老師的自我開發故事」格主。 這本書在說什麼 年少時期 小時候被繼母虐待,作者在沒有愛的環境下長大,因為沒有被愛過,也就不知道該如何去愛。為了保護自己不再受到傷害
函式 隨著程式功能越來越多,所撰寫的程式碼也會越來越龐大,此時要管理複雜的程式並不是很容易的事,此時可以利用函式來控制程式的複雜度。 提醒 本章節中原本有將訊息傳送給 Twitter 平台的範例,我將其修正為使用print()顯示訊息來模擬(為了不將時間花費在申請 Twitter 帳號)。
字串處理 每個程式都是在處理資料,就拿上一章的猜數字遊戲來說,程式處理的資料就是從使用者輸入的數值與亂數產生器所產生的數值做比較,而這章節主要著重於字串這個資料型態的說明。 字串就是一連串的字元。 字串的第一個字為起始位置(Start),從 0 開始。 字串其他位置的字元與起始字元的距離則
為什麼要學習撰寫程式? 使用別人所撰寫的軟體時,總是會受限於別人所提供的特定功能,但是當你遇到了一些工作是目前現有的軟體都幫不上忙的情況該怎麼辦? 如果你會撰寫程式,這時候就可以自己創造一個專為解決此工作的程式;換句話說,撰寫程式讓你擁有控制電腦的力量。 安裝 Python 首先必須在電腦
簡介: 這是一個關於程式設計的系列文章,或者準確的說是一系列的學習筆記,紀錄著我學習程式設計的筆記與心得。我決定從這本《深入淺出-程式設計》開始紀錄,原因是因為這本書在有限的篇幅中,僅可能的對於什麼是程式設計進行了生動的說明,內容著重於程式邏輯與現實編程中的所會遇到的實際問題,循序漸進且實際演練,
作者 稻盛和夫(1932/01/30 - 2022/08/24)。 1959年創立京都陶瓷股份有限公司(現稱京瓷),1984年創立第二電電(現稱KDDI)與成立稻盛財團,並創辦「京都賞」每年表彰對人類社會進步發展的有成人士,被譽為日本「經營之聖」。 簡介 作者回顧一路走來的人生與多年來的經營
作者 柳根榕,韓國最大閱讀論壇Awesome People 創辦人暨閱讀經營顧問CEO、 韓國知名自我開發部落格「超人老師的自我開發故事」格主。 這本書在說什麼 年少時期 小時候被繼母虐待,作者在沒有愛的環境下長大,因為沒有被愛過,也就不知道該如何去愛。為了保護自己不再受到傷害
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在企業管理者的日常生活中,筆記本可以說是不可或缺的工具。旭榮集團執行董事黃冠華就是這樣一位筆記本愛好者,不論在工作上還是生活中,他的筆記本始終如影隨形,成為他自我管理和工作規劃的重要支柱。
Thumbnail
歡迎回來 Kiyo 日文筆記~ 今天要來介紹久沒介紹的接尾辭(せつびじ)— 「通」。通(つう),中文通常會翻譯為行家;專家;權威;(很懂)...的人。 這個接尾辭的使用方式沒什麼受限,最常見就是名詞 + 通,如:食通(しょくつう)美食家,音楽通(おんがくつう)很懂音樂的人。當然也可以有英語通...
Thumbnail
本書討論了深度工作與淺薄工作的區分,以及如何減少淺薄工作的時間比例,提高深度工作效率所需的紀律,以及其他時間區段的安排建議。
Thumbnail
幣安Launchpool新代幣$ALT 明天1月25日早上8點挖幣截止,當日晚上6點就會上幣安交易市場了,今晚參與了 $ALT幣安上幣前的AMA。除了前晚和大家分享關於AltLayer,今天再加碼分享濃縮1小時AMA的內容。
Thumbnail
奇怪,名字呢? 在上一章中,我們成功的將"result.txt"檔案讀進來,並且取得了前三名的分數,但是仔細想想,這個程式卻沒有輸出前三名相對應的人名,這樣要怎麼頒獎給獲勝的人呢? 功能需求變更:請將程式修改成可以一同輸出前三名的名字與其分數 分析:按照目前所學,我們可以再多創建一個陣列用來存
Thumbnail
深入介紹卡片盒筆記法 課程推薦: 課程網址:https://www.is79.com/知識管理整合線上課程/ 知識管理整合方案:卡片盒筆法+Obsidian+Notion 課程早鳥價6折+限量100名商品折扣碼:VBJSYMY5(2023/12/31止) 一、為什麼卡片盒筆記法這麼重要? 好的工
Thumbnail
隨著時間的推移,我們的筆記方法可能會改變。 不論是筆記的內容還是方法,都需要隨著學習的深入而進行調整。 持續的反思和嘗試是筆記進步的關鍵。 ▋我們的筆記方法為何會隨著時間而改變? 因為你寫筆記的目的也會換。
Thumbnail
對於筆記,有時我們會引用他人的段落,有時則用自己的話寫。 使用他人的句子可以作為學習的起點,但最終還是應該進行原創的寫作。 ▋你應該如何平衡引用和原創? 我的原則是,每引用一次,就原創五句話。 這五句話,其實可以用131寫作節奏來寫
Thumbnail
隨著筆記卡片的增加,某些軟體可能面臨效能問題。 例如,Obsidian軟體可能在卡片過多時讀取變慢。 但這些技術上的問題不應成為制約我們學習的障礙。
Thumbnail
學術論文的段落比網路文章更為複雜。 利用筆記卡片的方式來解析學術論文能夠提煉出更具價值的知識。 此外,卡片化的學習方法可能對學術研究特別有用。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在企業管理者的日常生活中,筆記本可以說是不可或缺的工具。旭榮集團執行董事黃冠華就是這樣一位筆記本愛好者,不論在工作上還是生活中,他的筆記本始終如影隨形,成為他自我管理和工作規劃的重要支柱。
Thumbnail
歡迎回來 Kiyo 日文筆記~ 今天要來介紹久沒介紹的接尾辭(せつびじ)— 「通」。通(つう),中文通常會翻譯為行家;專家;權威;(很懂)...的人。 這個接尾辭的使用方式沒什麼受限,最常見就是名詞 + 通,如:食通(しょくつう)美食家,音楽通(おんがくつう)很懂音樂的人。當然也可以有英語通...
Thumbnail
本書討論了深度工作與淺薄工作的區分,以及如何減少淺薄工作的時間比例,提高深度工作效率所需的紀律,以及其他時間區段的安排建議。
Thumbnail
幣安Launchpool新代幣$ALT 明天1月25日早上8點挖幣截止,當日晚上6點就會上幣安交易市場了,今晚參與了 $ALT幣安上幣前的AMA。除了前晚和大家分享關於AltLayer,今天再加碼分享濃縮1小時AMA的內容。
Thumbnail
奇怪,名字呢? 在上一章中,我們成功的將"result.txt"檔案讀進來,並且取得了前三名的分數,但是仔細想想,這個程式卻沒有輸出前三名相對應的人名,這樣要怎麼頒獎給獲勝的人呢? 功能需求變更:請將程式修改成可以一同輸出前三名的名字與其分數 分析:按照目前所學,我們可以再多創建一個陣列用來存
Thumbnail
深入介紹卡片盒筆記法 課程推薦: 課程網址:https://www.is79.com/知識管理整合線上課程/ 知識管理整合方案:卡片盒筆法+Obsidian+Notion 課程早鳥價6折+限量100名商品折扣碼:VBJSYMY5(2023/12/31止) 一、為什麼卡片盒筆記法這麼重要? 好的工
Thumbnail
隨著時間的推移,我們的筆記方法可能會改變。 不論是筆記的內容還是方法,都需要隨著學習的深入而進行調整。 持續的反思和嘗試是筆記進步的關鍵。 ▋我們的筆記方法為何會隨著時間而改變? 因為你寫筆記的目的也會換。
Thumbnail
對於筆記,有時我們會引用他人的段落,有時則用自己的話寫。 使用他人的句子可以作為學習的起點,但最終還是應該進行原創的寫作。 ▋你應該如何平衡引用和原創? 我的原則是,每引用一次,就原創五句話。 這五句話,其實可以用131寫作節奏來寫
Thumbnail
隨著筆記卡片的增加,某些軟體可能面臨效能問題。 例如,Obsidian軟體可能在卡片過多時讀取變慢。 但這些技術上的問題不應成為制約我們學習的障礙。
Thumbnail
學術論文的段落比網路文章更為複雜。 利用筆記卡片的方式來解析學術論文能夠提煉出更具價值的知識。 此外,卡片化的學習方法可能對學術研究特別有用。